Вывести более одного решения с помощью службы линейной оптимизации Google - PullRequest
1 голос
/ 03 ноября 2019

Можно ли вывести более одного решения с помощью службы линейной оптимизации 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));
    }
  }
}

}

1 Ответ

0 голосов
/ 04 ноября 2019

Невозможно получить все решения проблемы за один вызов.

Вы можете просто вызвать метод solve после изменения некоторых параметров, но нет гарантии, что результаты будут другими,Это будет иметь место только в том случае, если ваша проблема не может быть оптимально решена в течение 30-секундного окна.

Если вы хотите, подайте запрос на добавление функции, следуя инструкциям в Public Issue Tracker .

...