是否可以将quadprog求解器的先前解决方案包含在后续解决方案值的约束中?

时间:2017-01-31 08:07:17

标签: mathematical-optimization quadratic quadprog

我对quadprog求解器有疑问。

我设置了一个优化问题,其中96个值要优化,4个约束正常工作。

现在我想做一些更复杂的优化。要优化的值应取决于它们的直接前身。

问题:有没有办法在约束向量bvec中引用直接的先前解(带有b_0值的向量)? 此外:是否可以在约束向量bvec中使用条件函数作为约束?

我希望我的问题很明确。如果没有,请告诉我,我会尝试更清楚地解释。

提前致谢!

蒂尔曼

1 个答案:

答案 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形式(其中一些可以是等式)。