【问题标题】:Java Constraint ProgrammingJava 约束编程
【发布时间】:2019-11-20 09:54:34
【问题描述】:

如何在约束编程中表达二次目标函数?在Cplex中,我这样写:

IloLQNumExpr objfn = model.lqNumExpr()

但在CP中就不一样了。

【问题讨论】:

    标签: java constraint-programming


    【解决方案1】:

    使用 CP Optimizer 非常简单。

    例如:

    cp2.add(cp2.le(cp2.prod(Germany,Germany),4));
    

    IloCP cp2 = new IloCP();
                IloIntVar Belgium = cp2.intVar(0, 3);
                IloIntVar Denmark = cp2.intVar(0, 3);
                IloIntVar France = cp2.intVar(0, 3);
                IloIntVar Germany = cp2.intVar(0, 3);
                IloIntVar Luxembourg = cp2.intVar(0, 3);
                IloIntVar Netherlands = cp2.intVar(0, 3);
    
                cp2.add(cp2.neq(Belgium , France)); 
                cp2.add(cp2.neq(Belgium , Germany)); 
                cp2.add(cp2.neq(Belgium , Netherlands));
                cp2.add(cp2.neq(Belgium , Luxembourg));
                cp2.add(cp2.neq(Denmark , Germany)); 
                cp2.add(cp2.neq(France , Germany)); 
                cp2.add(cp2.neq(France , Luxembourg)); 
                cp2.add(cp2.neq(Germany , Luxembourg));
                cp2.add(cp2.neq(Germany , Netherlands)); 
    
                cp2.add(cp2.le(cp2.prod(Germany,Germany),4));
    
                if (cp2.solve())
                    {    
                       System.out.println();
                       System.out.println( "Belgium:     " + (int)cp2.getValue(Belgium));
                       System.out.println( "Denmark:     " + (int)cp2.getValue(Denmark));
                       System.out.println( "France:      " + (int)cp2.getValue(France));
                       System.out.println( "Germany:     " + (int)cp2.getValue(Germany));
                       System.out.println( "Luxembourg:  " + (int)cp2.getValue(Luxembourg));
                       System.out.println( "Netherlands: " + (int)cp2.getValue(Netherlands));
                    }
    

    如果我稍微改变一下非常简单的 color.java 示例

    【讨论】:

    • 感谢您的回答。我想为目标函数定义一个表达式。让我们称目标函数为W=x^2+2x,我想最大化W。如何声明W?
    • 嗨,cp2.add(cp2.eq(w,cp2.sum(cp2.prod(x,x),cp2.prod(2,x))));会这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多