Я создаю простое решающее приложение.Вы можете проверить код ниже.
Теперь я хочу ограничить комбинацию, созданную как решения, определенным числом.(например: 1000 макс.)Поскольку решатель использует значение шага 1 по умолчанию.ввод 2
для numberOfItems
приведет к 101. но если я сделаю numberOfItems
до 3
, общее количество решений будет выше 5000, а если numberOfItems
равно 4
, общее количество решений будет выше 10000.
Как построить решатель, который сможет изменить значение шага в соответствии с входными данными.Без компромиссов в распределении.
int totalCumilation = 100; //adding values of all item should equal to this. User might give 100 to 100000
int numberOfItems = 3; //User might give 2..25
Solver solver = new Solver("MY_CP");
IntVar[] weights = solver.makeIntVarArray(numberOfItems, 0, totalCumilation, "weights");
solver.addConstraint(solver.makeEquality(solver.makeSum(weights), totalCumilation));
DecisionBuilder decisionBuilder = solver.makeDefaultPhase(weights);
solver.solve(decisionBuilder);
while (solver.nextSolution()) {
for (int i = 0; i < weights.length; i++) {
System.out.println(weights[i]);
}
System.out.println("");
}
System.out.println("Finished");
У меня есть еще несколько ограничений, которые я отметил в коде.После распространения лучших решений (например, 1000 наименований).Я буду исследовать (масштабировать) некоторые другие решения (после применения этих ограничений 5000 сгенерированных элементов могут стать 3000, и мы будем показывать только 1000 из них).