Wojciech Wiśniewski

Wojciech Wiśniewski Analityk Łańcucha
Dostaw, Kompania
Piwowarska S.A.

Temat: Solver - łączenie w pary

Cześć wszystkim,

mam następujący problem: dysponuję dwoma listami, pierwsza składa się z 300 elementów, druga z 500 (ilości dla przykładu). Oznaczmy sobie elementy pierwszej listy przez F001-F300, a elementy drugiej listy przez G001-G500. Każdy z elementów obu list ma pewne przypisane sobie dane (w arkuszu w osobnych arkuszach).

Dla każdych dwóch elementów "oceniam" ich połączenie (według funkcji nieliniowej). Np. połączenie F001+G001 da mi w wyniku 50, a połączenie F001+G002 da mi 30 - w tym przypadku lepsze jest dla mnie dopasowanie F001+G002.

Moim celem jest takie dobranie elementów zbioru G do WSZYSTKICH elementów zbioru F, aby:
- żaden element zbioru G nie został wybrany więcej niż raz,
- suma "ocen" ma być jak najniższa.

Zaprzągłem do pracy Solvera, ale nie potrafi znaleźć satysfakcjonującego mnie rozwiązania. Użyłem poniższej metody:
- Wypisałem wszystkie elementy zbioru F w kolumnie A;
- W kolumnie B ustawiłem dla Solvera komórki zmieniane z warunkami <=500, >=1, całkowite;
- W kolumnie C za pomocą funkcji PRZESUNIĘCIE znalazłem indeksy elementów zbioru G (na podstawie wartości z kolumny B, to po prostu numery wierszy);
- W kolumnie D wyliczam "ocenę" każdego z tych połączeń. W ocenie tej uwzględniam "karę" za zduplikowane wartości w kolumnie B (dodaję np. milion);
- W komórce np. E1 biorę sumę "ocen" i ładuję ją do Solvera jako cel, który ma zminimalizować.

Mimo istnienia rozwiązania dającego w wyniku 0, Solver nie potrafi w ten sposób go znaleźć. Problemem dla niego jest albo ograniczenie całkowitoliczbowe, albo wymóg różnowartościowości.

Szukałem w internecie podobnych tematów, ale wszystkie, które znalazłem opierały się na malutkich zbiorach danych i wykonalne w ich przypadku było stworzenie matrycy, w której dopasowania odbywały się przez wstawienie 1 na przecięciach. W moim przykładzie zbiór danych jest za duży, żeby Solver obsłużył go w ten sposób.

Będę wdzięczny za wszystkie pomysły podejścia do problemu.