В настоящее время я использую PuLP
для решения проблемы максимизации. Он отлично работает, но я бы хотел получить N-лучшие решения вместо одного. Есть ли способ сделать это в PuLP
или любом другом свободном/Python решении? Я играл с идеей просто случайного выбора некоторых переменных из оптимального решения и выбрасывания их и повторного запуска, но это похоже на общий взлом.Несколько решений при выполнении ILP
ответ
Так что я понял, как (по RTFM) получить несколько soutions. В моем коде я по существу есть:
number_unique = 1 # The number of variables that should be unique between runs
model += objective
model += constraint1
model += constraint2
model += constraint3
for i in range(1,5):
model.solve()
selected_vars = []
for p in vars:
if p_vars[p].value() != 0:
selected_vars.append(p)
print_results()
# Add a new constraint that the sum of all of the variables should
# not total up to what I'm looking for (effectively making unique solutions)
model += sum([p_vars[p] for p in selected_vars]) <= 10 - number_unique
Это прекрасно работает, но я понял, что мне действительно нужно идти случайный маршрут. У меня есть 10 разных переменных, и, только выкинув пару из них, мои решения, как правило, имеют одинаковые взвешенные веса во всех перестановках (что и следовало ожидать).
Если ваша проблема быстро решена, вы можете попытаться ограничить цель сверху. Для нелогич-, если цель значение оптимального решения X
, попытайтесь повторно запустить задачу с дополнительным ограничением:
problem += objective <= X - eps, ""
где стадия восстановления eps
зависит от знания проблемы.
Конечно, если вы просто слепаете в некотором смысле eps
и получите решение, вы не знаете, является ли решение вторым лучшим, 10-м лучшим или 1000-м лучшим ... Но вы можете провести систематический поиск (двоичный, сетка) по параметру eps
(если проблема очень быстро решена).
- 1. Несколько операций при выполнении DAO
- 2. Несколько решений с AMPL
- 3. Дерево решений - несколько экземпляров
- 4. Emacs известково несколько решений
- 5. Обнаружение режима ILP BLAS
- 6. Выберите несколько ветвей при выполнении сборки
- 7. несколько временных меток при выполнении одной программы
- 8. Глубина сначала Искать несколько решений
- 9. Методы параллелизма уровня инструкций (ILP)
- 10. Решения ILP с небольшим размером памяти
- 11. Предлагая нижнюю границу для решения ILP
- 12. Как решить эту головоломку матрицы ILP/CP
- 13. Vimdiff при выполнении слияния
- 14. Ошибка при выполнении сценария
- 15. Строитель многоцелевых решений
- 16. найти несколько решений для упаковки в контейнерах
- 17. Rails 3 несколько учетных решений аутентификации
- 18. Как связать несколько визуальных студийных решений вместе?
- 19. Heroku Push- Несколько решений не удалось
- 20. Отладка несколько решений в Visual Studio
- 21. Ссылка C# класс через несколько решений
- 22. Разверните несколько проектных решений для azure
- 23. EXC _ ??? при выполнении executeFetchRequest
- 24. Ошибка при выполнении RScript в Excel VBA
- 25. Экспресс формула DNF как ограничение ILP
- 26. Ошибка разделения баллов при выполнении викторины несколько раз
- 27. Удалить предыдущие данные при выполнении запроса AJAX несколько раз
- 28. Как выполнить перерыв в несколько секунд при выполнении программы
- 29. Альтернатива вложенности при выполнении левого присоединиться и несколько внутренних соединений
- 30. андроид ошибка при выполнении doInBackground() 'Произошла ошибка при выполнении doInBackground()'
Вы можете принять свой собственный ответ – dassouki