Matlab és GAMS: Interfészoptimalizálás és Vizualizációs Szoftver a GDXMRW Szoftver Segédprogram

Eredeti az https://support.gams.com/matlab_and_gams:interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities

Megjegyzés: a gdxmrw közüzemi fejlesztések a Steven P. Dirkse (GAMS Development) és Michael C. Ferris (Wisconsini Egyetem Madiscon)

Új Cím

Minden korábban dokumentált és rendelkezésre bocsátott GAMS/Matlab utilities (rgdx, wgdx, and gams) teljesen integrálva van a GAMS disztribúcióba, így nincs szükség külön letöltésekre. Javasoljuk, hogy használja a támogatott változata ezeket a segédprogramokat integrált és dokumentált a GAMS disztribúciók letölthető.

A korábbi verziók a dokumentációval együtt itt találhatók, de ne feledje, hogy ezek a régebbi verziók nem támogatottak, szintaxisban és funkcionalitásban különböznek a támogatott verzióktól.

GYIK

Van bármilyen video tutorials elérhető?
Igen, a Youtube csatorna “GAMS Lessons” megtalálható a következő játékok, GAMS es Matlab videók:
Beállítás és bevezetés a GDXMRW 
GDXMRW eszközök IRGDX és IWGDX
GDXMRW eszközök RGDX és WGDX

Mely platformokat támogatják jelenleg?
a gdxmrw a Windows 32 bites, A Windows 64 bites, a Linux 64 bites, valamint a Mac OS X 64 bites verziójához érhető el. Ne feledje, hogy nem tervezzük a MathWorks által nem támogatott platformok támogatását, lásd a Platform Road Map térképét MATLAB.

Kérjük, vegye figyelembe azt is, hogy a Matlab 32 bites változata a grams 32 bites változatát GAMS, a Matlab 64 bites változata pedig csak a GAMS 64 bites GAMS.

Hogyan építhetek fel egy interfészt a GAMS és a Matlab között?

Egy gyakori kérdés az, hogy “hogyan építhetek fel egy interfészt a GAMS és a Matlab között?”A válasz, hogy attól függ, hogy a helyzet, de az egyik általános iránymutatást kínálom, hogy megtörje a folyamatot kisebb lépésekre segítségével rgdx és wgdx mozgatni az adatokat körül, és csak a gams hívás futtatni a modellt, nem átadni adatokat a GAMS. Ez számos előnnyel jár:

  • Az interfész létrehozása, hibakeresése és karbantartása könnyebb lesz, ha a dolgok kisebb lépésekre törnek. Például ellenőrizheti, hogy a Matlab-ból GDX-be exportált adatok helyesen kerültek-e átvitelre a GDX-adatok (például a GAMS IDE) megtekintésére szolgáló segédprogramok használatával. Ha a bemeneti adatok számítása, futtathatja a GAMS modell kívül Matlab, mivel a GDX fájlokat olvas függetlenek a Matlab a modell nem tartalmaz Matlab-konkrét szintaxis.
  • Az adatátvitel rugalmasabb az rgdx/wgdx használata esetén, mint a gams használata esetén. Fontolja meg azt az esetet, amikor a modellnek el kell olvasnia a halmazokat fordításkor, de az adatokat a végrehajtás időpontjában. Ez lesz nehéz vagy lehetetlen-hoz csinál a gams, de egyszerű-hoz csinál a wgdx.
  • A hatékonyság megfontolás tárgya lehet. Ha egy hasonló futássorozatot nagy mennyiségű közös adattal kell végrehajtani, de néhány változó paraméterrel, a közös adatokat egyszer meg lehet írni a futtatássorozat megkezdése előtt, míg egy második GDX-fájl használható a futásspecifikus adatok továbbítására.

Ha segítségre van szüksége, jobb segítséget kap egy olyan alkalmazáshoz, amely az rgdx-et és a wgdx-et használja az adatok átviteléhez. A problémákat könnyebb lesz reprodukálni és lokalizálni, a modell pedig nem tartalmaz Matlab-specifikus szintaxist.

Egy példa alkalmazás két változatban érhető el a gdxmrw_tr1 és gdxmrw_tr2 datalibban. A .gms fájlok tartalmaz megjegyzéseket, valamint a GAMS source. A .m fájlokat kell futtatni a Matlab.

Az első tesztek nem működnek. Mit tegyek?

Bővített telepítési hibakeresési és támogatási utasítások találhatók itt.

Hiba “Matlab nem tudja elmenteni az elérési út változásait” Matlab Path út Windows 

