ايجاد فايل 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 را روي آن نوشته ايم.
در نهايت خروجي به شکل زير خواهد بود.
حال مي توان تصور کرد که توسط put_utility و ترکيب آن با دستور Loop يا هر حلقه ي ديگري، فايل هاي متفاوت با فرمت ها و کاربردهاي متفاوت را توليد کرد. در صورتي که در استفاده از اين دستور حرفه اي شويد، مي توانيد با سرعت بيشتري فايلهاي مورد نياز خود را توليد و جهت گزارش دهي بازنويسي کنيد.
به عنوان يک کاربرد ديگر از اين دستور مي توان به قابليت فراخواني داده ها از gdx اشاره کرد. در کد زير ما داده هاي a,b که قبلا ذخيره کرده ايم را توسط دستور put_utility فراخواني کرده ايم. اين فراخواني بسيار سريع بوده و مي تواند براي علاقمندان مفيد باشد.
put_utility 'gdxin' / 'data' '.gdx' ; execute_load a,b; display a,b;
سلام وقت بخیر
من یک سوال در مورد تبدیل ورودی های اکسل به gdx دارم از خدمتتون. من کد رو به شکل زیر نوشتم.
اما متاسفانه فایل gdx فقط آخرین پارامتر را لود میکنه. مثلا اینجا فقط si رو میخونه. ممکنه راهنماییم کنید که چطور میتونم این مشکل رو حل کنم؟
خیلی ممنونم
سلام وقت بخیر
این رو تست کنین
با سلام
بسیار ممنون بابت وقتی که برای پاسخگویی به سوالات می گذارید.
برای تعیین مسیر ذخیره فایل جی.دی.ایکس خروجی باید چکار کرد؟ من میخوام فایل خروجی در همون پوشه ای ذخیره بشه که فایل گمزم وجود داره
ساده ترين حالت استفاده از نسخه اخر گمز هست. همه چيز اتوماتيك با يك دكمه f10 انجام ميشه. لايسنس هم داخلش خودكار هست. البته محدود هست. اما خب ميدونيم، نئوس براي حل مقياس بالا وجود دارد.
راه بهتر و ساده تري از اين نميشه واقعا. دردسر نسخه هاي قديمي را از سرتون باز كنيد.
سلام وقت بخیر
من یک مدلی دارم که بعد از حل ، جواب چهار دسته متغیر باید مشخص بشه. مدل چند هدفه است و با استفاده از روش اپسیلون حلش کردم. جواب های پارتو به دست اومده .
میخواستم بدونم راهی وجود داره که توی کد گمز ، توی هر تکرار روش اپسیلون، مقدار متغیرهای تعریف شده رو توی شیت های مختلف یک فایل اکسل بنویسیم؟؟ ( نیاز دارم که برای هر متغیر مسئله یک فایل اکسل با شیت های مختلف داشته باشم ). ممنون میشم راهنمایی بفرمایید
به احتمال زياد بشه اينكار را كرد.
بايد در قسمت لوپ حل و بعد از اينكه جوابها در ماتريس پي-اف نهايي شدند، در هر تكرار البته، قسمت نوشتن در فايل اكسل را اضافه كنيد و بعد عدد شيت را به صورت ديناميك داخل كد تعريف كنيد. مثلا به كمك به حلقه for كه تعداد شيت ها را جدا كنه و در هر شيت ديتاي جديد با عناوين تكراري را قرار بده.
امتحان كنيد.
سلام وقتتون بخیر
فایل gdx رو میشه با اکسل باز کرد یا باید حتما خروجیهامون رو دونه دونه از gdx در اکسل کپی کنیم؟
و سوال دیگه اینکه gdx را غیر از گمز در کجا می توان باز کرد؟ من با لپ تاپ دیگری ران های مختلف گرفتم و gdx ها را ذخیره و به لپ تاپ خودم منتقل کردم اما الان gdx ها در گمز باز نمی شوند.
سلام روز بخیر
فکر نکنم اکسل بتونه باز کنه. ادیتور دیگه ای هم سراغ ندارم که gdx رو بتونه باز کنه.
اگر شناخت کافی از فایل gdxی که تولید کردین دارین، می تونین یه کد گمز بنویسین و ازش بخواین فایل gdx به فلان مشخصات رو بفرسته تو اکسل.
سلام و عرض ادب جناب محمودی گرامی.متشکرم از پاسخ گویی سریع و کاملی که داشتین…توصیه های شما رو انجام میدم .
خدا قوت
سلام و وقت بخیر
من مدلم رو در کد آماده اپسیلون محدودیت گمز وارد کردم.دو تا مشکل دارم:
– همه جوابهایی که میده بهینه نیست و بعضی ها توسط دیگری مغلوب میشن.راهی هست که اینطور نشه؟
– اگر بخوام علاوه بر توابع هدف (solutions)، متغیرهای متناظر هر سطر solution رو هم داشته باشم و در متلب ذخیره کنم، باید چی کار کنم؟
ممنون میشم راهنماییم کنید
سلام و ادب
منظورتون از اینکه بهینه نیست و مغلوب میشن چی هست.
از اینترفیس بین گمز و متلب استفاده کنین
داده ها رو در متلب با تابع wgdx تبدیل به فایل gdx می کنم و در گمز اونا رو فراخوانی می کنم. در آخر هم خروجی کد اپسیلون محدودیت گمز که همون solutions هست رو تبدیل به فایل gdx کرده و به کمک تابع rgdx به متلب ميارم تا كارمو ادامه بدم.
اما مي خوام مقدار توابع هدف و متغیرها در هر تکرار رو در قالب structure متلب ذخیره کنم که نمی تونم. در واقع بلد نیستم به گمز بگم برو مقادیر رو بده به متلب و دوباره برگرد و ادامه بده…
با سلام و خسته نباشید
ممنون از سایت خوبتون و اینکه با حوصله پاسخ میدین
من یک مدل بلوکی دارم که تعداد دیتاها ممکنه تا صد هزار هم برسه و به همین نسبت اندیس های من هم میره بالا
آیا راهی هست که گمز بدون اینکه من رنج اندیس ها و رنج داده ها رو معرفی کنم خودش از روی اکسل بخونه و واسه اندیس ها مقادیر بده؟
سلام
گمز میتونه از اکسل داده بخونه. فقط اینو بدونین که اگه اندیس ها خیلی بزرگ بشن، ممکنه گمز نتونه حل کنه مسئله رو.
من یک مدل دارم حل میکنم که 100 هزار تا بلوک داره و میخوام مختصات xyz بلوک ها رو به عنوان اندیس بهش بفهمونم این رو میشه بگیم گمز بخونه؟ مثلا با onecho offecho یا خیر؟ اگر میشه راهنمایی بفرمایید
و اینکه آیا اندیس میتونه مقدار اعشاری بگیره؟ مثلا از 1.01 تا 99.99؟؟
سلام
اینکه این تعداد رو گمز میگیره یا نه نمیدونم. میتونین تو محدودیت های کارکردی گمز جستجو کنید. ولی مشکلی نیست بابت فراخوانی. میشه. یه جدول در اکسل ایجاد کنید، و با استفاده از تکنولوژی gdx فراخونی کنین.
برای اعشار هم بله میشه.
خوب میشه لطف کنین کد 1.01تا 99.99 رو بنویسید؟ من میزنم ارور میده یا فقط 1.01تا 1.99 رو نمایش میده
منم تست کردم. نشد. چیز خاصی به نظرم نمیرسه. به نظر فعلا از اکسل فراخونی کنین.
ضمناً شما اگر i.val رو میخواید استفاده کنید، میتونید 101*9999 رو تولید کند و هر جا مقدارش رو لازم داشتید تقسیم بر صد کنید.
میخوام از اکسل فراخوانی کنم ولی باز میگه رنج ijk رو وارد کن
شایدم من نمیتونم با gdx فراخوانی کنم اگر لطف کنین دستور فراخوانی رو بدون اینکه مقادیر set ها رو وارد کنیم بفرستین ممنون میشم
این مثال رو ببینید
دقت بکنید که شما باید فایل اکسل رو در دایرکتوری فعال گمز بذارید.
ادرس دهی ها رو دقت کنید و مقداری در مورد rdim و cdim بخونید.
سلام وقت بخیر، من یک سوالی داشتم
کدی هست که بشه توی گمز نوشت که فقط یک بار فراخوانی کنه داده ها رو، دیگه توی ران کردن های بعدی دیگه هی داده ها رو از اکسل فراخوانی نکنه؟ چون من داده های اکسلم ثابت هست و دیگه قرار نیست عدد هاش تغییر کنه میخوام توی خود حافظه گمز بمونه و توی ران ها دیگه اول هی داده فراخوانی نکنه
سلام
خب همیشه همینه، اول کد دستور میدن که داده ها رو بخونه از اکسل. یه بار مسئله و داده ها compile میشه و دیگه کاری به خوندن داده ها نداره گمز. تو حافظه ذخیره میشن و فقط استفاده میشن.
برای ران های مختلف داستان مقداری متفاوت هست. اگر کدهای مختلفی هستن، نمیشه کاریش کرد (میشه با save and restart اگه حوصله ش رو داشته باشید یاد بگیرد)
اگر یک لوپ بنویسید تغییرات داخل لوپ لحاظ بشه و به ازای شمارنده لوپ مسئله حل بشه، هم میشه یه بار قبل لوپ داده ها خونده میشن و داخل لوپ استفاده میشن.
سلام، وقت شما بخیر.
ببخشید برای جدولی که در اکسل تعریف شده است بصورت زیر:
سطر اول اندیس(i)
سطر دوم پارامتر(bi)
سطر سوم پارامتر(ci)
سطر چهارم پارامتر (vi)
برای تعریف این جدول در گمز بصورت زیر:
سطر اول(set)
سطر دوم، سوم وچهارم(parameters)
به چه صورت باید عمل کنم، ممنون میشوم راهنمایی کنید.
دوسطر اول را بصورت زیر تعریف کرم ولی برای سطر سوم به بعد با اینکه رنج را تغییر دادم ولی بازهم در هنگام چاپ مقادیر سطر دوم چاپ میشوند:
set
i ;
call gdxxrw new.xlsx set=i rng=sheet1!A1:M2 cDim=1 values=yn$
gdxIn new.gdx$
load i$
gdxIn$
parameters
s(i) ;
$call GDXXRW new.xlsx par=s rng=sheet1!a1:m2 rdim=0 cdim=1
GDXIN new.gdx$
load s$
GDXIN$
f(i);
$call GDXXRW new.xlsx par=f rng=sheet1!(a1:m1,a3:m3) rdim=0 cdim=1
GDXIN new.gdx$
load f$
GDXIN$
display i,s,f;
سلام
آدرس دهی شما مقداری مشکوکه.
چجوریه که شما یه اندیس I دارین فراخونی می کنین ولی از A1 تا M2 بهش آدرس میدین؟ همین آدرس هم برای پارامتر s دارین میدین. ادرس دهی اوکی نیست.
سلام آقای دکتر.
درست است که ادرس دهی در ظاهر اوکی نیست ولی وقتی که اجرا میگیرم برنامه بدون خطا اجرا میشود وi وs(i) را درست نمایش میدهد،برای همین به سراغf(i)رفتم ولی برایf(i) این اتفاق نیفتاد…
متوجه هستم. مسئله اینه که برای خوندن اندیس دقیق آدر دهی کردین. برای پارامتر اول هم همینطور (چرا؟ چون داده های اون پارامتر کنار هم قرار گرفتن. کدوما؟ هم اندیسش هم مقادیر پارامتر. ولی پارامتر دوم شما اندیس هاش دو سطر فاصله داره با مقادیرش. برای همین داره بهتون خطا میده.
سلام
کد گمزی نوشتم توی لپ تاپ خودم که lenovo ip 320 هست ران میکنم توی خوندن دستور $GDXIN ارور میده
ولی همین کد را توی لپ تاپ فوجیتسو ران میکنم بدون مشکل اجرا میشه
حتی ویندوز جدید نصب کردم و بعد از نصب گمز دوباره ران کردم ولی مشکل رفع نشد
اینه ارورش
unable to open GDX file for $GDXin
سلام
اگه تو اون یکی سیستم ران میشه، مشکل احتمالا دایرکتوری فعال گمز هست. دایرکتوری رو اصلاح کنید.
سلام و عرض ادب..میشه لطفا راهنماییم کنید.من یک نرم افزار تو متلب تهیه کردم.اطلاعاتی که کاربر تو این فرم ها پر میکنه،وارد دیتابیس میشه،چطور میتونم اطلاعات ددیتابیس رو که شامل چندین جدول هست رو به عنوان دیتاهای ورودی وارد گمز کنم تا مدلم رو گمز حل کنه؟
سپاسگزارم از وقتی که میزارین
سلام و ادب
ببینید interface بین متلب و گمز رو می تونید جستجو کنید و یاد بگیرید. مقداری جواب متنوع داره این سوال
اگر مسئله شما استفاده از دیتای متلب توی گمز هست و بده بستونی نیست، می تونید دیتا رو بریزید توی اکسل و از گمز اکسل رو فراخونی کنین. راه ساده ش همینه
سلام ببخشید توضیح این سه خط روش eps که در library گمز هست را کسی میدونه؟
$set fname p.%gams.scrext%
File fx ‘solution points from eps-method’ / “%gams.scrdir%%fname%” /;
$if not set gridpoints $set gridpoints 10
سلام
اولی که داره یه فایل رو نامگذاری میکنه. که اسمش هم از gams.scrext میخونه. این جزو اطلاعات سیستمی گمز هست. برا اینکه متوجه بشین اینو سرچ کنین gams system attributes
دومی هم داره یه فایل تولید میکنه به نام fx
سومی هم میگه مقدار گریدلاین رو که تو روش eps برای تیکه تیکه کردن بازه های جواب استفاه میشه رو برابر 10 قرار میده. (درصورتی که از قبل عدد دهی نشده باشه)
سلام وقون بخیر
یه فایل اکسل با چند تا شیت را که هر کدام مربوط به یک پارامر است در گمز فراخوانی میکنم و لی وقتی gdx را نگاه می کنم فقط یکی از پارامترها و اونم فقط دو تاشو اونجاست وچرا اینطور میشه؟
ممنون
سلام
آدرس دهی ها رو دقت کنین. هر بار که میریزین تو gdx داده ها رو، یه display هم بکنین. ببینین میخونه داده ها رو یا نه. اگه نه که ادرس دهیتون احتمالا اشتباه هست.
با سلام و خسته نباشید
سوال من اینه که من در قسمت پارامترم اومدم تعریف کردم که به عنوان مثال
parameter h(i) /
1 25
2 63
3 40
……
همینو اوردم تو اکسل با دستور مخصوص خودش
Ww رو هم در قسمت مجموعه 1 تعریف کردم
Parameter h(i,ww)
1
1 25
2 63
3 40
ولی جواب هایی که میگیرم از خروجی گمس متفاوته میخواستم اشکال کار رو بدونم
سلام
چه تفاوتی داره؟
بعد از اینکه گمز از رو اکسل خوند داده ها رو، آیا display کردین h رو؟
با سلام و درود
من در انتقال فایل از اکسل به گمز با مشکلی روبرو شدم و اونم اینه که هر موقع از گمز run میگیرم با چنین خطایی مواجه میشم
error 510
unable to open gdx file for $gdxin
واقعا دیگه کلافه شدم و نمیدونم مشکل از کجاست.
درضمن کدنویسیم هم بدین صورته..
call gdxxrw saeid1.xlsx par=c reng=sheet1!a1:c3 rdim=1 cdim=1$
$gdxin saeid1.gdx
$load c
$gdxin
واقعا ممنون میشم اگه کمکم کنید.
سلام
دایرکتوری گمز رو رعایت کردین؟ فایل اکسل باید در دایرکتوری فعال گمز ذخیره بشه.
سلام لطف میکنید منظورتون رو از دایرکتوری گمز بیشتر توضیح بدید؟ من نمیتونم پیداش کنم و به ارور 502 و 510 برخوردم
این مسیر رو دنبال کنید در گمز
file/project
اونجا مشخص میشه که دایرکتوری کجا هست. معمولا در صورتی که تغییر ندید، documents/gamsdir/projdir
سلام جناب محمودی. من هم این مشکل رو دارم و دایرکتوری گمز راهم رعایت کردم. علت چیست؟ آیا تغییر زمان سیستم برای استفاده از گمز علت این مشکل نیست؟؟
سلام آقای سعید. من هم این مشکل رو دارم و دایرکتوری گمز راهم رعایت کردم. علت چیست؟ آیا تغییر زمان سیستم برای استفاده از گمز علت این مشکل نیست؟؟
بی نهایت سپاسگزارم از لطف شما. واقعا لطف کردید
خواهش میکنم
در واقع کد گمز من به صورت زیر هست
CALL GDXXRW.EXE C:\Users\hani\Documents\gamsdir\projdir\data5.xlsx par=c rdim=1 cdim=1 rng=A1:Z26
table c(i,j) ‘The cost of between nodes’
$GDXIN data5.gdx
$LOAD c
$GDXIN
display c;
البته چون i وj رو ابتدای کد نویسی در مجموعه ها تعریف کردم اینجا دوباره تعریفش نکردم.
طبق چیزی که من براتون گذاشتم بنویسین. parameter بذارین. ترتیب هم رعایت کنین.
سلام ممنونم که جوابم رو دادید. اره منم همینجور دستورشو نوشتم . ولی خطای 463 رو میزنه یعنی
the column section in the previous table is misssing .
مگه cdim تعداد ستونهایی نیست که در نظر میگیره برای اینکه به صورت اعداد داخل جدول محسوب نشه؟ مهم نیست جدول در اکسل از چه cell و ستونی نوشته بشه؟ میتونه تشخیص بده که از کدوم سمت چنتا رو بعنوان لیبل در نظر بگیره؟ یک دنیا ممنون میشم این سوالم رو هم پاسخ بدید
ببینین، وقتی جدول رو تو اکسب وارد میکنین (فرضا از a1 تو شیت مورد بحث شروع میکنین به وارد کردن داده)، باید a1,b1 خالی باشن. c1 تا مثلا q1 بشه اندیس سوم شما. a2 تا aفلان، و b2 تا bفلان هم اندیس اول و دوم شما باشن. اینجوری میخونه. خودش دیگه میفهمه. برا اینکه قاطی نکنه، و ادرس دقیق تر نخواد، تو هر شیت فقط یه جدول بذارین.
سلام وقتتون بخیر.ببخشید من چندین بار سوال پرسیدم ولی پاسخی دریافت نکردم.میشه خواهش کنم دستور فراخوانی یک جدول از اکسل به گمز رو با استفاده از gdx توضیح بدید. من چندین بار اجرا کردم خطا میزنه .میگم شاید دستور رو کامل بلد نیستم.ممنون میشم اگر سوالم رو جواب بدید.خیلی حیاتیه برا پایان نامه ام میخام.اگر امکانش هست کامل بگید.فکر کنید یه نفر تازه کار سوال پرسیده .مخصوصا راجع به cdim و rdim.
سلام
قبل از هر چیزی نسخه گمزتون رو بروز کنین. فایل اکسل حتما باید تو دایرکتوری فعال گمز باشه تا بشه فراخوانی انجام داد.
کد زیر نشون میده که جدول سه بعدی میخوایم فراخوانی کنیم که دو اندیس اول تو دو ستون A,B در اکسل قرار گرفتن و اندیس سوم تو سطر اول. یعنی ماتریسی که تو اکسل تعریف شده به این شکله که گفتم. پس گمزم باید همین رو بخونه.
حالا کد زیر این جدول رو فراخوانی میکنه. نام فایل اکسل book.xlxs و شیت مربوطه sheet1 و داده ای که میخوایم بخونیم d(k,j,i هست.
جدول تو اکسل به این شکله:
با سلام، دو سوال دارم:
1- تفاوت دو کد دستوری زیر چیست؟ (x راکتانس خط و limit حد شارش توان خط انتقال قدرت می باشد)
2- اگر بخواهیم باقی ورودی های معالات را در صفحه لیست ببینیم، از چه کد دستوری باید استفاده کنیم؟
سلام
من مفاهیم این مدل رو نمیدونم. ولی اولی میگه که در صورتی که branch مثبت باشه، معادله باید اجرا بشه. دومی هم میگه درصورتی که branch مساوی با صفر باشه.
سوال دوم، کد زیر رو قبل از دستور solve بذارین.
option limrow=1000;
سلام و ممنون از سایتتون
من یک جدولم رو در اکسل تعریف کردم و بعدش با کد زیر توی گمز اوردمش:
اما این کادر میاد و همینجور میمونه یعنی حل ادامه پیدا نمیکنه ok سبز رنگی هم که توی کادر xhs2gms هست رو میزنم فقط همین متنو رفرش میکنه دیگه اتفاقی نمیفته کادر همینجور میمونه و حل مدل ادامه پیدا نمیکنه
میخواستم ببینم چی باید بزنم که حللش ادامه پیدا کنه و همینجور نمونه رو این کادر؟
سلام
این رویه رو انجام بدین درست میشه. فقط حواستون باشه که فایل اکسل باید تو داریکتوری فعال شما ذخیره شده باشه. مجددا تأکید میکنم که دایرکتوری فعال شما باید فایل اکسل اونجا باشه. در غیر این صورت ارور دارین.
با این مشکل حل میشه. این روزا کمتر از xls2gms استفاده میشه. الان از تکنولوژی gdx استفاده میشه بیشتر
سلام
مساله شدنی است. نتایجی که در Display گمز نمایش داده میشود با نتایجی که در اکسل نشان داده میشود، یکسان نیست.
امکانش هست کد بهتری که نتایج روش اپسیلون کانستریت را به اکسل منتقل میکند در اختیار بنده قرار بدید؟
تشکر
سلام
چنین موردی تو دیتابیس پیدا نکردم. قطعا داریم.
یکسان نبودن اونا چجوریه؟
سلام وقت بخیر
من وقتی مدلو با اپسیلون کانسترینت حل میکنم و میخوام مقادیر متغیرها از گمز به اکسل انتقال بدهم از
کد زیر استفاده میکنم و با مشکل مواجه میشم.در حین حل مساله وقتی شیت های مختلف اکسل را بررسی میکردم نتایج کاملا درست بود ولی زمانیکه تکرار آخر انجام میشد نتایج شیت دوم تا آخر یکسان میشد. اینم کدم بود که gهمون gridpoint ماست.
ممنون میشم اگر راهنمایی کنید.
سلام
اینکه شما چجوری کد رو نوشتین خودش مورد بحث هست. وقتی دیگه تغییر نکنن، معمولا علتش اینه که مدل شما در اون مسئله ی نمونه نشدنی هست. پس همون جوابای قبلی برای شما احتمالا کافی هست.