Aktualnie używam PuLP
, aby rozwiązać problem z maksymalizacją. Działa dobrze, ale chciałbym móc uzyskać najlepsze rozwiązania, zamiast tylko jednego. Czy istnieje sposób, aby to zrobić w PuLP
lub dowolnym innym wolnym/Python rozwiązanie? Wpadłem na pomysł, że losowo wybieram niektóre zmienne z optymalnego rozwiązania i wyrzucam je i ponownie uruchamiam, ale wydaje się, że to total hack.Wiele rozwiązań podczas wykonywania ILP
Odpowiedz
Więc wymyśliłem, jak (przez RTFM), aby uzyskać wiele wymiarów. W moim kodzie zasadniczo mam:
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
Działa to świetnie, ale zdałem sobie sprawę, że naprawdę muszę wybrać losową trasę. Mam 10 różnych zmiennych i przez wyrzucenie tylko kilku z nich, moje rozwiązania mają te same ważone vary we wszystkich permutacjach (czego można się spodziewać).
Jeśli twój problem jest szybki do rozwiązania, możesz spróbować ograniczyć cel z góry krok po kroku. Dla examle, jeśli celem wartość optymalnego rozwiązania jest X
, spróbuj ponownie uruchomić problem z dodatkowym ograniczeniem:
problem += objective <= X - eps, ""
gdzie etap redukcji eps
zależy od wiedzy o problemie.
Oczywiście, jeśli wybierzesz po prostu eps
na ślepo i otrzymasz rozwiązanie, nie wiesz, czy to rozwiązanie jest 2. najlepszym, dziesiątym najlepszym czy 1000-tym najlepszym ... Ale możesz przeprowadzić systematyczne wyszukiwanie (binarny, siatka) na parametrze eps
(jeśli problem jest naprawdę szybki do rozwiązania).
- 1. Wiele rozwiązań javascript window.onload
- 2. Zapobiegaj ukrywaniu się eksploratora rozwiązań podczas debugowania
- 3. Co oznacza "zbyt wiele opcji pozycyjnych" podczas wykonywania mongoeksportu?
- 4. Błąd podczas wykonywania gcloud
- 5. Błąd podczas wykonywania matplotlib.pyplot.subplots()
- 6. Błąd podczas wykonywania UPDATE
- 7. ValueError podczas wykonywania softmax_cross_entropy_with_logits
- 8. Duplikaty rozwiązań
- 9. Dziwny błąd podczas wykonywania httpclient
- 10. Błąd podczas wykonywania szyn s
- 11. Czytanie stderr podprocesu podczas wykonywania
- 12. Tworzenie podelementów w eksploratorze rozwiązań
- 13. Phpmyadmin blokuje podczas wykonywania dużego zapytania
- 14. Korzystanie z animacji CSS podczas wykonywania javascript
- 15. Kod zakończenia 139 podczas wykonywania odejmowania obrazów
- 16. zmiana okresu przechowywania kafka podczas wykonywania usługi
- 17. Drukowanie kodu źródłowego podczas wykonywania programu
- 18. Brak pamięci podczas wykonywania dużego zapytania?
- 19. Pomiń element podczas wykonywania mapy w Swift?
- 20. CERT_UNTRUSTED błąd podczas wykonywania https zażądać
- 21. Wyświetl pełne polecenie podczas wykonywania aliasu Git?
- 22. Nieznany błąd wydawcy podczas wykonywania exe
- 23. wpaść interpreter Pythona podczas wykonywania funkcji
- 24. Występują problemy z makrozmiennikami podczas wykonywania wywołania
- 25. MongoDB: Błąd podczas wykonywania przechowywane funkcji JavaScript
- 26. Odmowa uprawnień podczas wykonywania kursu Ubuntu Postfixa
- 27. Encja Framework Issue Podczas wykonywania procedur przechowywanych
- 28. PerformException: Błąd podczas wykonywania 'jednego kliknięcia'
- 29. ExecuteNonQuery() zwraca -1 podczas wykonywania procedury przechowywanej
- 30. ProgressDialog nie wyświetla się podczas wykonywania zadania
możesz zaakceptować własną odpowiedź – dassouki