Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线性规划p‌;如何使用jooptimizer只得到一个可行解;r‌;o‌;b&x200C;l‌;e&x200C;m有多个或无限多个解决方案?_Java_Linear Programming_Joptimizer - Fatal编程技术网

Java 线性规划p‌;如何使用jooptimizer只得到一个可行解;r‌;o‌;b&x200C;l‌;e&x200C;m有多个或无限多个解决方案?

Java 线性规划p‌;如何使用jooptimizer只得到一个可行解;r‌;o‌;b&x200C;l‌;e&x200C;m有多个或无限多个解决方案?,java,linear-programming,joptimizer,Java,Linear Programming,Joptimizer,JoOptimizer是一个开源java库,有助于开发大多数决策支持系统。 见:joptimizer.com/ 我正在使用JoOptimizer来获得线性规划问题的最优解。 请参阅:jooptimizer.com/linearProgramming.html 我可以用它成功地得到大多数线性规划问题的答案。 例如:最小化3x+4y,这样2x+3y>=8,5x+2y>=12,x>=0,y>=0可以使用JoOptimizer进行如下求解 import com.joptimizer.functions.

JoOptimizer是一个开源java库,有助于开发大多数决策支持系统。 见:joptimizer.com/ 我正在使用JoOptimizer来获得线性规划问题的最优解。 请参阅:jooptimizer.com/linearProgramming.html

我可以用它成功地得到大多数线性规划问题的答案。 例如:最小化3x+4y,这样2x+3y>=8,5x+2y>=12,x>=0,y>=0可以使用JoOptimizer进行如下求解

import com.joptimizer.functions.ConvexMultivariateRealFunction;
import com.joptimizer.functions.LinearMultivariateRealFunction;
import com.joptimizer.optimizers.JOptimizer;
import com.joptimizer.optimizers.OptimizationRequest;
import org.apache.log4j.BasicConfigurator;

/**
 * @author K.P.L.Kanchana
 */

public class Main {

    public static void main(String[] args) throws Exception {

        // Objective function (plane)
        LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {3.0, 4.0}, 0); //minimize 3x+4y

        //inequalities (polyhedral feasible set G.X<H )
        ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
        // x >= 0
        inequalities[0] = new LinearMultivariateRealFunction(new double[]{-1.0, 0.00}, 0.0);  // focus: -x+0 <= 0 
        // y >= 0
        inequalities[1] = new LinearMultivariateRealFunction(new double[]{0.0, -1.00}, 0.0);  // focus: -y+0 <= 0
        // 2x+3y >= 8
        inequalities[2] = new LinearMultivariateRealFunction(new double[]{-2.0, -3.00}, 8.0); // focus: -2x-3y+8 <= 0
        // 5x+2y >= 12
        inequalities[3] = new LinearMultivariateRealFunction(new double[]{-5.0, -2.00}, 12.0);// focus: -5x-2y+12 <= 0

        //optimization problem
        OptimizationRequest or = new OptimizationRequest();
        or.setF0(objectiveFunction);
        or.setFi(inequalities);
        //or.setInitialPoint(new double[] {0.0, 0.0});//initial feasible point, not mandatory
        or.setToleranceFeas(1.E-9);
        or.setTolerance(1.E-9);

        //optimization
        JOptimizer opt = new JOptimizer();
        opt.setOptimizationRequest(or);
        int returnCode = opt.optimize();

        double[] sol = opt.getOptimizationResponse().getSolution();

