我对quadprog求解器有疑问。
我设置了一个优化问题,其中96个值要优化,4个约束正常工作。
现在我想做一些更复杂的优化。要优化的值应取决于它们的直接前身。
问题:有没有办法在约束向量bvec中引用直接的先前解(带有b_0值的向量)? 此外:是否可以在约束向量bvec中使用条件函数作为约束?
我希望我的问题很明确。如果没有,请告诉我,我会尝试更清楚地解释。
提前致谢!
蒂尔曼
答案 0 :(得分:1)
有没有办法在约束向量bvec(带有b_0值的向量)中引用直接的先前解?
我相信你的意思是:
package main;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import javax.swing.plaf.synth.SynthScrollBarUI;
public class Ropecalculation {
static int numberofvisibleclothes;
static int ropelenth;
static int numberofclother;
static int clothwidth;
static int startposition;
static int[] startpoint;
static int[] width;
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.println("Enter the rope length");
ropelenth=scan.nextInt();
System.out.println("Enter the number of clothes");
numberofclother=scan.nextInt();
for(int i=0;i<numberofclother;i++){
startpoint=new int[numberofclother];
width=new int[numberofclother];
System.out.println("Enter start position");
startposition=scan.nextInt();
startpoint[i]=startposition;
System.out.println("Enter width");
clothwidth=scan.nextInt();
width[i]=clothwidth;
//System.out.println(startpoint.length);
}
Ropecalculation rp=new Ropecalculation();
rp.checkvisibleclothes(startpoint,width);
}
public void checkvisibleclothes(int[] startpoint, int[] width) {
for(int j=0;j<startpoint.length-1;j++){
int x=startpoint[j];
int c=startpoint[j+1];
if(x==c){
int wide=width[j];
int wideagain=width[j+1];
if(wide<=wideagain){
numberofvisibleclothes=numberofclother-1;
}
}
else if(c==x+1){
int wide1=width[j];
int wideagain1=width[j+1];
if(wide1>wideagain1){
numberofvisibleclothes=numberofclother-1;
}
}
}
System.out.println(numberofvisibleclothes);
}
}
当然没问题。
是否可以在约束向量bvec中使用条件函数作为约束?
不是真的:向量1. solve min 0.5d'Qd-d'b subject to A'b>=b0
2. form new b0 using optimal solution values d
3. solve min 0.5d'Qd-d'b subject to A'b>=b0
(或bvec
)是常量。另请注意,所有约束在quadprog中必须是线性的,因此根本不允许任何函数。约束必须具有b0
形式(其中一些可以是等式)。