使用 Google 的线性优化服务输出多个解决方案
Output more than one solution using Google's Linear Optimization Service
是否可以使用Google的线性优化服务输出多个解决方案?我在下面创建了一个玩具调度问题。它输出第一个解决方案,但我想输出多个问题的解决方案。这可能吗?
function schedule() {
var numDays = 5;
var numPeople = 6;
var engine = LinearOptimizationService.createEngine();
for (var d=0; d<numDays; d++) {
for (var p=0; p<numPeople; p++) {
engine.addVariable("Day"+d+"Person"+p, 0, 1, LinearOptimizationService.VariableType.INTEGER);
}
}
//only one person can work per day
for (var d=0; d<numDays; d++) {
var constraint = engine.addConstraint(1, 1);
for (var p=0; p<numPeople; p++) {
constraint.setCoefficient("Day"+d+"Person"+p, 1);
}
}
//each person can only work once per week at max
for (var p=0; p<numPeople; p++) {
var constraint = engine.addConstraint(0, 1);
for (var d=0; d<numDays; d++) {
constraint.setCoefficient("Day"+d+"Person"+p, 1);
}
}
var solution = engine.solve();
if (solution.isValid()) {
for (var d=0; d<numDays; d++) {
Logger.log("Day "+ d);
for (var p=0; p<numPeople; p++) {
Logger.log(solution.getVariableValue("Day"+d+"Person"+p));
}
}
}
}
无法通过一次调用获得问题的所有解决方案。
您可以在更改一些参数后调用 solve
方法,但不能保证结果会有所不同。仅当您的问题无法在 30 秒内得到最佳解决时才会出现这种情况 window.
如果您愿意,请按照 Public Issue Tracker 中的说明提交功能请求。
是否可以使用Google的线性优化服务输出多个解决方案?我在下面创建了一个玩具调度问题。它输出第一个解决方案,但我想输出多个问题的解决方案。这可能吗?
function schedule() {
var numDays = 5;
var numPeople = 6;
var engine = LinearOptimizationService.createEngine();
for (var d=0; d<numDays; d++) {
for (var p=0; p<numPeople; p++) {
engine.addVariable("Day"+d+"Person"+p, 0, 1, LinearOptimizationService.VariableType.INTEGER);
}
}
//only one person can work per day
for (var d=0; d<numDays; d++) {
var constraint = engine.addConstraint(1, 1);
for (var p=0; p<numPeople; p++) {
constraint.setCoefficient("Day"+d+"Person"+p, 1);
}
}
//each person can only work once per week at max
for (var p=0; p<numPeople; p++) {
var constraint = engine.addConstraint(0, 1);
for (var d=0; d<numDays; d++) {
constraint.setCoefficient("Day"+d+"Person"+p, 1);
}
}
var solution = engine.solve();
if (solution.isValid()) {
for (var d=0; d<numDays; d++) {
Logger.log("Day "+ d);
for (var p=0; p<numPeople; p++) {
Logger.log(solution.getVariableValue("Day"+d+"Person"+p));
}
}
}
}
无法通过一次调用获得问题的所有解决方案。
您可以在更改一些参数后调用 solve
方法,但不能保证结果会有所不同。仅当您的问题无法在 30 秒内得到最佳解决时才会出现这种情况 window.
如果您愿意,请按照 Public Issue Tracker 中的说明提交功能请求。