Reputation: 21
im working on app to optimize meal planning. My app has 10 meals (x1-x10) with price, carb value, protein value and calories value. I want to choose always 3 meals from these 10. How to set this limit?
My code:
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 protein: Expression = model.addExpression("protein")
.lower(60)
.upper(90)
.set(x1, 20)
.set(x2, 25)
.set(x3, 30)
.set(x4, 15)
.set(x5, 20)
.set(x6, 15)
.set(x7, 5)
.set(x8, 11)
.set(x9, 3)
.set(x10, 25)
val calories: Expression = model.addExpression("calories")
.lower(1800)
.upper(2200)
.set(x1, 700)
.set(x2, 600)
.set(x3, 1000)
.set(x4, 500)
.set(x5, 800)
.set(x6, 300)
.set(x7, 350)
.set(x8, 200)
.set(x9, 300)
.set(x10, 330)
val carbs: Expression = model.addExpression("carbs")
.lower(300)
.set(x1, 100)
.set(x2, 100)
.set(x3, 150)
.set(x4, 60)
.set(x5, 150)
.set(x5, 800)
.set(x6, 60)
.set(x7, 70)
.set(x8, 30)
.set(x9, 70)
.set(x10, 50)
val result: Optimisation.Result = model.maximise()
println(result)
}
data class Meal(val name: String, val kcal: Int, val protein: Int, val carbs: Int, val price: Int, var portionLimit: Int){
override fun toString() = name
}
Upvotes: 1
Views: 96
Reputation: 1320
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)
Upvotes: 0