【问题标题】:How to get a minimum value that solve a system of inequalities?如何获得解决不等式系统的最小值?
【发布时间】:2016-11-16 15:02:47
【问题描述】:

我在here 中搜索过,但是当我尝试使用 JOptimizer 库在 Java 中实现 LP 时,它失去了所有意义,

我需要想办法解决这个简单的不等式:

x*k+y*k'>0

与:

1>=x>=0
1>=y>=0

其中 k 和 k' 是常数。

解决这个问题的最佳方法是什么?

谁能帮我解决我的问题?

【问题讨论】:

  • (1) 这是一个简单的 LP 问题,我看不出这里有什么困难。 (2) 你没有目标,所以你只是在寻找一个可行的解决方案。 (3) 受变量范围限制的所有解决方案都是可行的 (4) 究竟 是什么问题? (5) ' 在这里看起来有些错误。但我不知道 x 是一维变量还是向量或其他什么。也许你想要某种点积,但你的例子不够正式,无法表达。

标签: java linear-programming inequality joptimizer


【解决方案1】:

看来你对线性规划一无所知。请阅读它。这是您要求的答案。

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

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

    public static void main(String[] args){
//        BasicConfigurator.configure(); // uncomment and see the console log4j:WARN

           // setting value for k as k1 variable
           double k1 = 100.2;

           // setting value for k' as k2 variable
           double k2 = 30.4;

        // Objective function (plane)
        LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {-k1, -k2}, 0); // Maximize kX + K'X

        //inequalities (polyhedral feasible set G.X<H )
        ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
        // x > 0 ('<=' constraints not applicable in JOptimizer)
        inequalities[0] = new LinearMultivariateRealFunction(new double[] {-1, 0}, 0); // -x > o
        // y > 0 ('<=' constraints not applicable in JOptimizer)
        inequalities[1] = new LinearMultivariateRealFunction(new double[] {0, -1}, 0); // -y > o
        // x < 1 ('<=' constraints not applicable in JOptimizer)
        inequalities[2] = new LinearMultivariateRealFunction(new double[] {1, 0}, -1); // x-1 < o
        // y < 1 ('<=' constraints not applicable in JOptimizer)
        inequalities[3] = new LinearMultivariateRealFunction(new double[] {0, 1}, -1); // y-1 < o

        //optimization problem
        OptimizationRequest or = new OptimizationRequest();
        or.setF0(objectiveFunction);
        or.setFi(inequalities);

        or.setToleranceFeas(JOptimizer.DEFAULT_FEASIBILITY_TOLERANCE);
        or.setTolerance(JOptimizer.DEFAULT_TOLERANCE);

        //optimization
        PrimalDualMethod opt = new PrimalDualMethod();
        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("X = " + sol[0]);
        System.out.println("X = " + sol[1]);
    }

}

【讨论】:

  • @Gigibit 这是你的答案,你抄吗!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多