OR-Tools: ограничение комбинаций по заданному диапазону - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю простое решающее приложение.Вы можете проверить код ниже.

Теперь я хочу ограничить комбинацию, созданную как решения, определенным числом.(например: 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 из них).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...