Ezt a problémát és megoldását a Matlab help forum legújabb cikke tárgyalja. Van ez a probléma a Windows 7 desktop machine, Meg tudom oldani mentésével a pathdef.m fájl a Matlab indítási könyvtárába C:\Users\sdirkse\Documents\MATLAB. A javítással azonban van néhány probléma: a Matlab indításának módja (az asztali parancsikonok különböző indítási könyvtárakat adhatnak meg), így nem tart fenn külön pathdef-et.m fájl különböző Matlab verziók esetén. Mindezek ellenére, meg kell győződnie arról, hogy a Matlab rendszer kezdődik a GAMS rendszerkönyvtár a Matlab Path. A GDXMRW segédprogramok nem működnek, ha a GAMS rendszerkönyvtár nincs a Matlab Path útjában, és ezt manuálisan beállítani minden munkamenet elején idegesítő, könnyen elfelejthető.

Hogyan állíthatom be az indítási Matlab Path útját Linux vagy Mac esetén?

Egy olyan gépen futtatom a Matlab, ahol nincsenek root jogosultságaim, így frissítem a rendszerszintű pathdef-et.m nem lehetséges. A Matlab azonban az indításkor ellenőrzi a MATLABPATH környezeti változót, és azt a keresési útvonalához állítja, így ezt az Ön számára állítja be .bashrc vagy hasonló indítási fájl kell a kívánt hatást. Például, van valami ilyesmi:

oxon$grep MAT .bashrc
export MATLABPATH=/usr/local/gams/23.7.2:/home/steve/comp-pak/src/interfaces/Matlab
oxon$echo $MATLABPATH
/usr/local/gams/23.7.2:/home/steve/comp-pak/src/interfaces/Matlab

Hibaüzenet: Nem definiált függvény vagy módszer ‘gams’ a típusú beviteli ‘char’ argumentumokhoz

A hibaüzenet teljes szövege a következő:

last error message: Undefined function or method 'gams' for input arguments of type 'char'.
last error identifier: MATLAB:UndefinedFunction
See testinst log file testinstlog.txt for details
??? Error using ==> testinst at 127
Error in testinst: terminating prematurely

és a file testinstlog.txt valami ilyesmit olvas:

Date = 15-Jul-2011
Matlab version = 7.12.0.635 (R2011a)
Error in testinst: terminating prematurely
   last error message: Undefined function or method 'gams' for input arguments of type 'char'.
last error identifier: MATLAB:UndefinedFunction

A hibaüzenet azt jelzi, hogy nem állította be az elérési utat a GAMS a Matlab, vagy hogy egy olyan régi GAMS verziót futtat, amely nem tartalmazza a gams.m és a mex könyvtár aktái.

Hibaüzenet: Kísérlet futtatása SCRIPT gams parancsfájlként
A hibaüzenet teljes szövege a következő:

last error message: Attempt to execute SCRIPT gams as a function:
C:\Program Files (x86)\GAMS23.7\gams.m
last error identifier: MATLAB:scriptNotAFunction
See testinst log file testinstlog.txt for details
??? Error using ==> testinst at 127
Error in testinst: terminating prematurely

és a file testinstlog.txt valami ilyesmit olvas:

Date = 15-Jul-2011
Matlab version = 7.12.0.635 (R2011a)
Error in testinst: terminating prematurely
   last error message: Attempt to execute SCRIPT gams as a function:
C:\Program Files (x86)\GAMS23.7\gams.m
last error identifier: MATLAB:scriptNotAFunction

A probléma itt az, hogy a GAMS és a Matlab verzióját különböző architektúrákra építették, így a wrapper-script gams.m nem talált olyan gams Mex-fájlt, amely a futó Matlab architektúrájához készült. Legvalószínűbb, hogy megpróbálja futtatni a 32 bites változata GAMS egy 64 bites változata Matlab (vagy fordítva). A GAMS license ugyanúgy fog működni a 32 bites, 64 bites GAMS verziókkal, ezért telepítenie kell a Matlab rendszerével megegyező platformra/architektúrára épített GAMS rendszert. A Matlab architektúra ellenőrzéséhez használja a Matlab számítógépes funkcióját. A mexext funkció ad egy nyom, hogy milyen Mex-fájlokat kell a GAMS sysdir.

>> computer

ans =

PCWIN64

>> computer('arch')

ans =

win64

>> mexext

mexw64

Hibaüzenet: érvénytelen MEX-fájl ‘wgdx.mexw64’: a megadott modul nem található.

A Matlab nem tudja betölteni a bináris MEX-fájlokat, ha nem talál meg .dll mindent a MEX-fájlban hivatkozott dll-fájlok. Így a fenti üzenet némileg félrevezető: azt a benyomást kelti, hogy a megadott Mex-fájl érvénytelen vagy nem található, ahelyett, hogy rámutatna a hiányzó függőségekre. További információk erről a hibáról, beleértve a javasolt javításokat, a Matlab webhelyén találhatók itt.

