2024-10-04 09:19:20 发布
网友
我需要用Google或Python中的ToolsCP-SATsolver来解决这个简单的优化问题:
Goal = MAXIMIZE (X+Y+Z) Constraint: Z/(X+Y+Z) <= 0.25
我不知道如何正确地编写约束,因为它不是线性的。 你能帮我吗?你知道吗
您必须创建一个中间变量并使用模型.AddDivisionEquality. 当CP-SAT处理整数时,还必须放大一些变量。你知道吗
scaling = 1000 x = model.NewIntVar(0, 10, 'x') y = model.NewIntVar(0, 10, 'y') z = model.NewIntVar(0, 10, 'z') scaled_z = model.NewIntVar(0, 10 * scaling, 'z_scaled') denom = model.NewIntVar(1, 3 * 10, 'x+y+z') division = model.NewIntVar(0, 10 * scaling, 'z/(x+y+z)') model.Add(scaled_z == z * scaling) model.Add(denom == x + y + z) model.AddDivisionEquality(division, scaled_z, denom) model.Add(division <= int(0.25 * scaling)) model.Maximize(x + y + z) solver.Solve(model) print('x =', solver.Value(x)) print('y =', solver.Value(y)) print('z =', solver.Value(z)) print('z/(x+y+z) =', solver.Value(division) / scaling)
您必须创建一个中间变量并使用模型.AddDivisionEquality. 当CP-SAT处理整数时,还必须放大一些变量。你知道吗
相关问题 更多 >
编程相关推荐