1

我正在开发应用程序以优化膳食计划。我的应用程序有 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 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
}

4

1 回答 1

0
    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)
于 2020-11-14T06:12:38.270 回答