۴

ایجاد یک فایل GDX در گمز و نوشتن داده روی آن توسط دستور put

ایجاد فایل GDX و نوشتن داده روی آن راه های متفاوتی دارد، یک از این راه ها استفاده از دستور put است. کد زیر را در نظر بگیرید:

Set j / j01*j03 /;
alias(i,j);

parameter a(i,j);
a(i,j) = uniform(10,30);
table b(i,j)
    j01 j02 j03
j01 4   0   2
j02 1   3   4
j03 9   0   9
;

File testgdx;
put_utility testgdx 'gdxout' / 'data' '.gdx';

execute_unload a,b;

در کد فوق ما ابتدا یک مجموعه و دو پارامتر a,b را تعریف کرده ایم،
سپس توسط دستور file یک فایل به نام testgdx تعریف نموده ایم. در مرحله ی بعد توسط دستور put_utility یک فایل gdx تعریف کرده ایم که نام آن data.gdx می باشد. در نهایت هم مقادیر a,b را در فایل gdx تولید شده قرار داده ایم.
دقت کنید که توسط دستور put_utility ما می توانیم فایل ها را تغییر نام داده، فایل های جدید تولید کنیم، فایل هایی که از قبل ذخیره شده اند را با تغییر نام دستکاری کنیم، و یا توسط آن فایلهایی مانند gdx را تولید کنیم. در اینجا توسط دستور gdxout به گمز فهمانده ایم که یک فایل gdx تولید کند و با عبارت بعد از اسلش (/) یک فایل با نام data که فرمت آن gdx هست را ذخیره کرده ایم.
دقت بفرمایید که تا این مرحله از کار یک فایل data.gdx که خالی است تولید کرده ایم. در ادامه توسط execute_unload دو پارامتر a,b را روی آن نوشته ایم.
در نهایت خروجی به شکل زیر خواهد بود.
gdx
حال می توان تصور کرد که توسط put_utility و ترکیب آن با دستور Loop یا هر حلقه ی دیگری، فایل های متفاوت با فرمت ها و کاربردهای متفاوت را تولید کرد. در صورتی که در استفاده از این دستور حرفه ای شوید، می توانید با سرعت بیشتری فایلهای مورد نیاز خود را تولید و جهت گزارش دهی بازنویسی کنید.

به عنوان یک کاربرد دیگر از این دستور می توان به قابلیت فراخوانی داده ها از gdx اشاره کرد. در کد زیر ما داده های a,b که قبلا ذخیره کرده ایم را توسط دستور put_utility فراخوانی کرده ایم. این فراخوانی بسیار سریع بوده و می تواند برای علاقمندان مفید باشد.

put_utility 'gdxin' / 'data' '.gdx' ;
execute_load a,b;
display a,b;

 

4 دیدگاه در “ایجاد یک فایل GDX در گمز و نوشتن داده روی آن توسط دستور put

  1. سلام وقت بخیر
    من وقتی مدلو با اپسیلون کانسترینت حل میکنم و میخوام مقادیر متغیرها از گمز به اکسل انتقال بدهم از
    کد زیر استفاده میکنم و با مشکل مواجه میشم.در حین حل مساله وقتی شیت های مختلف اکسل را بررسی میکردم نتایج کاملا درست بود ولی زمانیکه تکرار آخر انجام میشد نتایج شیت دوم تا آخر یکسان میشد. اینم کدم بود که gهمون gridpoint ماست.

    loop(g
    
    execute_unload 'results.gdx' xa.l 
    put_utility 'exec' / 'gdxxrw.exe results.gdx   var=xa.l rng=sheet'g.tl:0'!a1'
    solve mod_epsmethod maximizing a_objval using mip;
    );
    

    ممنون میشم اگر راهنمایی کنید.

    • سلام
      اینکه شما چجوری کد رو نوشتین خودش مورد بحث هست. وقتی دیگه تغییر نکنن، معمولا علتش اینه که مدل شما در اون مسئله ی نمونه نشدنی هست. پس همون جوابای قبلی برای شما احتمالا کافی هست.

  2. سلام
    مساله شدنی است. نتایجی که در Display گمز نمایش داده میشود با نتایجی که در اکسل نشان داده میشود، یکسان نیست.
    امکانش هست کد بهتری که نتایج روش اپسیلون کانستریت را به اکسل منتقل میکند در اختیار بنده قرار بدید؟
    تشکر

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *