介绍
我正在尝试使用 ojalgo 库来生成一种解决方案,以控制放置在任意位置的推进器以生成整体请求的旋转和平移。有时请求的旋转和平移是不可能的,但我希望在这些情况下试一试。
问题
我已经创建了我设置的 ExpressionsBasedModel 的这个最小示例。
如果我请求一组可能的条件,我会得到一个很好的结果:
Variable thruster1 = new Variable("t1").lower(0).upper(1).weight(0.1);
Variable thruster2 = new Variable("t2").lower(0).upper(1).weight(0.1);
ExpressionsBasedModel model = new ExpressionsBasedModel();
model.addVariable(thruster1);
model.addVariable(thruster2);
double targetXThrust = 2;
model.addExpression("XMotion")
.weight(1)
.set(thruster1, 1)
.set(thruster2, 1).lower(targetXThrust).upper(targetXThrust);
Optimisation.Result minimised = model.minimise();
System.out.println(minimised); //outputs 1,1
但如果我要求一些不太可能的事情
double targetXThrust = 2.1;
model.addExpression("XMotion")
.weight(1)
.set(thruster1, 1)
.set(thruster2, 1).lower(targetXThrust).upper(targetXThrust);
System.out.println(minimised); //outputs 0.5,0.5
理想情况下,我想要一个好的次优解决方案(1,1),但它似乎放弃并返回 0.5,0.5
问题
对于不可能完全解决的问题,是否有可能获得良好的次优解决方案?
可能的问题是我想最小化表达式上的错误,但我认为它实际上最小化了值(同时试图满足约束)