User Tools

Site Tools


matlab_and_gams:interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
matlab_and_gams:interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities [2021/06/30 21:05]
Atharv Bhosekar [Error message: Attempt to execute SCRIPT gams as a function]
matlab_and_gams:interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities [2021/06/30 21:06] (current)
Atharv Bhosekar [Is there anything to extract the parameter matrix (LP) from GAMS to Matlab?]
Line 65: Line 65:
 If you must, you can peek into the MEX-files for the string MSVCR to learn more.  A dependency on MSVCR110.dll is satisfied by the Microsoft Visual C++ 2012 Redistributable. ​ A dependency on MSVCR120.dll is satisfied by the Microsoft Visual C++ 2013 Redistributable. ​ At this time (Jan 2017) we don't use newer compilers, and nothing older can be actively supported. If you must, you can peek into the MEX-files for the string MSVCR to learn more.  A dependency on MSVCR110.dll is satisfied by the Microsoft Visual C++ 2012 Redistributable. ​ A dependency on MSVCR120.dll is satisfied by the Microsoft Visual C++ 2013 Redistributable. ​ At this time (Jan 2017) we don't use newer compilers, and nothing older can be actively supported.
  
-==== Error running gams() function in a Matlab loop ==== 
- 
-Some users have reported errors when calling gams() from within a Matlab loop.  The symptoms vary - some users report incorrect values being returned to Matlab, while others report that gams.exe has crashed. 
- 
-There are three workarounds or solutions to the problem. 
- 
-  * **This problem has been fixed.** ​ If you have a GAMS Distribution 23.9.3 (Sep 2012) or later it should have the updated mex-files. ​ If you don't have a version as recent as this, the solution is to update your GAMS system to use distribution 23.9.3 or later. ​ To check the version info of your mex-files: 
-<​code>​ 
->> wgdx('?'​) 
-GDXMRW::​wgdx : rev32781 2012-04-26 18:00:27Z sdirkse 
-</​code>​ 
-This is the earliest revision with the fix.  If you have a lower revision number than 32781 or a last-source-change date earlier than 26 April 2012, you should update to a newer GAMS distribution. ​ Don't try to just slide some newer mex-files into an older GAMS distribution:​ components are designed and tested to work with the distribution they belong to. 
- 
-  * Another approach is to use rgdx() and wgdx() to transfer data between Matlab and GAMS and to use Matlab'​s system() call to execute the GAMS job.  This solution has some other benefits as well, as described [[matlab_and_gams:​interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities#​how_can_i_construct_an_interface_between_gams_and_matlab|above]]. ​ For example: 
-<​code>​ 
-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 
-</​code>​ 
-  * The most painful and least recommended approach, but one that allows you to keep using the gams() mex-function,​ is to copy the mex-function and use the copy in your Matlab code.  When making the copy, do not copy or modify the gams.m script - this only contains documentation for the mex-function. ​ The mex-function extension varies by platform - use the Matlab routine ''​mexext''​ to get the extension. 
-<​code>​ 
->> 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 
->> ​ 
-</​code>​ 
- 
-Once you have made the copy, you can use the new name as necessary to avoid problems with running gams() in a loop.  If you are surprised that such a trivial change is enough to work around the problem, you are not alone. 
-====  Is there anything to extract the parameter matrix (LP) from GAMS to Matlab? ==== 
- 
-There are two ways to do that.  One way is to use the GAMS/​Convert tool to write out the LP data in GDX form: The option file ''​convert.opt''​ looks like 
-<​code>​jacobian jac.gdx </​code>​ 
- 
-and then you can use the GDXMRW utilities ​ to read the GDX data in Matlab. ​ This will be quite efficient for large data and you should get the data with full double precision. 
- 
-Another option is to use the MPECDUMP solver and the ''​matlab''​ option. ​ This dumps the data to text files that can be written in Matlab, and also writes a .m file to do it for you.  Try this by creating the option file ''​mpecdump.opt''​ with 
-<​code>​matlab xxx</​code>​ 
- 
-and run 
-<​code>​ 
-gamslib trnsport 
-gams trnsport lp mpecdump optfile 1 
-</​code>​ 
- 
-and you'll get ''​xxx.m''​ that reads lots of data into Matlab. 
  
  
IMPRESSUM / LEGAL NOTICEPRIVACY POLICY matlab_and_gams/interfacing_optimization_and_visualization_software_via_the_gdxmrw_utilities.1625079916.txt.gz ยท Last modified: 2021/06/30 21:05 by Atharv Bhosekar