Úgy találtuk, hogy a felhasználók szerzés ez a hibaüzenet néha hiányzik a Microsoft Visual C++ Redistribible runtime könyvtárak. Ezek a Windows Update segítségével telepíthetők. Ne feledje, hogy ezeknek a könyvtáraknak a sok változata áll rendelkezésre. A Microsoft Visual C++ Redistribible szükséges verziója attól függ, hogy az MSVC++ melyik verzióját használták a MEX-fájl létrehozásához. A legvalószínűbb, hogy a 2012-es vagy 2013-as verzióra van szükség, így biztonságosan telepíthető mindkettő.

Ha szükséges, bekukkanthat a MEX-fájlokba, hogy a string MSVCR többet tudjon meg. Az MSVCR110-től való függőség.dll elégedett a Microsoft Visual C++ 2012 Redistribible. Az MSVCR120-tól való függés.dll elégedett a Microsoft Visual C++ 2013 Redistribible. Ebben az időben (Jan 2017) nem használunk újabb fordítók, semmi régebbi nem lehet aktívan támogatni.

Hiba történt gams() függvény futtatásakor egy Matlab hurokban

Egyes felhasználók hibát jeleztek, amikor a gams() et egy Matlab hurkon belül hívták. A tünetek eltérőek – néhány felhasználó hibás értékeket jelent vissza a Matlab, míg mások azt jelentik, hogy a gams.exe lezuhant.

Három megoldás van a problémára.

  • A probléma megoldódott. Ha van egy GAMS Distribution 23.9.3 (Szeptember 2012) vagy később meg kell, hogy a frissített mex-fájlokat. Ha nem rendelkezik ilyen friss verzióval, a megoldás az, hogy frissítse a GAMS rendszert a distribution 23.9.3 vagy újabb verzió használatára. A mex-fájlok verziójának ellenőrzése:
>> wgdx('?')
GDXMRW::wgdx : rev32781 2012-04-26 18:00:27Z sdirkse

Ez a legkorábbi javítás. Ha 32781-nél alacsonyabb verziószámmal vagy 26 Aprilis 2012-nál korábbi utolsó forráskód-módosítási dátummal rendelkezik, frissítenie kell újabb GAMS disztribúcióra. Ne próbáljon újabb mex-fájlokat becsúsztatni egy régebbi Koss disztribúcióba: az alkatrészeket úgy tervezték meg, hogy a hozzájuk tartozó disztribúcióval dolgozzanak.

  • Egy másik megközelítés a rgdx() és a wgdx() használata a Matlab és a GAMS közötti adattovábbításra, valamint a Matlab system() a GAMS feladat elvégzésére vonatkozó felhívásának használatára. Ez a megoldás néhány más előnyökkel is rendelkezik, amint azt fentebb ismertettük. Például:
for i=1:365
  wgdx(input,...);
%  sometimes the mex-function gams fails when run in a loop
%  gams(model);
% but running gams in a subshell via the system() function is OK
  system (['gams model lo=2 --TRIP=', int2str(i)]);
  rgdx(results);
end
  • A legfájdalmasabb és legkevésbé ajánlott megközelítés, de az egyik, amely lehetővé teszi, hogy továbbra is használja a gams() mex-függvény, az hogy másolja a mex-függvény, majd használja a másolatot a Matlab kódot. A másolat készítésekor ne másolja vagy módosítsa a gams.m script ez csak a mex-függvény dokumentációját tartalmazza. A mex-függvény kiterjesztés platformonként változik – használja a Matlab rutin mexext, hogy a kiterjesztés.
>> mexext

mexw64

>> which gams
C:\gams_64\23.7.2\gams.mexw64
>> cd \gams_64\23.7.2\
>> system ('copy gams.mexw64 rgams.mexw64')
        1 file(s) copied. 

ans =

     0

>> which rgams
C:\gams_64\23.7.2\rgams.mexw64
>>

Miután elkészítette a másolatot, használhatja az új nevet szükség szerint, hogy elkerülje a problémákat futó gams() egy hurokban. Ha meglepődsz, hogy egy ilyen jelentéktelen változás elég a probléma megoldásához, nem vagy egyedül.

Van valami, hogy kivonja a paraméter mátrix (LP) feladó GAMS a Matlab?

Ennek két módja van. Az egyik módja, hogy használja a GAMS/Convert eszköz írni az LP adatok GDX formában: az opció fájl convert.opt néz ki

jacobian jac.gdx

ezután használhatja a GDXMRW segédprogramok olvasni a GDX adatok Matlab. Ez elég hatékony lesz a nagy adatokra, így teljes pontossággal kell megszereznie az adatokat.

Egy másik lehetőség a MPECDUMP solver és a matlab opció használata. Ez a Matlab ban írható szövegfájlokba helyezi az adatokat, valamint.m fájl hogy megcsináljam neked. Próbálja ki ezt az opció fájl mpecdump.opt

matlab xxx

és fuss

gamslib trnsport
gams trnsport lp mpecdump optfile 1

és megkapod xxx.m ami sok adatot olvas be a Matlab.

 

Vissza a főoldalra

Leave a Reply

Your email address will not be published. Required fields are marked *