我有简单的二进制线性编程函数,我想得到不止一个,例如来自 Optimisation.Result = model.minimise() 的 10 个最佳解决方案。这对 OjAlgo 可行吗?
我知道函数的目的是找到一个最佳解决方案,但是有没有机会生成更多解决方案或从求解器迭代中获得解决方案?
fun linearProgrammingSolver(meal: Meal): MutableList<String> {
val mealList = meal.results
val resultList = mutableListOf<String>()
val listOfVariables= makeVariables(meal) as ImmutableList<Variable>
val model = ExpressionsBasedModel()
listOfVariables.forEach{
model.addVariable(it)
}
val calories = model.addExpression("calories")
.lower(1500)
.upper(3000)
listOfVariables.forEach {
val index = listOfVariables.indexOf(it)
calories.set(listOfVariables[index], mealList[index].nutrition.nutrients[0].amount)
}
val protein = model.addExpression("protein")
.lower(60)
listOfVariables.forEach {
val index = listOfVariables.indexOf(it)
protein.set(listOfVariables[index], mealList[index].nutrition.nutrients[1].amount)
}
val meals = model.addExpression("meals")
.level(3)
listOfVariables.forEach {
val index = listOfVariables.indexOf(it)
meals.set(listOfVariables[index], 1)
}
val result: Optimisation.Result = model.minimise()
println("state ${result.state}")
model.variables.forEach{
if(it.value.toInt() == 1){
println("model.var ${it}")
resultList.add(it.name)
}
}
println(model)
println(result)
println("list $resultList")
return resultList
}