Kotlin 限制解决方案中使用的变量数量-oj!Algo&;科特林

Kotlin 限制解决方案中使用的变量数量-oj!Algo&;科特林,kotlin,optimization,linear-programming,ojalgo,Kotlin,Optimization,Linear Programming,Ojalgo,我正在开发一款应用程序来优化用餐计划。我的应用程序有10顿饭(x1-x10),包括价格、碳水化合物值、蛋白质值和卡路里值。我想从这10种食物中选择3种。如何设置此限制 我的代码: val model=ExpressionsBasedModel() val x1:Variable=model.addVariable(“x1”).binary().weight(41) val x2:Variable=model.addVariable(“x2”).binary().weight(16) val x

我正在开发一款应用程序来优化用餐计划。我的应用程序有10顿饭(x1-x10),包括价格、碳水化合物值、蛋白质值和卡路里值。我想从这10种食物中选择3种。如何设置此限制

我的代码:

val model=ExpressionsBasedModel()
val x1:Variable=model.addVariable(“x1”).binary().weight(41)
val x2:Variable=model.addVariable(“x2”).binary().weight(16)
val x3:Variable=model.addVariable(“x3”).binary().weight(32)
val x4:Variable=model.addVariable(“x4”).binary().weight(23)
val x5:Variable=model.addVariable(“x5”).binary().weight(46)
val x6:Variable=model.addVariable(“x6”).binary().weight(1)
val x7:Variable=model.addVariable(“x7”).binary().weight(2)
val x8:Variable=model.addVariable(“x8”).binary().weight(23)
val x9:Variable=model.addVariable(“x9”).binary().weight(5)
val x10:Variable=model.addVariable(“x10”).binary().weight(7)
val蛋白质:表达式=模型。添加表达式(“蛋白质”)
.较低(60)
.上(90)
.组(x1,20)
.套(x2,25)
.套(x3,30)
.套(x4,15)
.套(x5,20)
.套(x6,15)
.组(x7,5)
.set(x8,11)
.套(x9,3)
.套(x10,25)
val卡路里:表达式=模型。加法表达式(“卡路里”)
.较低(1800)
.上(2200)
.套(x1700)
.套(x2600)
.套(x31000)
.套(x4500)
.套(x5800)
.套(x6300)
.套(x7,350)
.套(x8200)
.套(x9300)
.套(x10、330)
val carbs:Expression=model.addExpression(“carbs”)
.较低(300)
.套(x1100)
.套(x2,100)
.套(X3150)
.套(x4,60)
.套(x5150)
.套(x5800)
.套(x6,60)
.套(x7,70)
.set(x8,30)
.套(x9,70)
.套(x10,50)
val结果:优化。结果=模型。最大化()
println(结果)
}
数据类膳食(val名称:String,val kcal:Int,val蛋白质:Int,val碳水化合物:Int,val价格:Int,var端口限制:Int){
重写fun toString()=名称
}
    val meals: Expression = model.addExpression("meals")
            .level(3)
            .set(x1, 1)
            .set(x2, 1)
            .set(x3, 1)
            .set(x4, 1)
            .set(x5, 1)
            .set(x6, 1)
            .set(x7, 1)
            .set(x8, 1)
            .set(x9, 1)
            .set(x10, 1)