Oblicz względną lukę optymalności w MIP Problem GAMS

Aug 16 2020

Chcę obliczyć względną lukę optymalności w przypadku problemu MIP, a także chcę przerwać przebiegi w określonym czasie wykonywania. Ta metoda:

F(1)    
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval)) 

nie jest zgodne z luką obliczaną w dzienniku przez GAMS. GAMS używa „Best Integer”, aby znaleźć lukę, a nie bieżącą wartość celu. który jest prawidłowy? i jak mogę zapisać bieżące „Best Integer” do parametru (np. .objval).

i wreszcie obliczenie względnej optymalności. Luka w algorytmie gięcia jest w ten sposób?

rgap = (upperBound - lowerBound)/(1 + abs(upperBound));

Jakie obliczenia GAMS obliczają za pomocą „rozwiązania MIP”

MIP Solution:   3334501534.000555    (1625 iterations, 0 nodes)
Final Solve:      56330158.829040    (2561 iterations)

Best possible:    48915652.476336
Absolute gap:   3285585881.524219
Relative gap:            0.985330

F (1) obliczona luka przy użyciu mymodel.objval (mymodel.objval zwraca „Final Solve”), więc obliczona luka to% 13, a wartość mymodel.objval to 5,633016E + 7 (luka obliczona przez GAMS to% 98). więc muszę zapisać „Rozwiązanie MIP” do parametru, aby wyeksportować go do pliku programu Excel.

Odpowiedzi

1 Lutz Aug 17 2020 at 14:16

Istnieją różne formuły obliczania względnej luki optymalności. To zależy od używanego solwera, który jest stosowany. Trochę informacji na ten temat można znaleźć w opisie opcji optCR GAMS . Podręcznik solwera używanego solwera może zawierać więcej szczegółów na temat faktycznie zastosowanej formuły.

EDYTUJ po zaktualizowaniu pytania:

Jak napisałeś mymodel.objvalzwraca Final Solvewartość. Jeśli MIP Solutionzamiast tego chcesz zobaczyć wartość (tak jak robi to łącze Cplex), możesz dezaktywować ostateczne rozwiązanie. Jednak jeśli Final Solvei MIP Solutionsą tak bardzo różne, jak w twoim przykładzie, często jest to wskazanie do jakiegoś problemu (zwykle są (prawie) identyczne). Często wskazuje to na słabo wyskalowany model. Być może można poprawić sytuację poprzez dokręcenie tolerancji CPLEX (patrz Opcje CPLEX epopt, eprhs, epint) i aktywowanie agresywne skalowanie (opcja CPLEX scaind 2). Aktywacja mipkappastats(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats) i quality(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality) może dostarczyć więcej informacji. DataCheck=2(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck) może powodować problemy.