        System.out.println("Length: " + sol.length);
        for (int i=0; i<sol.length/2; i++){
            System.out.println( "X" + (i+1) + ": " + Math.round(sol[i]) + "\ty" + (i+1) + ": " + Math.round(sol[i+1]) );
        }
    }

}
import com.jooptimizer.functions.convexmultivariateralfunction;
导入com.jooptimizer.functions.LinearMultivariateRealFunction;
导入com.jooptimizer.optimizer.jooptimizer;
导入com.jooptimizer.optimizers.OptimizationRequest;
导入org.apache.log4j.basicConfiguration;
/**
*@作者K.P.L.Kanchana
*/
公共班机{
公共静态void main(字符串[]args)引发异常{
//目标函数(平面)
linearmultivariaterelfunction objectiveFunction=新的linearmultivariaterelfunction(新的double[]{3.0,4.0},0);//最小化3x+4y
//不等式(多面体可行集G.X=0
不等式[0]=新的线性多变量函数(新的双精度[]{-1.0,0.00},0.0);//焦点:-x+0=0
不等式[1]=新的线性多变量函数(新的双精度[]{0.0,-1.00},0.0);//焦点:-y+0=8
不等式[2]=新的线性多变量函数(新的double[]{-2.0,-3.00},8.0);//焦点:-2x-3y+8=12

不等式[3]=新的线性多变量函数(新的双[]{-5.0,-2.00},12.0);//关注:-5x-2y+12我发现我的代码有问题。说实话,我从alberto trivellato那里得到了一些帮助。据我所知,他是开发JOptimizer的人。我真的很感谢他浪费时间来发现问题。正如他所说,问题不是有多种解决方案,而是我要求解决者的高精度。我最好不要要求比实际需要更高的精度。还要记住,不等式的形式总是G.x 更正代码:

import com.joptimizer.functions.ConvexMultivariateRealFunction;
import com.joptimizer.functions.LinearMultivariateRealFunction;
import com.joptimizer.optimizers.JOptimizer;
import com.joptimizer.optimizers.OptimizationRequest;

/**
 *
 * @author K.P.L.Kanchana
 */
public class test_4_alternateOptimum {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
//        BasicConfigurator.configure();

        // Objective function (plane)
        LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {-4.0, -3.0}, 0); // maximize 4x+3y

        //inequalities (polyhedral feasible set G.X<H )
        ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
        // 8x+6y < 25(no equal sign)
        inequalities[0] = new LinearMultivariateRealFunction(new double[]{8.0, 6.0}, -25); // 8x+6y-25<0
        // 3x+4y < 15
        inequalities[1] = new LinearMultivariateRealFunction(new double[]{1.0, 4.0}, -15); // 3x+4y-15<0
        // x > 0
        inequalities[2] = new LinearMultivariateRealFunction(new double[]{-1.0, 0.0}, 0);
        // y > 0
        inequalities[3] = new LinearMultivariateRealFunction(new double[]{0.0, -1.0}, 0);

        //optimization problem
        OptimizationRequest or = new OptimizationRequest();
        or.setF0(objectiveFunction);
        or.setFi(inequalities);
        //or.setInitialPoint(new double[] {0.0, 0.0});//initial feasible point, not mandatory
        or.setToleranceFeas(JOptimizer.DEFAULT_FEASIBILITY_TOLERANCE / 10); // Here was the issue
        or.setTolerance(JOptimizer.DEFAULT_TOLERANCE / 10);  // Here was the issue

        //optimization
        JOptimizer opt = new JOptimizer();
        opt.setOptimizationRequest(or);
        try {
            int returnCode = opt.optimize();
        }
        catch (Exception ex) {
            ex.printStackTrace();
            return;
        }

        // get the solution
        double[] sol = opt.getOptimizationResponse().getSolution();

        // display the solution
        System.out.println("Length: " + sol.length);
        for (int i = 0; i < sol.length; i++) {
                System.out.println("answer " + (i+1) + ": " + (sol[i]));
        }
    }

}
import com.jooptimizer.functions.convexmultivariateralfunction;
导入com.jooptimizer.functions.LinearMultivariateRealFunction;
导入com.jooptimizer.optimizer.jooptimizer;
导入com.jooptimizer.optimizers.OptimizationRequest;
/**
*
*@作者K.P.L.Kanchana
*/
公开课考试(4)交替计时{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
//BasicConfigurator.configure();
//目标函数(平面)
linearmultivariaterelfunction objectiveFunction=新的linearmultivariaterelfunction(新的double[]{-4.0,-3.0},0);//最大化4x+3y

//不平等(多面体可行集G.XSorry向你透露这个坏消息,但是这里没有人会下载你的整个项目libs,并为你调试它。我的项目不在这里。只有库需要优化库。大多数人不得不浪费时间逐个搜索它们。这就是为什么我在我的google driveIF it is JOp中聚集在一起timizer bug,你最好问一下支持和维护人员。我同意@OldProgrammer的观点:抱歉,这里没有调试。在任何情况下,除非你给出错误消息,否则都没有机会提供帮助。谢谢你的建议!记住,在第一个工作示例(上面)中,不等式的形式总是G.x='不平等都应该重构为'>'符号!
import com.joptimizer.functions.ConvexMultivariateRealFunction;
import com.joptimizer.functions.LinearMultivariateRealFunction;
import com.joptimizer.optimizers.JOptimizer;
import com.joptimizer.optimizers.OptimizationRequest;

/**
 *
 * @author K.P.L.Kanchana
 */
public class test_4_alternateOptimum {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
//        BasicConfigurator.configure();

        // Objective function (plane)
        LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {-4.0, -3.0}, 0); // maximize 4x+3y

        //inequalities (polyhedral feasible set G.X<H )
        ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
        // 8x+6y < 25(no equal sign)
        inequalities[0] = new LinearMultivariateRealFunction(new double[]{8.0, 6.0}, -25); // 8x+6y-25<0
        // 3x+4y < 15
        inequalities[1] = new LinearMultivariateRealFunction(new double[]{1.0, 4.0}, -15); // 3x+4y-15<0
        // x > 0
        inequalities[2] = new LinearMultivariateRealFunction(new double[]{-1.0, 0.0}, 0);
        // y > 0
        inequalities[3] = new LinearMultivariateRealFunction(new double[]{0.0, -1.0}, 0);

        //optimization problem
        OptimizationRequest or = new OptimizationRequest();
        or.setF0(objectiveFunction);
        or.setFi(inequalities);
        //or.setInitialPoint(new double[] {0.0, 0.0});//initial feasible point, not mandatory
        or.setToleranceFeas(JOptimizer.DEFAULT_FEASIBILITY_TOLERANCE / 10); // Here was the issue
        or.setTolerance(JOptimizer.DEFAULT_TOLERANCE / 10);  // Here was the issue

        //optimization
        JOptimizer opt = new JOptimizer();
        opt.setOptimizationRequest(or);
        try {
            int returnCode = opt.optimize();
        }
        catch (Exception ex) {
            ex.printStackTrace();
            return;
        }

        // get the solution
        double[] sol = opt.getOptimizationResponse().getSolution();

        // display the solution
        System.out.println("Length: " + sol.length);
        for (int i = 0; i < sol.length; i++) {
                System.out.println("answer " + (i+1) + ": " + (sol[i]));
        }
    }

}