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.