در مطالب پیشین بیان شد که منظور از پارامتر در تحقیق در عملیات بخشی از داده ها است که از نظر ما معلوم هستند. ولی متغیر نوعی از داده ها است که به عنوان متغیر تصمیم مشهورند و یکی از اهداف حل مدل، محاسبه این مقادیر است.
به عبارت دیگر متغیرها بخشی از مجهولات مسئله هستند.
فرض کنید یک مسئله ی بهینه سازی دارید. این مسئله دارای یک تابع هدف و چند محدودیت می باشد. بنا بر علم تحقیق در عملیات، قبل از اعمال محدودیت ها، هر جوابی برای تابع هدف قابل قبول می باشد. این محدودیت ها فضای جواب را محدود کرده و فضایی ایجاد می کنند که فضای شدنی نام دارد. حال وقتی یک مسئله حل می شود، منظور این است که تابع هدف با توجه به فضای شدنی که توسط محدودیت ها اعمال شده است، بهینه شود. و این امر وقتی اتفاق می افتد که متغیرهای مختلف مقادیری به خود بگیرند که در فضای شدنی قابل قبل باشند. بنابراین چگونگی و مهارت در تعریف متغیرها نیز به برنامه ی شما در جهت رسیدن به جوابی بهتر و بعضاً سریع تر کمک خواهد نمود.
همانطور که اطلاع دارید متغیر به چند قسمت مانند متغیر آزاد در علامت، مثبت، منفی، صفر و یک و… تقسیم بندی می شوند. در این بخش به نحوه ی تعریف متغیرهایی که در مدل شما مورد استفاده قرار می گیرند، پرداخته می شود.
فرض کنید در مدلتان متغییرهای زیر را دارید. همانطور که مشاهده می کنید، متغیرهای xو yو z متغیرهایی آزاد در علامت، متغیر m عدد صحیح مثبت، v صفر و یک و همچنین متغیر u فقط به ازای اندیس هایی از j که در آنها j برابر با 5 تا 10 است صادق خواهد بود، بنابراین متغیر u به نوعی محدود شده است. این متغیرها را در GAMS چطور تعریف می کنید؟
اینکه این متغیرها را در GAMS به چه شکل تعریف کنیم بسیار ساده است. متغیرها را با دستور کلی Variable می توان تعریف نمود. در تعریف متغیرها به دو امر بسیار مهم باید دقت نمود:
1. نوع یک متغیر
در علم تحقیق در عملیات، انواع متغیرها به متغیر آزاد در علامت، متغیر مثبت، منفی، غیر منفی و… تعریف می شوند. مروری بر این متغیرها را در شکل زیر می توان مشاهده نمود:
جدول بالا خلاصه شده و واضح به نظر می رسد. بنابراین نیازی به توضیح تک تک این نوع متغیرها احساس نمی شود. اما جهت توضیح هر چه بیشتر در مورد چگونگی تعریف این متغیرها در GAMS، متغیر x را در نظر بگیرید که دارای اندیس j است. انواع متغیرها به ترتیب به صورت زیر می توانند تعریف شوند.
* Examples: How to define a variable in different types variable x(j) ; free variable x(j) ; positive variable x(j) ; nonnegative variable x(j) ; negative variable x(j) ; integer variable x(j) ; binary variable x(j) ; semicont variable x(j) ; semiint variable x(j) ; sos1 variable x(j) ; sos2 variable x(j) ;
2. ویژگی های یک متغیر
در برنامه نویسی توسط GAMS یک سری ویژگی ها را می توان به یک متغیر نسبت داد. به عنوان مثال می توان گفت فلان متغیر مقداری بین فلان تا فلان دارد. در این صفحه فقط به چهار ویژگی اصلی و پر کاربرد متغیرها شامل: حد پایین متغیر، حد بالای متغیر، ثابت کردن یک متغیر و مقدار کنونی متغیر، پرداخته می شود.
1. حد پایین یک متغیر
توسط دستوراتی می توان به یک متغیر ویژگی نسبت داد. یکی از این ویژگی ها حد پایین می باشد. کد زیر که شامل تعریف کلی و یک مثال از تعیین حد پایین برای دو متغیر x و y است را در نظر بگیرید:
* How to assign an attribute to the variables variable x ; x.lo=5 ; variable y(j) ; y.lo(j)=10;
کد بالا نشان می دهد که متغیر x دارای کمترین حد برابر با 5 و متغیر y دارای حد پایین 10 می باشند.
2. حد بالای یک متغیر
تخصیص حد بالای به یک متغیر نیز مشابه حد پایین آن می باشد. کد زیر این امر را به ضوح به نمایش می گذارد:
* How to assign an attribute to the variables variable x ; x.up=5 ; variable y(j) ; y.up(j)=10;
کد بالا به این امر دلالت دارد که حداکثر مقداری که متغیرهای x و y می توانند به خود بگیرند به ترتیب برابر با 5 و 10 می باشد.
3. ثابت کردن یک متغیر
* How to assign an attribute to the variables variable x ; x.fx=5 ; variable y(j) ; y.fx(j)=10;
در کد بالا دو متغیر به نام های x, y که آزاد در علامت هستند تعریف شده و سپس مقداری ثابت (5 و 10) به آنها تخصیص داده شده است. این شیوه ی کد نویسی به کاربر امکان تحلیل حساسیت بهتر می دهد. حتی کابر می تواند توسط این کد (ثابت کردن یک متغیر بر روی یک مقدار معین) اشکالات مدل خود از جمله نشدنی شدن جواب و یا غیر واقعی بودن آن را مورد تجزیه و تحلیل قرار دهد که این امر بسته به تجربه و کارآزمودگی وی دارد.
4. مقدار کنونی یک متغیر
نوع دیگری از ویژگی های متغیرها مقدار کنونی آن ها می باشد. منظور از مقدار کنونی آن مقداریست که GAMS پس از طی مراحلی به صورت خط به خط به متغیر تخصیص داده است. به عنوان مثال یک کد GAMS را در نظر بگیرید که در آن دو مدل کد نویسی شده اند. و متغیری به نام x باید پس از مقدار گرفتن در مدل اول، جهت حل در مدل دوم، به عنوان عددی ثابت a (پارامتر ورودی) به مدل دوم معرفی شود. بنابراین کد ساده ی زیر پس از دستور solve ر مدل اول باید قرار داده شود و بدین صورت به مدل دوم فهمانده می شود که پارامتر a که در مدل دوم دقیقاً همان مقداری را دارد که متغیر x در مدل اول در حالت بهینه به خود گرفته است:
* How to assign an attribute to the variables variable x ; x.l=5 ; variable y(j) ; y.l(j)=10;
(توجه شود که در صورت عدم آشنایی با دستور solve به بخش مربوطه در نوار کناری دسته بندی، بخش حل مدل توسط GAMS مراجعه فرمایید). مثالی از این نوع مدل ها مدل های پویا در مهندسی مکانیک، مدل تعالی عمومی در اقتصاد کلان و مدل زمان بندی در مهندسی صنایع می توند باشد
نمایش ویژگی های متغیرها
فرض کنید مدلتان حل شد و پس اط حل آن مایلید تعدادی از ویژگی های متغیرهایتان به نمایش گذشته شود. به عنوان مثال می خواهید مقداری که یک متغیر در حالت بهینه به خود گرفته پس از حل مدل به نمایش گذاشته شود. جهت نمایش ویژگی های متغیرها می توان از دستور display استفاده نمود. مثال زیر این امر را به نمایش می گذارد. (دستور display در بخش مربوطه توضیح داده شده است)
ٍDisplay x.l, x.lo, y.scale, z.up ;
توسط کد بالا، GAMS پس از حل مدل شما، مقدار بهینه ی متغیر x، حد پایین متغیر x، و حد بالای متغیر z را به شما با خواهد گرداند.
بپردازیم به ادامه ی مثال کاربردی 1:
(در صورتی که با مثال کاربردی 1 آشنایی ندارید اینجا کلیک کنید). با دقت به مثال کاربردی 1، مشاهده می شود که مسئله دارای یک دسته متغیر به نام x می باشد که دارای اندیس j می باشند. پس باید یک متغیر آزاد در علامت به نام x تعریف نماییم.
نکته مهم: توصیه ی اکید می کنیم که به هنگام تعریف متغیرها همیشه یک متغیر اضافی (آزاد در علامت) نیز با نام دلخواه تعریف کنید. جهت روش تر شدن موضوع به این موضوع دقت کنید که وقتی شما یک مسئله را کمینه یا بیشینه می کنید، همیشه برای تابع هدفتان یک نام تعریف می کنید. نامی که در این مثال برای تابع هدف تعریف شده است Z می باشد. پس باید دو متغیر x و z را به صورت آزاد در علامت تعریف کنیم
بحث در مورد تعریف متغیرها تقریباً به اتمام رسید. مباحث تکمیلی متغیرها در آینده در همین تاپیک اضافه خواهند شد.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش معادلات در لیست مطالب مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
در یک مدل ریاضی، اندیس tp به اندیس t وابسته است. اندیس t از 1 تا 30 است و اندیس tp از t تا t+10 است. اندیس tp چگونه در گمز تعریف می شود؟
سلام وادب
اگر اندیس t برابر با ۳۰ بشه، چه اتفاقی برای tp میفته؟ چهل میشه ؟
سلام، سوال من در مورد مسئله g-vrp اردوگان و میلر هوکس ۲۰۱۲ هستش
توی مسئله از همه راسهای انبار، مشتری، AFS(همون ایستگاه سوخت) باید یکبار بازدید بشه ولی بعضی جاها از AFS میشود بیش از یکبار بازدید کرد، برای اینکه این اتفاق بیوفته و از AFSها دوباره بازدید شود یا به اصطلاح مدل dynamic بشه باید چه چیزی به کد گمز اضافه کنم؟
سلام و ادب
ما فرض کردیم که نقاط i یکبار بازدید میشن و براش محدودیت تعریف کردیم. i همه نقاط هستن. اگه بخوایم ایستگاه ها رو از این محدودیت جدا کنیم، باید یه مجموعه r داشته باشیم که زیر مجموعه I باشه و اعضای ایستکاه ها توش نباشن. و تو محدودیت به جای i باید از r استفاده کنیم.
سلام وقت بخیر
مدل زیر را ران میکنم همه جوابها صفر می شود. در قسمت سولوشن ریپورت ارور مقدار عدد صحیح را می دهد.
چه مقداری را باید برای حد متغیر تعریف کنم.
سلام. اين مدل شما:
پاسخ ها:
مدل جواب صفري ندارد.
سلام. وقت شما بخیر. عذر میخوام من یک کد توی گمز دارم که برای یک متغیر به نام ولتاژ حالت نرمال یعنی V_N(i,t)، مقادیر حداکثر و حداقل به شرح زیر تعریف کردم:
V_N.up(i,t)=Vmax_N
V_N.lo(i,t)=Vmin_N
مقادیر Vmax_N و Vmin_N هم اعداد ثابت، غیر صفر و مثبتی هستند که توی بخش پارامترها مقادیرشون تعریف شده هست. با این وجود پس از اینکه مدل رو که یک مسئله MILP هست ران میکنم، گمز مسئله رو کامل حل میکنه و پیام proven optimal solution میاد و تابع هدف مسئله برابر با یک میزان مشخصی به دست میاد، اما مقادیر مربوط به متغیر V_N(i,t) توی نتایج خروجیهای مسئله، همگی برابر با صفر نشون داده میشن، درحالیکه همونطور که ابتدا عرض کردم، مقدار حداقل این متغیر، عددی غیر صفر و مثبت هست. لطفا راهنمایی بفرمایید.
سلام و ادب
قبل از دستور solve باید این شرط رو بنویسید، اگر همینکار رو کردید و باز هم مشکل وجود داره کد رو ارسال کنید به ایمیل سایت چک بشه
سلام مجدد و وقت شما بخیر. بابت پاسخگویی سپاسگزارم. عذر میخوام من موردی که فرمودید رو انجام دادم و شرط رو قبل از solve نوشتم، ولی باز هم مقادیر V_N توی خروجی صفر شد. همچنین به جای این دو دستور lo و up، شرط مربوط به حداکثر و حداقل ولتاژ رو به صورت معادله توی equation ها نوشتم و باز هم خروجی V_N صفر شد. البته این رو هم عرض کنم که مدل من شامل دو مجموعه قیود و معادلات مربوط به حالت نرمال و حالت پس از حادثه بوده و تابع هدف من نیز ترکیبی از یک سری متغیرهای حالت نرمال و حالت پس از حادثه هست. قیود حالت نرمال رو برای زمانهای قبل از وقوع حادثه و پس از اتمام حادثه نوشتم و همچنین قیود حالت حادثه را برای زمانهای پس از شروع حادثه تا اتمام حادثه نوشتم. هنگامی که ران میگیرم پیام proven optimal solution ظاهر شده و مقدار عددی تابع هدف در خروجی نمایش داده میشه. ولی وقتی مقادبر خروجی متغیرهای مربوط به حالت نرمال را در خروجی بررسی میکنم عمدتا همگی صفر هستند. در حالی که متغیرهای خروجی مربوط به حالت پس از حادثه مقادیر به نظر مناسب و توجیه پذیر و قابل قبولی دارند.
من فکر میکنم پیام proven برای یه حالت پس از حادثه اومده. فکر نمیکنم این پیام برای زمانی که محدودیتی هم نقض بشه ارائه بشه
سلام وقتتون بخیر
من تو کدنویسیم ضرب دوتا متغیر تصمیم رو دارم.یکیش باینری هست و دیگری عدد صحیح بزرگتر از صفر
میخواستم خطی سازیش کنم ولی نمیدونستم چجوری میشه تو محدودیت ها اضافه کنم
میشه لطفا راهنمایی بفرمایید
سلام روز بخیر
فرضا x متغیر مثبت، و y باینری باشه. ضربشون به شرح زیر خطی میشه:
دقت کنین اگر x و y اندیس داشته باشن، به همون اندازه z هم اندیس میگیره.
سلام
من یه مدلی حل کردم و (i,j,t)xو (i,j,t)y جوابهای اون هستند، دوتا سوال داشتم ازتون اول اینکه چطورمیتونم جوابهای این مدل ور در یه مدل دیگه فیکس کنم و حلش کنم؟
و اینکه دوتا مدلو من داخل یک فایل و زیرهم نوشتم گمز اروری نداد اما ممکنه xو yهاشونو باهم قاطی کنه؟
سلام و ادب
ببینید گمز مدل ها رو بر اساس دستور solve و دستور model می بینه.
شما یه مدل دارین که اسمش mymodel1 هست. و با دستور solve به گمز دستور میدین که حلش کنه. حالا بعد از حل این مدل، دو متغیر y,x که اتفاقا تو یه مدل دیگه به اسم mymodel2 استفاده میشن باید فیکس بشن. (خیر هیچ مشکلی پیش نمیاد)
با سلام و احترام
دکترجان روش ال پی متریک کلاسیک جمع وزنی چه تفاوتی با روش ال پی متریک نرمال دارد؟
با سپاس
سلام و ادب
در روش وزنی کلاسیک، شما دستی وزن می دی به مسئله. مشکلش اینه که مثلا یه هدف ممکنه از نظر عددی 1 میلیون بگیره و یه هدف دیگه در حد مثلا 0.001. حالا هر چقدر هم وزن بخوایم بدیم به این هدف ها، باز هم کفه ترازو به نفع هدف اوله، چون عددش بزرگتره. برای همین نرمال سازی روش منطقی تریه
سلام
من یک پارامتر کاهش کربن و یک قید در مدلم تعریف کردم اما این پارامترو قید تاثیری روی تولید من ندارند به نظرتون مشکل از کجاست؟
سلام
از هر چیزی می تونه باشه، مدلسازی، کدنویسی و داده ها
سلام
چگونه برای Positive Variable می توان نرخ رشد تعیین کرد؟
سلام
سوال شفاف نیست
سلام وقت بخیر
چه جوری می تونم یه متغیر با سه مقدار 0و1و-1 تعریف کنم؟
سلام و ادب
راه های بسیار زیادی داره. یه راه ساده ش روش زیر هست (فرضا متغیر شما y باشه. ما سه متغیر جدید صفر و یک هم تعریف میکنیم در کنارش):
سلام خسته نباشید
کدی در گمز وجود داره زمانی که حدپایین برای متغیری مشخص می کنیم از مقدار آن حد هنگام run پایین تر نیاید؟
سلام و ادب
معمولا همین اتفاق هم می افته. هم تو حالت بهینه و هم زمان ران شدن مدل. یه جاهایی گمز بسته به نیاز، برای پیدا کردن جواب اولیه، میره مقادیر کمتر از حد پایین رو هم میگیره. این قاعده زمانی مشکل ساز میشه که ما از عبارات توان (مثل پاور و لگاریتم) یا کسری استفاده کرده باشیم. برای اینکه مشکل ساز نشه معمولا یک مقدار خیلی کوچک به مثلا مخرج اضافه میکنن که خطاهایی نظیر تقسیم بر صفر نده بهمون.
سلام
من یک متغیر مثبت GEN (i,t) دارم وقتی برای آن حد پایین تعریف و run می کنم در قسمت خروجی solvar من مقدار lower و level من یکی میشه به نظر شما مشکل از کجاست؟
سلام
ظاهرا جهت و نوع تابع هدف طوریه که به نفعشه GEN کمترین مقدار خودش رو بگیره. این ممکنه از داده ها یا خود مدل باشه، باید هر دوش رو بررسی کنین
سلام و عرض ادب
من یک متغییری دارم که مربوط به شارژ ایستگاه های شارژ است که شارژ ساعتی ایستگاه های شارژ رو نشون میده، 3 ایستگاه دارم که بعد این متغییر برابر با 3*24 میشه، حال میخواستم این ایستگاه ها رو به شبکه متصل کنم، با فرض این که شبکه 9 باسه است، من باید بعد این ماتریس رو 9*24 تبدیل کنم و 3 باسی که ایستگاه ها بهشون وصلن، عدد بگیرن، چجوری میتونم این تغییر بعد رو انجام بدم؟ لازم به ذکره که من سعی کردم در همون ابتدا متغییر رو به 9*24 تبدیل کنم ولی در مساله ام نشدنی گویا هست، چون به فرض من 1000 خودرو دارم که بین این 3 ایستگاه بر حسب شرطی که تعریف میکنم تقسیم میشن، و باس هایی که ایستگاه بهشون متصله نامعلومند و به همین دلیل نمیتونم در همین ابتدا به 9*24 تبدیل کنم، چه کار باید کنم؟
سلام
ببینید شما اول باید شبکه رو رسم کنین. خب بعد از رسم شبکه تعاریف رو بر حسب گزاره های فارسی می نویسین.
مثلا مقدار باری که از ایستگاه شماره i به باس شماره j میرود. که این میتونه فاکتور زمان هم داشته باشه، ساعت، روز یا… .
بنابراین شما بر اساس نیاز متغیر تعریف میکنید. و بهش اندیس میدید. مثلا برای گزاره بالا میتونه این باشه: R(i,j یا اگر ساعت هم بیاریم داخلش میشه R(i,j,t . مجددا میگم شما بر حسب نیاز مدلسازی رو انجام میدید.
مقدار شارژی که خودروی v از ایستگاه i می گیرد. تعداد ساعاتی که خودروی v به ایستگاه i متصل است. این ها ممکن هست حتی هم ارز هم باشند.
این گزاره ها میشه تعریف متغیر شما. گزاره های دیگری هم دارید که نتیجه ش میشه محدودیت های مسئله. مثلا مقدار ورودی و خروجی هر ایستگاه باید برابر باشه و…
ممنونم جناب محمودی
سلام خسته نباشید،
من یک متغییر باینری تعریف کردم
به صورت زیر:
Xp(y,station,T) Binary Variable for Paking Charge State ;
اما جواب هایی بین صفر و یک میده، این متغییر در جاهای دیگه ی کد تغییری نمیکنه، مشکل از کجاست؟
لازمه که بگم از سالور سیپلکس و نوع مدل micqp هست
سلام
قبل از دستور solve این اپشن رو بذاین و مجددا ران کنین.
سلام دکتر جان
جناب دکتر، برنامه ریزی تصادفی در الگوریتم تجزیه بندرز به چه صورتی کد می شود؟
یعنی در sp یا dsp، ما یه پارامتر احتمالی داریم(احتمال رخداد سناریو).
همانطور که مستحضرید sp می بایست lp محض باشد، برای کد نویسی چیکار باید کرد؟
برای هر سناریو یک dsp تعریف شود؟ یا راهکار و شیوه ای دیگر دارد
با سپاس از زحمات دکتر عزیز
سلام عزیز
ما وقتی یه مسئله رو در حالت عدم قطعیت بررسی میکنیم، اول مدلسازی رو انجام میدیم، سپس بُعد عدم قطعیت رو از بین می بریم. مثلا تو فازی، فازی زدایی میکنیم یا تو تصادفی احتمال رو تبدیل به یه فرمول قطعی میکنیم و درنهایت مدل خطی شده رو حل می کنیم. شما هم همین کارو باید بکنید
سلام دکتر محمودی، وقت بخیر
من یک مدل Mip دارم که شامل تعداد زیادی متغیر عدد صحیح هست. حقیقت اگر من متغیر هام رو Integer تعریف کنم زمان حل خیلی زیاد میشه و جواب هم نمیده. ولی وقتی مثبت میگیرم اوکی میشه. ولی خب جواب متغیرهام برام صحیح بدست نمیاد. چه راهکاری در این حالت میشه استفاده کرد؟ آیا میشه همونطوری با متغیر positive تعریف کنم و تموم بشه مشکل، یا ااینکه این فرض من اشتباه هست
سلام
چاره خاصی ندارین. و این ذات مسئله شما هست.
تا جایی که ممکنه متیغیرهای اینتیجری که که اگر ازاد بشن باز هم جوابشون اینتیجر میشه (به خاطر شرایط مسئله ) نگه دارین و بذارین مثبت بمونن.
شاید تغییر متغیرهای عدد صحیح به جمع متغیرهای باینری به مشکلتون کمک کنه. شاید.
جناب دکتر عزیز سلام
مقدار تقاضاهای مسئله بنده زیاد می باشد.
پس از حل مسئله، متغییر مقدار ارسالی محصول در دو اندیس مقدار یک می شود.
یعنی مدل یا کدنویسی بنده ایراد دارد؟ یا پارامترها
خیلی لطف می کنید
سلام عزیز متوجه نشدم
سلام
جناب دکتر، جواب مدل بنده اپتیمال و نرمال می باشد
ولی جوابی که مدل داده، یک محدودیت را غیر شدنی می کند (بطور دستی که امتحان می کنم)
دلیلش چیه؟
بفرض مقدار ارسالی ها در دوره دوم 99 می باشد، تقاضا 100 است.و کمبود هم صفر می باشد
با این حساب مشکل از نحوه بررسی کردن شما هست احتمالا
جناب دکتر یه سوال خدمتتان داشتم
مدل من در رابطه با زنجیره تامین می باشد
سه نوع متغییر دارم
مقدار ارسالی شیر از تامین کنندگان به تولید کنندگان
مقدار تولید در تولید کنندگان
مقدار ارسال محصول به خرده فروشان
بنظر حضرتعالی این سه نوع متغییر را اینتیجر تعریف کنم یا پازیتیو؟
مسئله من سخت می باشد اگر اینتیجر تعریف کنم زمان حل خیلی طولانی می شود.
سلام
اگر دادههای ورودی اینتیجر هستن، شما پازیتیو تعریف کنین، به احتمال زیاد تو حالت بهینه خودش اینتیجر در میاد
باسلام واحترام
متغییری را پازیتیو تعریف کردم، بعد ازاینکه ران می گیرم همین متغییر در بعضی از اندیس ها مقدار منفی می گیرد
جواب نرمال و اپتیمال می باشد.بنظر حضرتعالی علت چیست؟
سلام
این مقدار منفی رو کامنت کنید، احتمالا خیلی خیلی کوچک باشه و نزدیک به صفر
خیلی لطف کردید
بله عدد خیلی خیلی کوچیکیه.
جناب دکتری قبلا یه دستوری intervarup=0 برای کد من در نظر گرفتید.
این کد به چه منظوری می باشد؟
متیغییری دارم که در بعضی از اندیس ها مقدار یک می گیرد.
شاید به این دستور ربط داشته باشد
این عدد کوچک مشکلی در حل اینجاد نمیکنه احتمالا. مربوط به تلرانس متغیرها هست، می تونید در موردش سرچ بزنید. ممکنه مقدار m بزرگ رو زیادی بزرگ گرفته باشید.
آپشن intvarup میگه که متغیرهای اینتیجر هر عددی میتونن به خودشون بگیرن. مثلا 0، 1، 100، 50 یا هر عدد صحیح بزرگتر از صفر (اگر این آپشن نباشه، گمز حداکثیر مقداری که یک متغیر اینتیجر به خودش می تونه بگیره رو 100 در نظر میگیره)
جناب دکتر عزیز سلام
سال خوب و باامید و سرخوشی براتون ارزو می کنم
جناب دکتریه سوال خدمتتون داشتم
solver status normal completion
model status integer solution
یعنی حل مدل من بدرستی انجام شده؟ مقدار تمامی متغییرها بزرگتر از صفرشده است(البته بعضی از متغییرها با یه سری از اندیس ها صفر هم داریم)
باتشکر فراوان
سلام روز بخیر
ممنونم سال نو شما هم مبارک باشه.
سالور استاتوس میگه که سالور فرآیند حل رو به اتمام رسونده و مشکلی نداشته.
مدل استاتوس هم گفته که جواب integer پیدا کردم. نمیگه که optimal هست. میگه جواب شدنی و عدد صحیح
طبق داده ها، مدلسازی و کد نویسی، گمز جواب شدنی عدد صحیح پیدا کرده. اینکه درست هست یا خیر، باید مقدار متغیرهای خروجی رو چک کنید و با مفاهیم و فرضیات خودتون مقایسه کنید و ببینید که اون چیزی که انتظار داشتید رخ داده یا خیر
سلام
من کدی رو نوشتم که متغری های مثبت در آن تعریف کرده ام و لی جواب کد اون متغیر ها رو منفی نشون میده. میتونین بگین دلیلش چیه و چطور میتونم حلش کنم؟
سلام
ممکنه جواب نشدنی شده باشه، یا اینکه از یه سالوری استفاده کردین که نتایح متغیرهای مثبت رو بصورت دیفالت منفی نشون میده. مثل couenne
سلام
وقتتون بخیر
ببخشید امکانش هست خطی سازی توابع sign در گمز راهنمایی بفرمایید
باتشکر
سلام
برای مسائل مختلف متفاوت هست. شرط ساین چی هست براتون؟
سلام وقت بخیر، ببخشید چطور میتونیم ضرب یک پارامتر در متغیر پیوسته را در شرط در گمز مدل کنم که غیر خطی نشه؟؟؟
سلام
قانون خاصی نداره. بسته به شرایط مسئله و محدودیت شما، میشه بصورت معادل محدودیت های دیگری ارائه داد.
محدودیت من به این صورت است:
sum((i,d, t’) $(ord(t’) +L(d) *(1+alfa))=ord(t)), Y(n, i, d, t’) *L(d) be ezaye har n, t
(L(d پارامتر بازای هر تقاضا و (1+alfa) متغیر پیوسته و alfa بین 0 و 1 است
راستش هرچی جستجو کردم راهی پیدا نکردم برای خطی کردنش
ممنون میشم ازتون کمکم کنید.
سلام
L اگه پارامتره، ضربش هم در آلفا نیازی به خطی سازی نداره و خودش خطی هست. تنها در صورتی که L متغیر باشه این عبارت غیرخطی میشه.
سختی کار شما در شروط موجود در سیگما هست. اون بخش رو باید هندل کنین. حالا اینکار می تونه بصورت تابع ifthen باشه، یا اینکه یه محدودیت معادل مجدددا تعریف کنین. سرچ بزنین
ifthen function in gams site:gams.com
how to linearize conditions site:gams.com
با سلام
من متغیری مانند p(I,j) دارم. طی فرآیند حل مسئله بعضی از مقادیر این مانند p(1,2) و یا p(5,6) مقدار دارد و مقادیر دیگر مانند p(2,1) صفر است. حال میخواهم متغیر دیگری مانند q(I,j) تعریف کنم و برابر با p(I,j) قرار بدم. اما وقتی این کار میکنم علاوه بر افزایش زمان حل موجب ایجاد مقادیر مانند p(2,1) و دیگر مقادیر که وجود ندارد میشود. کد چطور بنویسم که q(I,j) مقادیر همانند p(I,j) را بگیرد با تشکر
سلام
طبیعتا اگه هر دو حالت مسئله بهینه حل شده باشن، توابع هدفشون هم یکیه و مشکلی پیش نمیاد.
اگه q فقط جنبه محاسباتی داره. بعد از دستور solve بنویسین:
[css]
q.fx(i,j)=p.l(i,j)
[css]
من میخوام از روشهای تصمیمگیری چند معیاره روش ارزیابی همزمان معیارها و گزینه ها که معروف به secaتو گمز کد نویسی کنماگر مطلب مربوط بهشو بفرستم میتونید بهم راهنمایی کنید چطوری کدنویسش کنم؟
سلام
با پشتیبانی سایت در واتس اپ در تماس باشید
سلام و وقت بخیر
این علامت در گمز به چه معناست؟ علامت بزرگتر و کوچکتر در کنار هم؟
سلام
اگر منظورتون <> هست، یعنی “نامساوی است با”
سلام و وقت بخیر
این علامت در گمز به چه معناست؟
سلام و وقت بخیر
0 این علامت در گمز به چه معناست؟
سلام وقتتون بخیر من توی مدلم یگ محدودیت به صورتx3<=30دارم ولی نمیدونم اینو چجوری توی گمز بنویسم ؟آیا میتونم اینو توی قسمت variable فیکس کنم ؟اگه ممکنه فرم پارامتریک این محدودیتو که تو گمز باید بنویسم برام بنویسین ممنونم
سلام
منظورتون از 3 اندیس شماره سوم هست. یعنی مثلا i=3 به شرح زیر هست:
یا
سلام
میشه این تاریخ سایت رو درست کنید؟؟!!!!
هر کسی کامنت میذاره می زنه 51 سال قبل ، آدم نمی دونه کدوم کامنت برای چه تاریخیه
گیج شدیم به خدا
سلام
ممنونم بابت بازخوردتون. والا سایت مشکل پیدا کرده. فعلا کد نویسمون در دسترس نیست. چشم
باسلام
اگر متغیر مثبتی پس از حل فقط مقادیر صفر و یک را بگیرد ایراد از کجاست؟
سلام
ممکنه مشکل نباشه! ممکنه انقدر فضای جواب رو با محدودیت ها یا داده ها کوچیک کرده باشین که عملا چاره ای نداشته باشه جز اینکه یک بگیره. به خودی خود مشکل نداره. باید مدلتونو تحلیل کنین
سلام خسته نباشید
چطور می توانم عبارت conj را در گمز بنویسم.
مثلا ((conj(v(1,i به چه صورت باید نوشته شود.
سلام
v و conj چی هستن اصن؟
سلام
من تو مساله بهینه سازیم یک قیدی دارم به این شکل :
x*y=0 که هر دو متغییر x و y مثبت هستند.
الان میخام این قید رو خطی کنم، از روش big-m هم نمیتونم استفاده کنم چون نمیخوام بهینه سازیم non-convex بشه.
متاسفانه روش sos رو هم متوجه نشدم از این تاپیک
امکان داره یه راهنمایی بکنید یا یک مثال ساده ارائه بدین؟
سلام
الان ایده ای جز m بزرگ ندارم. sos هم نهایتا به همون m میرسه احتمالا.
سلام
من یک مشکل در تعریف مجموعه دارم. در مسئله مورد نظرم یک اندیس مربوط به تعداد ماشین ها دارم، از طرفی تعداد ماشین متغیر تصمیم هم هست بنابراین نمیتونم در قسمت sets تعریفش کنم، این مشکلو چطور می تونم حل کنم؟
سلام
مجموعه نمیتونه متغیر باشه.
باید از راه حل های خلاقانه استفاده کنین. بستگی به مدل داره.
بله من مسئلم پخش باره
یک قید بصورت زیر داره
P^2 + q^2)/v <i)
که P و q و V و i متغیر هستند
وقتی اینو مینویسم تو جوابش میزنه
i =g=0*p + 0 *q + v*q
مسئلم هم convex optimization
سلام
ممنون از راهنماییتون
با این دستورا نمیشه چون هر دوتا متغیر هستند
ضرب دو تا متغیر یا تقسیمشون دستور دیگه ای داره؟
متوحه سوالتون نمیشم.
منظورتون اینه که دو متغیر ضرب هم بشن، و مسئله غیر خطی نشه؟ یا چیه جریان؟
سلام
ممنون از سایت خوبتون
میشه لطفا دستور ضرب و تقسیم دو متغیر رو تو گمز بگین؟ من میخوام یک محدودیت بزرگتر مساوی رو تو گمز بنویسم که یک طرف معادله رابطه زیره
((p^2)+(q^2)) تقسیم بر v
که P و q و v متغیر هستند
سلام
نماد ضرب ستاره یا * هست. نماد تقسیم / و نماد توان دو تا ستاره ** یا توابع power هست. این پست رو بخونین.
سلام ببخشید من میخوام نرم یک و بینهایت تو گمز تعریف کنم آیا دستور خاصی دارن یا باید نرمارو باز کنم ؟
با تشکر
سلام
نرم تو جاهای مختلف تعاریف متفاوتی داره. منظور شما از نرم چی هست و چه استفاده ای داره. تشریح کنید.
سلام وقتتون بخیر
ببخشید من چند تا متغیر دارم که میخوام یکیشون مقدارش حتما صحیح انتخاب بشه
و اون متغیر رو با دستور integer Variable مینویسم ارور میده
ارور 65 و 256
البته با nlp این ارور رو میده ولی با minlp ارور نمیده ولی همه مقادیر رو صفر میده
مشکلش چیه؟ ممنون از سایت خوبتون
سلام
مسائل رو قاطی نکنین لطفا. دونه دونه.
سلام وقت بخیر،من در مدلم پارامتر (C(s,i,j رو دارم که هزینه جابه جایی هرواحد محصول نوعs از مبدا i به مقصد j هست. مقادیر این پارامتر رو در GAMS چجوری باید تعریف کنم؟
اگر سطرهای TABLE رو I بگیرم و ستون ها رو J پس s رو چیکار کنم؟؟؟؟
سلام
این پست رو بخونین.
سلام
چطور میتونم یک پارامتر صفر و یک را ریلکس کنم؟
سلام
منظورتون فک کنم از پارامتر متغیر هست. برای ریلکس کردن متغیر باینری x میتونید به صورت پیوسته تعریف کنید و با دستور x.up=1 بگید که حداکثرش یک هست.
راه دیگه اینه که مثلا تو یه مدل Mip به جای اینکه تو دستور سالو از mip استفاده کنین، از rmip استفاده کنین که ریلکس میکنه متغیر رو.
سلام .وقت بخیر
اقای محمودی به کمکتون شدیدا نیاز دارم وقت زیادی هم ندارم میشه لطفا راهنماییم کنید من یه کدخطی دارم که بعد runگرفتن modelststکدرا 14میده میخواستم علتش بدونم .با تشکر
سلام
این یعنی اینکه مدل شما (به هر دلیلی) حل نشده. حالا یا زمان کم اورده یا هر چی.
سلام
چطور می توان یک متغیر را به عنوان یک اندیس برای متغیر دیگر تعریف کرد؟
ممنون
سلام
اینی که فرمودین مسئله رو خطی میکنه و معمولا میشه از دستوراتی نظیر ifthen استفاده کرد که منطقی نیست!
باید یه راه حل خلاقانه استفاده کنین که خطی سازی انجام بدین. به مسئله بستگی داره.
سلام
چطور میتونم حاصلضرب یک متغیر پیوسته در یک متغیر صحیح خطی کنم.
ممنون میشم راهنمایی بفرمایید.
سلام وقت بخیر
راهکار زیاد دارید.
یه راهش اینه که متغیر صحیح رو به مجموع متغیرهای صفر و یک تبدیل کنید. برای اینکار میتونین حد بالای متغیر عدد صحیح رو بدست بیارین اول (حدس باید بزنین یا محاسبه کنین چند میشه حداکثر). بعد اینجوری بذارین مجموع چند تا صفر و یک:
فقط دقت کنین که کجا باید y استفاده کنین و کجا x . ممکنه همه جا y استفاده کنین به نفعتون بشه.
اینجوری که y رو استفاده کنین، یه مشکلی هم داره. اینکه تعداد متغیرهای صفر و یکتون زیاد میشه. برای رفع کردن این کار. یه روش تو کتاب لیبرمن هست. که خیلی بهتره. اونو یاد بگیرین.
حالا که کارای بالا رو انجام دادین، میتونین حاصلضرب متغیرهای صفر و یک در متغیر مثبت رو به راحتی خطی کنین.
سلام.میخواستم ببینم عدد مختلط در گمز به چه صورت نوشته میشه.مثلا عدد (exp(j 2π/3
گمز مختلط ساپورت نمی کنه
اجزا حقیقی و موهومی رو جدا کنید و براتون محاسبه می کنه
سلام و وقت بخیر
موقع ران کردن کد مدل از نوع mimlp ارور زیر نشان داده می شود. مشکل از کجاست؟
[–]
— Reading solution for model mod_payoff
— Executing after solve: elapsed 0:00:03.965
— Ali_Heydari.gms(338) 4 Mb
— Generating MINLP model mod_epsmethod
— Ali_Heydari.gms(247) 6 Mb
*** Error at line 247: division by zero (0)
— Ali_Heydari.gms(340) 6 Mb 1 Error
— Reset Solvelink = 2
— Ali_Heydari.gms(340) 4 Mb
*** SOLVE aborted
— Putfile fx C:\Users\heydari\Desktop\PARAMETR\2kp50_augmecon2_results.txt
— Ali_Heydari.gms(340) 4 Mb 1 Error
*** Status: Execution error(s)
— Job Ali_Heydari.gms Stop 09/22/13 02:09:59 elapsed 0:00:04.007
Exit code = 3
[/-]
و خط 247 عبارت زیر هست.
[–]
247 augm_obj..
248 a_objval =e= sum(k1,dir(k1)*ZO(k1))
249 + 1e-3*sum(km1,power(10,-(numk(km1) – 1))*sl(km1)/(maxobj(km1) –
minobj(km1)));
[/-]
سلام
ظاهرا دارین کد اپسیلون رو استفاده می کنین. این خطا یعنی اینکه تو مخرج این خط یه صفر اتفاق می افته. به این معنی که maxobj مثلا صفر میشه. این یعنی از قبل یا واقعا صفر شده یا اینکه مسئله نشدنی بوده یا حل نشده. و طبیعتا مقدار صفر میگیره. قبل اینکه اپسیلون بزنین. اول ساده چک کنین مدل رو. با دو سه تا دستور solve
با سلام. ضمن عرض خسته نباشید
من یکسری کار را به چند تا ایستگاه تخصیص دادم ولی مشکلی که هست اینه که بعضی از کارها با توجه به فرآیند از پیش تعریف شده باید به ایستگاه مختص خود بروند ولی متغیر تصمیم من که زمان رسیدن کار i به ایستگاه j است بی جهت مقدار می گیرد( یعنی یک کار به ایستگاه های نامربوط وارد می شود). برای این کار چه راهی وجود داره
ممنون میشم اگه راهنمایی بفرمایید
سلام
می تونید یک مجموعه چند بعدی تعریف کنید، که این کار، فقط باید مثلا در ایستگاه فلان یا فلان باید انجام بگیره. بعد هر جا لازم بشه، تومحدودیت ها از این مجموعه به عنوان شرط استفاده کنین. میتونین به جای مجموعه از table حتی استفاده کنین که استفاده کردن ازش راحت ترم هست.
برای اینکار باید مجموعه های چند بعدی رو بخونین.
با سلام
من به دنبال خذف یکسری متغیر در یک مسئله milp هستم. مجموعه اندیس هایی که قرار متغییرهای متناظرشون حذف بشن رو پیدا کردم. شایط مجموعه های شامل 1000 تا 10000 اندیس باشه. لطفا راهنمایی بفرمایید چگونه میشه در واقع variable reduction رو در محیط گمز انجام داد. ممنون
وقتی معادله می نویسید باید اون معادله رو مجدود کنید به اندیس های یکه لازمه
با سلام
من یه مدل دارم با هدف حداقل کردن هزینه که بعد از کامل شدن جواب نشدنی بدست اومد. سوالم اینه که در صورتی که قرار باشه از بین دو انبار یکی با توجه به هزینه حمل و نقل انتخاب بشه چطور این مورد رو میشه کدنویسی کرد
من برای انبار متغیر باینری تعریف کردم و در هزینه های مربوط به اون ضرب کردم و با محدودیت برابر یک بودن مجموع حق انتخاب یکی از انبارها رو دادم.( sum (Is ,wIs(Is,t))=e=1) . اما در قسمت compilation گمز که نگاه کردم تابع هدف هر دو مکان رو مجزا ضرب در هزینه کرده و در واقع هر دو مکان را در تابع هدف لحاظ کرده لطف میکنید راهنمایی بفرمائید.
تشکر بابت سایت و پاسخگویی خوبتون
سلام
wis باید ضربدر هزینه ش بشه توی تابع هدف. اینجوری یکیشون فقط انتخاب میشه، اگه شرط دیگه ای نداشته باشین، این امر با موفقیت انجام میشه.
منظورتون رو از ضرب مجزا متوجه نشدم.
سلام
وقت بخیر
دستور نوشتن حدود سیگما در صورتی که خود حدود متغیر باشن را میدونین
سلام
به support یک ایمیلبزنین که براتون بفرستیم آموزشش رو.
آقا سلام من یه مدلی نوشتم که دوتا متغیر تصمیم در هم ضرب میشن ولی نمیدونم این میشه چه مدلی؟خطیه ؟غیر خطیه ؟چی میشه مدلش
هر کاری میکنم تو solve خطا میده
اگر هر دو متغییر real هستند مدل شما nlp است
اگر حداقل یکی از دو متغببر binary/integer است پس مدل شما minlp است
با سلام
چطور میشه از جواب یک متغییر در بخش شرط if , while استفاده نمود.
فرض کنید vn که یک متغییر است و از مجموع دو پارمتر در طول حل مسئله بدست می آید بخواهیم در بخش شرط دستورات while ,if ,… استفاده کنیم
if Vnt (h)>0 ,
pag=psb + pdb;
);
اگر شرط فوق برقرار بود عبارت pag را بدست بیاورد.
vnt=dn+ft
dn , ft دو پارامتر هستند که در هر ساعت از بازه 24 ساعته متفاوت هستند.و پس از اجرای گمز مقدار dn بدست می آید.حال می خواهیم رابطه ای بنویسیم که برای مقادیر مثب متغییر vnt اجرا گردد.
با تشکر
سلام
اگه این شرط رو بعد از دستور solve میخواین بدست بیارین، کافیه به نام متغیر فقط یک ویزگی .L اضافه کنی. یعنی مثلا به نام x.l به کار ببرین. در غیر این صورت بایدهمین شرطها رو به صورت یک یا دومعادله از نوع equation بنویسین. مقداری مدلسازی میخواد.
سلام. وقتتون بخیر. یه سوال داشتم از خدمتتون. ببخشید من یک متغیر پیوسته به نام LT دارم که از رابطه ی زیر به دست میاد.
LT=sum(i,c(i))/Cl
که c(i) متغیر صفر و یک و Cl پارامتر هست.
حالا یه متغیر دیگه میخوام تعریف کنم به نام TR که برابر 1/LT (عکس LT) هست و مساله رو غیرخطی میکنه. راهی برای خطی کردن عبارت 1/LT وجود داره؟
سلام
دقت بکنین که TR=1/LT در نتیجه TR*LT=1. حالا این رو روش فک کنین که چطور میشه خطی کرد.
ممنون از پاسخگوییتون
من مجموعه جدید رو به صورت
tp/1*10/ تعریف کردم و همین معادله ای رو که گفتید به عنوان محدویت استفاده کردم.ولی خطاهای 154(در قسمت (ord(t ، خطای 171 (در قسمت m(tp) و خطای 149 در قسمت m(t)رو نشون میده.اگر مقدور هست بازهم راهنمایی کنید ایراد کارم از کجاس ؟
آیا به نظرتون نیاز هست در تابع هدفم تغییراتی ایجاد بشه؟
سلام
لطفا متن خطاها رو ارسال کنین.
سلام وقت بخیر
متشکر از توضیحات و راهنمایی ها
مجموعه من سال هست برای دوره زمانی ده ساله مثلا 1397 تا 1406.متغییری که برای اون تعریف میشه در هر سال به مقدار سال قبل وابسته هست و باید مقادیر سال قبل در اون لحاظ بشه.(متغییر به صورت عدد صحیح تعریف کرده ام)بیان ریاضی اون به شکل زیر هست:
مجموعه/ t/1:10
متغییر m(t)
می خواستم بدونم این مدل شرایطی رو میشه اعمال کرد و اگر مقدور هست به چه شکل باید در گمز نوشته بشود.و محدودیت مربوط به اون به چه صورت هست؟
بسیار ممنون میشم راهنمایی کنید.
با تشکر
سلام
برای اینکار شما باید یه اندیس دیگه به اسم مثلا tp هم تعریف بکنین و همچین معادله ای رو به مدل اضافه کنین.
سلام مجدد مشکلی که این مدل دارد این است که متغیری که خدمتتون عرض کردم یعنی در یه بازه ای باینری هستش و در بازه ای اینتجر این متغیر فقط در تابع هدف قرار داره و تا اونجا که میدونم نمی شه تو تابع هدف شرط گذاشت می شه راه حلی که گفتینو با یه مثال کوچولو طرز نوشتنشو بگین ممنون می شم
لطفا به همون گفتگویی که باز میکنین جواب بدین که قاطی نشه کامنتا.
مشکلی نیست. شما تو محدودیت اینا رو استفاده بکنین.
فرضا متغیر شما x(m,n هست.
[css]
integer variable x(m,n);
equations
c1;
c1(m,n)$(ord(m) <=2 and ord(n) <=3).. x(m,n)=l=1; [css]
با سلام من یه مدل دارم که اندیس m آن از 1تا 10 هستش اندیس n آن از 1 تا8 هستش حالا یه متغیر داریم به اسم Y(m,n)
این به شرط 1 تا 6 m و 1 تا 3 n این متغیر اینتجر و در بقیه موارد این متغیر باینری هستش ما اینرو چطور باید در گمز کد بنویسیم؟ ممنون می شم راهنماییم کنید.
با تشکر
سلام
شما میتونین کل متغیر رو به صورت Integer تعریف کنین. حالا جاهایی که میخواین باینری محسوب بشهف تو یه محدودیت شرط بذارین که به ازای این m,n مقدار y کمتر مساوی است با یک.
سلام اول اینکه تشکر از سایت خوبتون
من قبل از اینکه بخوام سوال بپرسم سایت گشتم ولی ندودنستم برای حل مشکلم چکار کنم . .
در گمزی که نوشتم نیاز دارم یه فایلو از اکسل بخونه و اگر مقدار متناسب با هر اندیس مقدار مشخصی بود . متغیر متناسب با همان اندیس مقدار ثابت بگیره . فکر کنم شبه کدش اینطوری بشه.
فایل A از اکسل فراخوان شود.
برای پارامتر A با اندیس 1 تا N:
اگر مقدار پارامتر i برابر با مقدار a بود :
آنگاه مقدار متغیر iام را برابر با مقدار ثابت b قرار بده
ممنون از راهنمایتون
سلام
یه حلقه بنویسین، بعد داخل حلقه یه شرط بنویسین (که شرط میتونه به صورت دلار باشه، و یا از دستور If استفاهد کنین.
حلقه ها رو اینجا میتونین مطالعه کنین. حلقه رو به صورت loop بنویسین.
من یه مدل ساده دارم که یک متغیر صحیح داره و بقیه مثبت اند
برای محاسبه تابع هدف و محدودیت ها اندیس متغیرها رو تعریف کردم حالا چطور اندیس متغیر صحیح رو جدا کنم
سلام
سوالتون واضح نیست.
سلام و خسته نباشید
ببخشید میخواستم ببینم وقتی یک مساله nlp هستش، چطوری میتونیم از متغیر باینری تعریف بکنیم چون وقتی متغیری رو به صورت باینری تعریف میکنم، ارور میاد که از متغیرهای گسسته فقط در برخی از مسایل میشه استفاده کرد
با تشکر
سلام
ارور رو درست متوجه نشدین، میگه که به جای nlp بزنین minlp
x میزان بار قطع شده(خاموش شده در اثر کمبود تولید) و landa مجموع بار قطع شده تا قبل از زمان t است. متشکر
یعنی متغیرهای مثبت هستن و هر مقداری میتونن بگیرین دیگه.
در این شراطی امکان خطی سازی وجود نداره. باید به همین شکل حل کنین، یا روش های دیگه ای رو برای معادله نویسی به کار ببرید.
با عرض سلام و خسته نباشید.
مسئله ای است که از جمع چند عبارت غیرخطی تشکیل شده است.
Landa(b,t)=e=sum(m$(ord(m)<ord(t)),x(b,m));
Cost=e=sum((b,t),landa(b,t)*x(b,t));
x متغیر و m زیرمجموعه t است. چطوری این قید را خطی کنم؟
ممنون
سلام
مشخص کنید که x,lambda چه متغیری هستن
باسلام
من در برنامم متغیر (RBC(t,n رو تعریف کردم. حالا نیاز دارم بدونم در هر t مقدار ماکزیمم RBC چقدر هست و از اون در معادلات دیگه استفاده کنم.از طرف دیگه در مدلم متغیر باینری هم دارم. به همین دلیل نمیتونم از فانکشن smax که به مدل dnlp نیاز داره استفاده کنم. میشه لطفا راهنماییم کنید چیکار کنم؟
متشکرم
سلام
میتونین متغیری به نام RBCmax رو تعریف کنین که اندیس فقط n داره و مثبت هست. و معادله زیر رو که قراره بزرگترین مقدار RBC رو برای هر t حساب کنه رو به مدل اضافه کنین.
با سلام مجدد
در مورد نظر قبلی یادم رفته بود که تاریخ رو به قبل از ۲۰۱۴ بازگرداندم
این خطی رو که گفتین اضافه کردم ولی باز اعشاری داد متغیر های باینری رو
اگر مشکل این است که مدل نشدنی است باید چیکار کنم؟
با تشکر از وقتی که می گذارید
سلام
کد زیر رو قبل از دستور solveبذارین. و سالور رو هم بذارین رو baron یا lindo ببینین جواب میده یا نه. اگه نداد احتمالا نشدنیه. برا بررسی نشدنی بودن باید مدل، ساختار مدل، تعاریف، کد نویسی، داده ها همه و همه چک بشن.
ببخشید من گمزمو که اپدیت کردم با توجه به لایسنسی که قبلا داشتم الان رو این نسخه همه سالورها دمو شده اند و هنگام ران به من
Exit code=7
میده. لایسنس رو هم سومین لایسنسی که شما تو سایتتون گذاشته بودین برداشتم.
به نظرتون الان باید چیکار کنم؟
سلام
تو گمز help رو بزنین، بعد about رو بزنین. ببینین همون متن لایسنس هست یا خیر.
اگه نبود که نصب نشده. اگه بود تاریخ سیستم رو چک بفرمایین. مشکل از اونه.
با عرض سلام و خسته نباشید
من یه مدل غیر خطی دارم که توش متغیر باینری داره و وقتی با سالور بارون حلش میکنم که متغیر ها رو صفر میده همچنین از عبارت
Optimal optcr=0
نیز در مدلم استفاده کرده ام
ولی وقتی سالوری انتخاب نمیکنم براش به متغیرهای باینری عدد اعشاری میده.
ممنون میشم منو راهنمایی کنید.
سلام
وقتی از سالور استفاده نمیکنین، بصورت دیفالت از dicopt استفاده میکنه. اونم اول سعی میکنه باینری بدست بیاره. زورش که نرسید این محدودیت رو آزاد میکنه و میگه اشکالی نداره بین صفر و یک هم باشه. و به هر جوابی برسه اعلامش میکنه. مدل با این حساب نشدنی هست. کد زیر رو هم به قبل دستور solve اضافه کنین. ممکنه مفید باشه براتون. نسخه گمزتون باید update باشه.
چطور می شود یک پارامتر را به عنوان کران یک summation تعریف کرد؟ در بسیاری از مدل های زمانبندی پروژه به این مورد نیاز هست.
مثلا مجموعه p داریم که بصورت غیر مرتب 2,4,6,20,11 است
و summation قرار است ((f(p(i را بشمارد
سلام
بله همینطور هست.
از دستور شرطی و ord استفاده کنین.مثالای زیادی تو کامنتای بخش معادلات در همین سایت اومده. چک کنین.
سلام خسته نباشید..
ببخشید من تو کدم یک متغیر یک اندیسه رو برابر یک متغیر دو اندیسه قرار دادم ولی برنامه خطای infeasible میده چجور می تونم این خطا رو بر طرف کنم؟؟؟
ممنون می شم اگر کمک کنید
(ptfff (ha,n) $ (ord (n) eq 3) .. pc(ha,n)=e=ptf(ha
سلام
ربطی به تعداد اندیس نداره. ساختار مدل رو بررسی کنین و ببینین کدوم محدودیت ها با هم تضاد دارن. داده ها و کد هم چک کنین.
سلام وقتتون بخیر
ببخشید من یه متغیر باینری میخوام تعریف کنم که به صورت شرطیه یعنی مثلا اگه منبع r به کار j تخصیص پیدا کنه، مقدار ایکس یک بشه در غیر این صورت صفر بشه. چطور میتونم اینو تو گمز تعریف کنم؟ ممنون میشم راهنمایی کنید.
با تشکر
سلام
بالا توضیح دادیم که بخش binary variable
چطور میشه فایلو براتون بفرستم ببینید مشکلش چیه؟
سلام من یه مسأله حمل ونقل چند هدفه نوشتم جواب مسألم صفر در میاد نمیدونم علتش چیه لطفا راهنمایی کنید تشکر
سلام .
ببخشید خواسته من این نیست .
من می خوام D متغییر نباشه و به صورت پارامتر باشه و با دستورات IF و LOOP و ELSE تولید بشه.
من که با معادله راحت می تونم D رو تولید کنم.
ببینید این فرمایش شما ظاهرا شدنی نیست. چون یک قسمت مساوی باز شامل متغیر x هست.
ولی اگه خواسته شما این باشه که فرضا یه بار D=1 بگیریم و مسئله رو حل کنیم و جواب رو ثبت کنیم و یک بار مثلا با D=22 و مسئله حل بشه و جوابا ثبت بشه، میتونین از loop استفاده کنین. به این شکل:
[css]
set s/1*5;
parameter D1(s)/۱ ۱,۲ ۲,۳ ۳,۴ ۱۰,۵ ۲۴/
objective(s)
loop(s,
D=D1(s);
solve my model using…..obj;
Objective(s)=Obj.l;
);
display Objective
با سلام و خسته نباشید.
من یک equation دارم و می خوام این معادله رو حذف کنم ، چون متغییری که برام تولید میکنه می خوام در معادلات دیگه استفاده کنم و در نتیجه چون ضرب و تقسیم متغییر تصمیم مدلم رو غیرخطی میکنه لذا کارم ناتموم می مونه.
هدف من اینکه این متغییر رو از لیست متغییرها حذف کنم و در لیست پارامترها قرار بدم، و با دستور loop وif …. و یا دستورات دیگه تولید کنم.و در بقیه جاها استفاده کنم. و میدونم قابل انجامه ولی بلد نیستم .
این متغییر که می خوام پارامتر بشه اعداد -(D) -1و 2 و 3و 10و 24 و …کلا اعداد مثبت وصحیح هستن.و از طریقSUM یک پارامتر که صفر و یک (0و1) هستش – (X) و خودش با دستور loop وif وelse تولید شده بدست میاد . معادله اینه:وبه این صورت عمل میکنه تعداد متغییرهای X ی که برای i ها مقدار 1 به خودشون گرفتن رو در هر t مثلا از t01 تا t14 جمع میزنه .و میگه مثلا تو t01 مثلا D=10 و تو t02 مثلا D=22 و …t14 مثلا D=30 :
سلام
اگه درست متوجه منظورتون شده باشم. (فرض کنیم اندیس نداریم. برای اندیس دار میتونین از روش گفته شده در زیر ایده بگیرین).
فرض کنیم یه متغیر به نام D داریم که مقادیری که گفتین رو باید تولید کنه. یه متغیر به نام y(i که باینری هست تعریف میکنیم که i به صورت 1*5 تعریف شده. حالا میخوایم D رو به گمز بفهمونیم. اول میایم D رو به عنوان integer variable تعریف میکنیم. و پارامتر Q(i) رو به صورت
و دو محدودیت زیر رو به بخش equaion اضافه میکنیم.
با سلام و عرض ادب
من مساله ای دارم که با rmiqcb حل میشه منتها متغییر باینری من عدد اعشاری میشه
آیا راه حلش فقط اینه که مساله رو خطی کنم و با mip حل کنم که متغیرهای باینری اعشاری نشن؟
سلام
اون r که قبل از نوع مدل نوشتین باعث میشه که مدل به صورت آزاد شده حل بشه و فرض mip بودن رو زیر پا بذاریه. نوع مدل رو بذارین miqcp یا minlp و مدل رو حل کنین و مجددا ران کنین و نتیجه رو بگین که در موردش صحبت کنیم.
الان که این کارو کردم کل جواب ها صفر شده
اوکی. حالا مقادیری که solver status و model status به خودشون گرفتن رو اینجا بذارین. ممکنه جواب نشدنی باشه،
سلام .خسته نباشید .من تو این معادلات هم ارور 56 رو دارم و نمی خوام مدل رو غیر خطی کنم .
U(y,t)متغییر باینری – t_on(y,t) متغییر مثبت(1و2و3و4و5و6و….)و t_off(y,t) متغییر مثبت (1و2و3و4و….)و MU(y) و MD(y) پارامتر هستند و مقدارشون مشخص .
آیا راهی داره که مدل رو خطی نگه دارم .ممنون می شم اگه راهنمایی کنین.تشکر
سلام
خطای 56 یا 256؟ اگه 56 هست متن ارور رو بنویسین لطفا.
مدل به این شکلی که نوشتین غیر خطی هست. برای خطی کردن ضرب یک متغیر صفر و یک و یک متغیر عدد صحیح به شکل زیر عمل کنین. فرض کنیم x صفر و یک باشه، و y هم عدد صحیح.
توضیحی نیاز داشتین بفرمایین که خدمتتون عرض کنم.
سلام خسته نباشید .
من کامل متوجه نشدم . من الان رو این دو تا equation مشکل دارم . اینها رو به چه شکل بنویسم . اگه براتون امکانش باشه . دوتا مشابه هستن یکی شون رو اگه برام تو محیط خود نرم افزار بزارین ممنون می شم .
الان wt=xtyt نوشتین t رو منظورتون همون اندیس (set) هستش . بین xt و yt علامت * داره .
wt من اینجا 0 هستش . و = رو باید =g= قرار بدم .
یا خیر اول اینه رو که نوشتین بنویسم و بعد کد خودم رو .
تو شماره 2 که گذاشتین بین y و LO علامت ضرب هست یا LO خودش دستوره . بینxt و yt علامت * هستش بزرگتر کوچکتر ها که نوشتین به زبان گمز بنویسم =g= و =l=
یک خط کدم رو برام از خود محیط گمز بزارین خیلی شفاف میشه برام.
ممنون.
بله دیگه به زبان گمزه. من مفهوم فرمولیش رو نوشتم. مقادیر LO و UP یعنی حداقل و حداکثر مقداری که برای متغیر y ممکن هست. شما به عنون یه زیر وند بشناسینش. t هم اندیس هست. اون بینا هم که گفتین ضرب هست. YLO یه عدده
با سلام . ممنون از راهنمایی های مفیدتون.
خطا 56 هستش . Endogenous operands for * not allowed in linear models همون خطای مدل خطی .
سلام آقای محمودی خسته نباشید و ممنون .
اگه براتون امکانش باشه تو کانال تلگرامی سایت گمز بوک در باره خطی یا غیر خطی بودن مدل توضیح بدین یا منبعی معرفی کنین که بحث خطی یا غیر خطی رو شفاف تر کنه. نمیدونم آیا همون بحث تو ریاضیات هستش یعنی معادلات خطی یا غیر خطی.تو ریاضیات که معادلات خطی رو می شه ساده حل کرد ولی معادلات غیر خطی از روش های تکرار حل میشن که الگوریتم و نرم افزارها هم اصلا بااین هدف تولید می شن . اگه شما مفهومی تر توضیح بدین خیلی ممنون می شم .تشکر
سلام
تو تحقیق در عملیات و جبر خطی و غیر خطی، ما وقتی میگیم یه مدل غیر خطی هست، منظورمون اینه که خطوطی که با اون معادلات رسم میشن شامل خط مستقیم هستن و همواره فضایی که تشکیل میدن محب هست.
تو غیر خطی این فرض نقض میشه. برای اینکه بدونین مدل غیر خطی چی هست. یه سری نشونه داره که هر کدوم رو اگه مدلتون داشته باشه، میشه اسمش رو گذاشت غیر خطی. این نشونه ها شامل اینا هست: 1- ضرب و تقسیم دو متغیر تصمیم در هم 2- وجود متغیر تصمیم در مخرج، زیر توان، در توان، زیر رادیکال، در توابع غیر خطی مانند سینوس، توابع نرمال و نمایی، 3- تعدادی از مدلها هم به ظاهر خطی هستن. ولی شرایطی توشون ممکنه تعریف شده باشه و مدل رو غیر خطی کنه.
برای منبع، میتونین کتابای تحقیق در عملیات (عادل آذر، زاهدی سرشت، مهرگان، آرایانژاد، مرتضی قمی) رو بخونین.
انگلیسی هم به وفور یافت میشه. لیبرمن منبع قدیمی و البته خوبی هست.
سلام خسته نباشید
من وقتی معادله رو به این شکل می نویسم ارور 55 رو میده و میگه مدل با مدل خطی قابل حل نیست و غیر خطیش کن . من می خوام مدلم خطی بمونه. چه کاری می تونم بکنم .البته میتونم اعداد بدست آمده از یک متغییر رو خارج گمز با هم تقسم کنم ولی اگه راه حل داشته باشه ممنون می شم .
مشکل :
3 تا متغییر دارم . در یک طرف مساوی یک متغییر و در طرف دیگر مساوی دو تا متغییر دیگه رو بهم تقسم کردم و ضرب در 100 کردم .فکر کنم ضرب در 100 چون عدد مشکلی نداره و ارور فقط برا تقسم دوتا متغییر هستش .اگه دو تا متغییر بود می شد باز یکی رو تبدیل به ضرب در طرف دیگه مساوی کرد و مساله رو با حالت خطی حل کرد چون سه تا متغییره نمی دونم چه کاری می شه کرد .
مثلا نمونه معادله 100*x(t)=e=(y(t)/d(t))
سلام
نوع متغیر ها چی هست؟ صفر و یک؟ پیوسته؟ برای هر سه مورد نوع متغیر رو توضیح بدین ببینم چاره داره یا نه.
سلام خسته نباشید.
هیچ کودوم متغییر باینری نیستند و همشون متغییر مثبت هستند.d(t)ها عدد بدون اعشار (مثلا 10و20و25و150و200و…..)و دو تای دیگه دارای رقم اعشار هستند(مثلا 50.3و40و102و10.2و10و9و1000.5و1500و…..) .
مدل شما ظاهرا خطی نمیشه و باید به صورت غیر خطی حلش کنین. البته اگه تونستین خلاقانه این معادله رو به شکل دیگه ای بنویسین (یا حذفش کنین اگه به صورت محاسباتی هست صرفا). در غیر اینصورت باید غیرخطی حلش کنین و راهی ندارین احتمالا
سلام
از سایت خوب و راهنمایی های بسیار عالی شما ممنونم
سوالی از خدمتتون داشتم
متغیری دارم که در 24 ساعت تعریف شده
چطور میتونم order مربوط به ماکزیمم مقداری که به خودش میگیره رو تعیین کنم
به عبارتی در چه ساعتی این متغیر ماکزیمم میشه
ایا دستور خاصی براش وجود داره؟
ممنون میشم راهنماییم بفرمایید
سلام
فرض کنیم یه متغیر دارین به اسم x(t که اعداد مثبت رو می تونه به خودش بگیره. حالا شما میخواین بیشترین مقداری که پس از حل مدل برای این 24 تا x تولید شده به دست بیارین.
یه راهش اینه که برین تو خروجی نگاه کنین و هر جا بیشتر بود همون رو ملاک قرار میدین. یه راهش اینه که یه متغیر به اسم y تعریف کنین و محدودیت y>=x(t رو به مدل اضافه کنین و y رو display کنین.
اگه سوالتون این بود اوکی. اگه نه که توضیح بیشتری بدین. تشکر
با سلام
چطوري ميتونم يه مدل رو به صورت ديناميكي حل كنم؟
جوري كه مثلا اولين باري كه تابع هدف بهينه ميشه و متغيرها عدد به خودشون ميگيرن ، اين متغير ها با همان اعدادي كه در حل اول بدست امده اند بعنوان ورودي در بهينه سازي همان تابع هدف (يعني در مرحله دوم) ثابت شوند؟
.دقيق ترش ميشه بهينه سازي شبه ديناميكي.
خيلي ممنون از پاسخي كه ميدهيد.
سلام
از دستور loop استفاده کنین. و solve رو بذارین تو یه حلقه و این مفهوم رو به راحتی پیاده سازی کنین.
با سلام
ببخشید یه سوال داشتم تعریف توابعی مثل exp در گمز چطوریه؟
همینطوری بنوسیسم؟
سلام
این صفحه رو بخونین.
با سلام و عرض ادب
میخواستم بدانم چطور می توانم دو متغیر را در یک رابطه ی شرطی قرار دهم؟
سلام
با دو روش، یک استفاده از تابع ifthen که تعدادی از سالورها نظیر sbb پشتیبانیش میکنن.
روش دوم خطی سازی هست. که سرعت حل مدل رو بالا میبره. در صورتی که مقداری وقت بذارین و امکان خطی سازی باشه از این روش استفاده کنین. تو این روش، معادله رو با تعریف متغیرهای جدید و کمکی و محدودیت های هم ارز مجددا تعریف میکنین. و اون شرطها رو به صورت معادله یا محدودیت بیان میکنین.
یعنی این محدودیت شرطی را به صورت معادلات خطی بیان کنم؟
بله. مقداری فکر و خلاقیت میخواد معمولا. به احتمال زیاد از پسش بر میاین. ممکنه خطی هم نیشه. ولی باز از این حالت شرطی بیاد بیرون خوبه.
سلام
چطوری میتونم متغیر هایی که مقدار صفر گرفتن تو خروجی مشاهده بکنم؟
در واقع چون کد با اکسل لینک هست میخوام متغیرهایی که صفر شدن هم ببینم و در خروجی اکسل جاشون خالی باشه(مقدارشون صفر باشه)
سلام
خروجی رو به اکسل فرستادین؟ اونجا صفر نشون داده نمیشه؟
سلام
من اولین باره دارم با گمز کار میکنم لطفا اساتید راهنمایی کنین
من سه تا متغیر دارم که در 4 ساعت مختلف ، در هر ساعت باید مجموعشون یک عدد ثابت باشه و هر کدوم از این متغیرها یه تابع درجه دوم براش وجود داره که باید مجموع این توابع حداقل بشه
خواهشا راهنماییم کنین
در حقیقت من میخوام یه مساله unit commitment رو با استفاده از روش lagrange relaxsation در گمز حل کنم که مربوط به درس بهره برداری ارشد برق قدرت است
ممنون
سلام
سوال شما مشخص نیست. ولی تو مسئله ی unit commitment ما یک تابع هدف کوادراتیک داریم که مجموعش برای باس ها حساب و مینیمم میشه. این 3 متغیر هم که فرمودین باید معادله ای که مد نظر دارین رو اگه شامل پارامتر و متغیر هست تو محدودیت ها بنویسینش. فقط مقداری دقت کنین که تو کد نویسی گمز و تحقیق در عملیات، ما داده ی ورودی رو پارامتر و داده ی خروجی و مجهول رو متغیر یا متغیر تصمیم میگیم.
سلام و عرض ادب
من یک سوال فوری داشتم، اگر متغیر باینری(BC(c,si تعریف بشه و متغیر مثبت (C(c,si تعریف بشه، لازمه برای صفر نشدن BC رابطه ای بین متغیرا برقرار باشه؟
سوالم اینه که اگر C مقدار داشته باشه، BC حتما مقدار 1 میشه درسته؟
متشکرم
سلام
بسته به مفهوم و ساختار مدلی که باهاش سروکار دارین، ممکنه درست باشه و یا خیر. ممکنه اصلا رابطه ای هم با هم نداشته باشن. پس لطفا تعریف این دو متغیر رو شرح بدین.
سلام مممنون از سایت عااااااااااااااالی — من یه سوال داشتم — وقتی دو متغیر پیوسته رو در یک معادله در هم ضرب میکنم مسئله غیر خطی میشه (همچنین شامل باینری هم هست) و لذا از MINLP استفاده میکنم. اما باز هم ارور exit code3 رو میده. نمیدونم چرا؟ مگر وقتی مسئله غیر خطی داریم MINLP جواب نمیده؟ البته مطمعن هستم که مشکل ضرب ددو متغیر پیوسته هست. چون با حذف اون معادله مسدله جواب داره.
ممنون
سلام
نه مشکلی با این نوع مسئله نداره. گمز رو ببندین، مجددا ران کنین. و متن دقیق خطاهایی که وجود داره رو اینجا بذارین.
سلام
تشکر از مطالبتون
در قسمت ۴٫ مقدار کنونی یک متغیر دستور داده شده اشتباه است.لطفا اصلاح فرمایید.
دستور از ۳٫ ثابت کردن یک متغیر
* How to assign a attribute to the variables
variable x ;
x.fx=5 ;
variable y(j) ;
y.fx(j)=10; کپی شده
هم چنین عملکرد display y.scale چه چیزی میباشد
با سلام و تشکر از دقت نظر شما. اصلاح شد.
ما میتونیم به گمز دستور بدیم که یه متغیر پیوسته رو scale بکنه. یعنی مقیاسش رو برای ما تغییر بده. مثلا یه جا تو مدل میتونیم 10*x داسته باشیم، حالا اگه x.scale رو بذاریم 0.5 اون وقت مقایس x رو اومدیم دو برابرش کردیم، و وقتی scale رو نمایش بدیم با دستور display میاد همون 0.5 رو به ما نشون میده. این کار یه سری کاربرد داره که مقداری باید در مورد model attributes مطالعه کنین. چون علاوه برا متغیرها، برای محدودیت ها و مدل ها هم میشه این عبارت رو با مفاهیم مختلف مورد استفاده قرار داد.
این کلمات رو تو گوگل سرچ کنین.
gams+model attributes+scale
ممنون از پاسخ گویی سریع شما.
هم چنان همان حالت است چیزی تصحیح نشده یکبار دیگر باز بینی کنید ممنون میشم
ببخشید اشتباه شد بله تصحیح شده خیلی ممنون
خواهش میکنم. پیروز باشید
سلام ببخشید چطور می توان تعداد کل متغیرها و پارامتر ها را به دست آورد
سلام
برای متغیرها میتونین از دو ویژگی numvar و numDvar استفاده کنین. که اولی تعداد کل متغیرها و دومی تعداد کل متغیرهای گسسته هست.
کافیه بعد از دستور solve کد زیر رو قرار بدین. mymodelname اسم مدل شما هست که تو دستور model نام گذاری کردین.
برای پارامترها هم سوالتون گنگ و گیج کننده هست و بی فایده. حتی اگه تعداد رو هم بدونین فک نمیکنم براتون کاربردی داشته باشه. ولی محض اطلاع، این پست رو بخونین شاید تونستین ازش استفاده ای بکنین.
خیلی ممنون از پاسخگوییتون
شرط y رو اعمال میکنه
با سلام و خسته نباشید
من مدلمو نوشتم و خطاهاش رو هم رفع کردم اما الان بعد از حل میبینم که بعضی از شروطی رو که گذاشتم و یا محدودیت هایی که تعریف کردم توی جوابا اعمال نشده، میخواستم ببینم کدی که به صورت زیر برای متغیرها وارد کردم و زیرش شرطش رو نوشتم درسته؟
مثلا xو y رو که باینری گذاشتم جوابای بین صفر و یک می دهد و یا جاهایی که d(i,j) از ۳۰ بزرگتره x رو صفر نمیده در حالی که من این شرط رو تعریف کردم که بزرگتر از ۳۰ باشه صفر بشه.
هستش x برابر با صفر نشده
با تشکر از سایت خوبتون
سلام
مچکرم.
برای شرطی که برای x نوشتین، باید به جای .L بنویسین .fx
برای y هم شرط مشخص نیست چی نوشتین
سلام ببخشید من در قسمتی از مدلم این عبارت را دارم
objective..z=e=prod(i,u(i));
اگر بخواهم اینها به صورت توانی در هم ضرب بشن باید چیکار کنم؟
یعنی هر u(i) با یک توان متفاوت در هم ضرب بشن
ممنون
سلام
یه پارامتر a(i) هم تعریف کنین که توان رو نشون بده. و به جای u بنویسین u(i)**a(i)
ببخشید منظورم این بود:
اگر در قسمت معادلات بخواهیم معادله ای روی همه موارد یک اندیس به غیر از یک مورد از آن اندیس اعمال شود چطور باید عمل کنیم؟ مثلا در برنامه زیر:
eq(busno).. qp(busno)-loaddata(busno,’pd’)=v(busno)…
به جای همه مقادیر در اندیس busno، می خواهم مقدار شماره 8 از این اندیس را از معادله فوق جدا کنم. در اینصورت اصلاح شده این معادله چطور باید نوشته شود؟
با تشکر از پاسخگویی شما
به جای =8 بنویسین ne 8
دقت کنین که:
ne=not equal
ممنونم از لطفتون
اگر در قسمت معادلات بخواهیم معادله ای روی همه اندیس ها به غیر از یک اعمال شود چطور باید عمل کنیم؟ مثلا در برنامه زیر:
eq(busno).. qp(busno)-loaddata(busno,’pd’)=v(busno)…
به جای همه موارد اندیس busno، می خواهم یک مورد را جدا کرده و در معادله ای دیگر (با اعمال تغییرات لازم) اجرا کنم.
سلام
مثلا اینجوری:
eq(busno)$(ord(busno) =1)
دلار یعنی به شرطی که و ord هم یعنی شمارنده Busno، اینجا اولین باس که تعریف شده رو مد نظر قرار داده، شما میتونین به جای 1 عدد مورد نظرتون رو بذارین. بقیه محدودیت تغییری نمیکنه
سلام ببخشید من تابع هدفم به صورت حاصلضرب چهار تا معادله درجه دو هست من به این صورت نوشتم
(objective..z=e=Prod(i,a(i)*x(i)*x(i)+ b(i)*x(i)+c(i
با استفاده از تابع prod ولی گمز متوجه نشده جواب اشتباه میده میشه راهنمایی ام کنید چطور وارد کنم a b c مقادیر معلوم هستن و x متغیر تصمیم
ممنون
سلام
نه اشتباه نمیکنه.
برای اطمینان خاطر به صورت جدا همونا رو ضرب کنین، به جای prod، بعد نتیجه رو ببینید. به این هم دقت کنین که این کار مدل رو به شدت غیر خطی میکنه احتمالا
با سلام.
در حل مسائل عدد صحیح در صورتی که مقدار متغیر عدد صحیح از 100 بیشتر شود، نرم افزار به طور خودکار حد بالای آن را 100 در نظر میگیرد.حال سوال اینجاست:
1. چرا با وجود اینکه باید مقدار متغیر آزادانه و بهینه تعیین شود نرم افزار چنین کاری را میکند؟
2. مقدار مناسب برای حد بالا چگونه تعیین شود؟
با تشکر
سلام
سوال اول: این یه تکنیک نرم افزاریه که سریعتر به جواب برسه. بیشتر مسائلی که مورد بررسی قرار میگیرن معمولا تو اسکیل کوچیک شده اعداد مورد ارزیابی قرار میگیرن. بابت همین بیشتر اعداد کوچیکتر از 100 میشن. قطعا منطقی نیست وقتی مقدار بهینه یه متغیر حول و حوش 20 هست، نرم افزار بیاد اعداد بالاتر از 500 رو هم براش تست کنه ببینه جواب چجوریه.
سوال دوم: x.up=1000;
سلام. وقت شما بخیر.
من چند سوال در رابطه با کد نویسی داشتم :
1. پارامتری به شکل Pmin j که min به عنوان اندیس در بالای p و j اندیس در پایین p نوشته میشه، چطور در گمز تعریف می شود و همچنین برای علامت max آن چطور؟ در این مساله P با اندیس ijدر پایین p نیز به عنوان پارامتر و Pj به عنوان متغیر تعریف می شود.
2. برای تعریف متغیری که به شکل زیر نوشته شده، دستور آن در گمز چگونه است و زمانی که شرطی نیز در توضیحاتش ذکر شود چگونه نوشته می شود؟
آیا این شرط باید در محدودیت تعریف شود؟
3. زمانی که در محدودیت در قسمت نوشتن سور عمومی ذکر شود که j عضو sk باشد و این عضویت در چندین محدودیت تفاوت داشته باشد و یا اینکه j عضوی از اشتراک دو مجموعه هست و موارد مشابه این چنینی، چطور نوشته می شود؟
با تشکر فراوان
سلام
1- اون Min, max اندیس نیستن. فقط تعریف کنین Pmin(j و Pmax(j
2- برای تعریفش که عادی تعریف میشه و شرطی روش نمیشه گذاشت تو قسمت تعریف. برای شرط هاش باید تو هر محدودیتی که دلتا استفاده میشه شرط هم گذاشته بشه.
3- این تفاوتی که فرمودین تعیین کننده ست و بهش دقت کنین. من فکر میکنم این دو تا تاپیک زیر رو بخونین روش کار دستتون بیاد.
اجتماع مجموعه ها
مجموعه های چند بعدی
از پاسخگویی شما متشکرم. اگر امکانش وجود دارد، محدودیت زیر را که هم دلتا و هم عضویت در مجموعه ها برای سور عمومی وجود دارد از نظر کد نویسی اصلاح نمایید. سپاس فراوان
برای دلتا از شرط if باید استفاده کرد؟
سلام
خیر. از دلار باید استفاده کنید. مشروط به اینکه pmax, pmin جفتشون پارامتر باشن.
سلام.
خسته نباشید. منم تو خطی سازی سوال دارم. راستش معادله من از حاصلضرب یک متغیر پیوسته در عدد صحیح تشکیل شده. متغیر پیوسته یک احتمال هست که بین 0 و 1 هست. آیا برای این حالت که یکی از متغیرها دارای کران پایین صفر و کران بالای 1 باشه، راه حلی سراغ دارین؟
خیلی خیلی ممنونم.
سلام
حضور ذهن ندارم.
من این کار رو نکردم. ممکنه بشه (که احتمالش کمه). ولی من چیزی به ذهنم نمیرسه. ببخشید.
ممنونم از پاسختون.
با سلام و احترام
آیا کسی از دوستان در مورد نحوه نوشتن کد گمز با استفاده از روش زیر گرادیان آشنایی دارند؟
با سلام وادب
جناب محمودی من تو مدلم یه متغیر پیوسته دارم ، که حد بالای یه سامیشن هم قرار میگیره ! ممکنه راهنمایی کنید که چجوری میتونم خطیش کنم؟
سلام
تو اینجور مواقع باید یه حد بالا برای متغیرتون اول پیدا کنین. بعد یه متغیر صفر و یک تعریف کنین. بعد با اضافه کردن یکی دو تا محدودیت اون متغیر رو از حد بالا ورش دارین. مقداری توضیحاتش زیاده که تو کامنت نمیشه خیلی خوب توضیح داد. ایمیل بزنین که براتون بفرستم.
با سلام و عرض ادب
من در مدلم ضرب دو عدد صحیح رو دارم که مدل من رو غیر خطی کرده. ممنون میشم اگر بنده رو راهنمایی کنید که برای خطی سازی چه کاری انجام بدم؟
با تشکر
سلام
روش ها بسیار محدود هستند تو این حوزه. عدد صحیحاتون صفر و یک هم توش هست یا هر دو عدد صحیح هستن مثلا 4 3 2 اینا رو میتونن بگیرن؟ پاسخ سوالتون منوط به جواب این سوال بنده هست. لطفا پاسخ بدین تا موضوع روشن بشه.
سلام
ممنون از پاسخگوییتون. فقط صحیحند ولی حد بالا و پایینشون مشخصه. یکیشون 0 تا 1000 و بعدی 0 تا 10.
سلام
ببینید تو این حالت خطی سازی مقداری دردسره. تو بهترین حالت باید یه راه خلاقانه به خرج بدین و یا اینکه مثلا شرایط دیگه ای اگه تو مسئله هست رو لحاظ کنین.
راه حل کلی و نسبتاً مناسب برای اینکار به شکل زیر هست: (این راه حل رو بنده به کار بردم قبلا و روش مناسبی هست- البته بستگی به ساختار مدل داره که چقد جواب بده)
اولا شما باید خطی سازی ضرب دو متغیر صفر و یک رو یاد بگیرین.
تو مرحله ی بعد این دو متغیر صحیحی که دارین رو باید به مجموع چند متغیر عدد صحیح تبدیل کنین. برای تبدیل متغیر عدد صحیح به متغیر صفر و یک دو راه دارین. که راه دومی که عرض میکنم چون تعداد متغیرهای کمتری رو تولید میکنه از لحاظ زمانی به صرفه تر هست. جفتشون هم تو کتاب لیبرمن کامل توضیح داده شدن. تو لینک زیر کتاب لیبرمن هست (اگه اشتباهی لینک رو گذاشتم بگین که اصلاح بشه) تو این کتاب تو بخش عدد صحیح انواع خطی سازی ها و تبدیلات رو نوشته. یکی از اون قسمت ها به این شکله که هر متغیر رو به صورت sum(2^t*y(t) میکنین. همونو پیدا کنین و عملی کنین.
دانلود کتاب لیبرمن
حالا متغیرهای شما تبدیل شدن به مجموع اعداد صفر و یک. حالا کافیه که ضرب این ها رو بیاین خطی کنین و تمام میشه کار
مرسی از راهنمایتون
مشکلم حل شد.
خواهش میکنم.
سلام
چطور میشه مقدار بهینه یک متغیر که از مرحله قبل به دست اومده برای استفاده در مراحل بعدی ثابت کرد؟
سلام
فرض کنیم متغیر شما x هست. اگه با همون نام قراره تو مرحله بعدی هم استفاده بشه، کافیه بعد از دستور solve اول این کد رو بنویسین:
x.fx=x.l;
اینجوری مقدار بهینه رو میگیره و فیکس میکنه و از این لحظه به بعد مقدارش همینقدره.
بعد از 1 ساعت ران میگه نشدنیه
تمام سطور تابع هدف رو غیرفعال کردم و فقط سطر هزینه اولیه احداث دپو ،فعال کردم
مسئله در کم تر از 10 دقیقه حل شد
پس با محدودیت ها مشکل نداره…
به نظرتون دلیل اینکه با تابع هدف مشکل داره چی میتونه باشه؟
درضمن مدلم رو خطی هم کردم، بعد از خطی سازی هم جواب نشدنی بدست میاره….
در حالی بقیه مثال ها رو جواب یکسان با مدل غیرخطی میدهد(در تعداد گره های کم)
سلام
الان بدون توان بعد یه ساعت میگه نشدنیه؟ اگه آره که زمان حل رو بیشتر کنین شاید جواب داد. از آپشن reslim استفاده کنین. تو سایت و کامنتا زیاد بحث شده در موردش.
ممکن هم هست مدل این جواب رو داده باشه: infeasible or unbounded و این یعنی مدل شما احتمالا جواب بیکران داشته باشه. رو علامت های مثبت و منفی بخش های مختلف تابع هدف هم فکر کنین.
سلام
از reslim استفاده کردم مشکلم حل شد
خیلی خیلی ممنون
خواهش میکنم.
سلام
من یک مدل مکان یابی تخصیص را در گمز نوشتم
مدل غیرخطی است و با بارون حل کردم
زمانی که تعداد گره ها حداکثر 6 می باشد در زمان کم تر از 1 دقیقه حل می شود
ولی وقتی تعداد گره ها را بیش تر می کنم،جوابی برای مسئله بدست نمیاد
نشدنی میشه
این به این معنیه که مدلی که نوشتم غلطه؟
سلام
ممکنه غلط باشه. ممکنه داده ها مشکل داشته باشن و ممکنه سالور نتونه حل کنه. چقد طول میکشه 7 گره اینا؟
6 گره را حدودا یک دقیقه طول میکشه حل کنه
از کجا بفهمم مشکل از کجاست؟
7 گره رو چند دقیقه؟ مثلا اگه یه ساعت طول میکشه بعد میگه نشدنی، امیدی هست که به جواب برسه.
ولی اگه زود بگه نشدنیه که باید تحلیل کنین که چرا اینجوری شده.
روش خاصی برای فهمیدن این مشکل نیست. معمولا این کارا برای تحلیل این معضل انجام میشه:
بررسی مجدد کد، بررسی مدل، تطبیق مدل با مقالات پایه (خیلی مهم)، بررسی داده ها و در صورت امکان استفاده از داده های استاندارد منتشر شده توسط مقالات پایه. حل دستی
برای بررسی ریز مدل، معمولا باید اول یه چندتا محدودیت رو تو مدل در نظر بگیرین و حل کنین مدل رو. مدل که جواب داد، یه محدودیت دیگه هم اضافه میکنین. این کارو تا جایی ادامه میدین که دیگه گمز بگه نشدنیه مدل. اونجاست که باید تحلیل کنین که این محدودیتی که الان اضافه کردین با چه محدودیت یا محدودیتهایی تناقض داره. دیگه خلاصه باید تحلیل بشه. خیلی شیک و دقیق.
البته این قصه سر دراز داره که تقریبا 95 درصد مدلها اول این مشکلات رو دارن و کم کم رفع میشن.
با سلام اگر بخواهیم di=(0,…,0,1,0,…0)که اندیس iدر طول مسیله تغییر میکند را وارد مدل کنیم در کدام بخش باید نوشته شود؟
سلام
نقش این b چطوریه تو مدلتون؟ داره چیکار میکنه؟
اگه متغیره که میتونین به شکل باینری تعریف کنین و مجموع sum(i,d(i)) رو برابر با یک بگیرین و به عنوان یه محدودیت در نظر بگیرین. یا اینکه به عنوان SOS تعریفش کنین و براش حد بالای 1 در نظر بگیرین. اگه اشنایی با SOS ندارین پست زیر رو بخونین.
تعریف متغیر SOS در گمز
اگه پارامتره که باید ببینیم نقشش چی هست.
سلام
امکان ضرب 3 متغیر تصمیم در گمز وجود دارد؟
مدلم در گمز ران میشه اما جوابی که میده منطقی نیست
هم چنین در قسمت equation هم متغیرهای تصمیم دو به دو در هم ضرب شدند
یعنی متغیر u*h و h*x در حالی که در تابع هدف هر 3 متغیر در هم ضرب شده بودند
u*x*h
سلام
بله امکانش هست به تعداد زیاد هم ضرب کنین. فقط ممکنه زمان حل، دقت حل و توانایی حل بیاد پایین. از چه نظر منطقی نیست؟
بله اینجوری نشون میده، صفر ضربدر اون دو تا متغیر دیگه احتمالا. نگران اونجاش نباشین
اگر متغیر تصمیم h مقدار 1 بگیرد باعث کاهش هزینه میشه، اما مقدار h را برابر صفر در نظر میگیره
به طور کلی بود یا نبود این متغیرتصمیم تاثیری بر جواب ندارد
سلام
محدودیت هایی که روی h لحاظ شدن هم مهمن. شاید محدودیت ها یه جورین که باعث میشن که h همیشه صفر بشه
ببخشید میشه نحوه تعریف متغییر هایی که مقدار آنها صفر یا یک هستش رو توی لینگو چطوری میشه تعریف کردرو بیان کنید
سلام
از رویه ی زیر باید استفاده کنین:
@BIN( variable_name);
سلام، میخواستم بپرسم من یه متغیر دارم (c(t)) که به ازای زمان های مختلف(t)، تغیر میکنه مثلا:
c(t)=[4+m 4 4-m] مثلا در ساعت اول(t=1) c برابر درایه اول، در ساعت دوم c برابر درایه دوم و..
m تو این ماتریس یه متغیره
اینو چطور تو گمز بنویسم؟
سلام
منظورتون از متغیر پارامتر هست یا متغیر؟ مثلا t اندیسه، m چی؟ m متغیره یا میدونیم مقدارش چنده؟
سلام ممنون مبشم بگید اینو چطوری تو گمز کد کنم؟
x2 – x1 < 0
سلام
میتونین بنویسین:
x2=L=x1-eps;
که eps یه عدد کوچیک هست.
عرض سلام و خسته نباشید.
راستش من میخواستم نتایج متلب و گمز رو مقایسه کنم. قصد دارم workspace های متلب رو برای هر سایز ذخیره کنم و داده ها رو با استفاده از دستوری از متلب به گمز انتقال بدم. اما این دستور رو پیدا نکردم. ممکنه راهنمایی کنید؟؟
خیلی ممنون از وقتی که میگذارید.
سلام
خواهش میکنم.
میتونین داده هایی که تو متلب تولید میشن رو بفرستین تو اکسل، بعد تو کد گمز از اونا استفاده کنین. جفت این کارا رو بلدین؟
آها راستش هنوز كدم كامل نشده. اما من قبلا از اين كد متلب به گمز استفاده كرده بودم كه الان پيداش نمي كنم.
تلاشتونو بکنین، مشکلی پیش اومد در خدمتیم.
سلام جناب مهندس محمودی
ممنون از پاسختون
این فایل log که فرمودید بزارم ببینید:
— Job IRP.gms Start 01/19/03 18:13:23 24.1.2 r40979 WEX-WEI x86_64/MS Windows
GAMS 24.1.2 Copyright (C) 1987-2013 GAMS Development. All rights reserved
Licensee: GAMS / MPSGE Workshop G050310:1251AJ-WIN
Ann Arbor, MI 2005 DC5176
License for teaching and research at degree granting institutions
— Starting compilation
— IRP.gms(146) 3 Mb
— Starting execution: elapsed 0:00:00.018
— IRP.gms(53) 4 Mb
— Generating MINLP model IRP
— IRP.gms(143) 6 Mb 16 Errors
— 69 rows 65 columns 277 non-zeroes
— 408 nl-code 75 nl-non-zeroes
— 16 discrete-columns
*** Model structure has 16 data errors
— IRP.gms(143) 4 Mb
*** SOLVE aborted
— Executing BARON: elapsed 0:00:00.079
— IRP.gms(143) 4 Mb 16 Errors
*** Status: Execution error(s)
— Job IRP.gms Stop 01/19/03 18:13:23 elapsed 0:00:00.093
Exit code = 3
سلام
دلایل زیادی میتونه داشته باشه. از جمله عدم توانایی بارون. ارسال کنین کد رو به ایمیل سایت لطفا.
سلام مهندس محمدی امیدوارم خوب باشین ببخشین ی سوال دارم؟
در متلب با ساختار cell میشه یه آرایه که هر کدوم از عناصر خودش ی آرایه دیگه باشه تعریف کرد آیا چنین ساختاری در گمز وجود داره؟ اگه نیست ودر صورت لزوم به چنین ساختاری چطور باید این کار رو انجام بدیم یعنی فرض کنید یک ارایه داریم مثلا 30 در 30 و درهر کدوم از سلولای ارایه می خواهیم ی آرایه 35 در 35 ذخیره کنیم ودر عملیات بعدی ازش استفاده کنیم. ممنونم
سلام
برای اینکار کافیه فقط اندیس اضافه کنین. مثلا یه پارامتر تعریف کنین که چهار اندیس داشته باشه. a(i,j,k,m)
اون cell تو متلب دقیقا همین کار رو انجام میده. یعنی چهار بعدی میکنه پارامتر رو.
سلام
مدل یه مسئله ان پی هارد تو سایز خیلی کوچیک رو تو گمز نوشتم. ولی حل نمی کنه و مقادیر متغیرها رو نمی ده و خطایی هم نمی ده. یعنی تو قسمت خروجی فقط بخش های زیر رو داره:
compilation
equation listing
equation
column listing
column
model statistics
و بقیه بخش ها مخصوصا بخش display رو نشون نمی ده.
لطفا کمکم کنید. ممنون می شم.
یه سوال دیگه
متغیر x(i) با توجه به مقادیر متغیرهای y(i) و a تا f به صورت زیر مقدار می گیره:
x(i)=a(i) if y(i)=d(i)
x(i)=b(i) if y(i)=e(i)
x(i)=c(i) if y(i)=f(i)
لطفا راهنمایی کنید چه طور باید تو گمز وارد بشه. البته معادلات اصلیش پیچیده تر از این هست و اینجا ساده کردم.
سلام
یا معادل خطی شده ش رو بنویسین، یا از دستور ifthen استفاده کنید. این دستور توی سایت هست و جستجو کنید تو کامنتا
سلام
لایسنس دارید؟
این پست رو بخونین
سلام. ممنون که پاسخ دادید.
بله از لینکی که گذاشتید برا لایسنس، قبلا استفاده کرده ام و همه سالور ها full هستند.
ولی همچنان مشکل خروجی رو دارم. بدون خطای قرمز.
ولی تو خلاصه ی خروجی این توضیحات هست ولی نمی فهمم اشکال از کجاست:
***model structure has 16 data errors
***solve aborted
***status:execution error(s)
در ضمن با همه سالورهای ممکن بررسی کردم ولی درست نشد و همون خروجی رو میده.
سلام
خواهش میکنم.
نه مشکل از سالور نیست. چند خط بالاتر از این رو هم بذارین.
اصن کل فایل log رو اینجا بذارین که ببینم.
hp(j,’1′)=0;
میخوام برای هر j این متغیر در نقطه 1 صفر باشه. اینو تو حدود متغیرا وارد کردم ولی eror143 میده
با تشکر
سلام
=0 اشتباه هست . =e=
. اندیس کنترل کننده ی j و m هم بیارید
سلام خسته نباشید.
ببخشید من یک متغییر بنام Z(Vmax) یعنی اخرین ماشینی که به مسیر k تخصیص داده شده است ، اینو چطور میتونم کد کنم .
باتشکر
سلام
مرسی
بیشتر توضیح بدین. این آخرین ماشین با چه متغیرها و اندیس ها و پارامترهایی در ارتباطه. اساسا اولی یا اخرین ماشین با چی تو مدل نشون داده شده؟
سلام. خیلی ممنون از مطالب مفیدتون. یه سوال دارم که اگه جواب بدین ممنون میشم. تابع هدف مساله من یه جمله داره که برابر با حاصلضرب دو متغیر پیوسته مثبت هست (مثلا a*b که a و b مثبت و پیوسته هستند). میخواستم بدونم توی گمز چطوری باید این جمله رو خطی سازی کنم.
سلام
در حالت کلی رویه خاصی نداره و خط نمیشه. ولی تحت یه شرایطی خطی میشه. مثلا اگه ضربشون صفر بشه میشه خطی کرد.
سلام. اگه توی تابع هدف یه عبارت مثل a2-b2 (توان دوم a منهای توان دوم b)باشه و a و b متغیرهای مثبت پیوسته باشند خطی سازی به چه شکل انجام میشه؟
فکر نمیکنم بتونین خطیش کنین. مگه اینکه شرایط دیگه ای هم داشته باشین. شما میتونین به جای اینکه خطی کنین، بیاین حالتای مختلف غیر خطی معادل این حالت رو امتحان کنین.
مثلا از a2-b2 رو مساوی x بگیرین. بعد تو تابع هدف بذارین x، اینا رو ببرین تو محدودیت. یا اینکه ازشون لگاریتم بگیرین. (پس این شد دو حالت غیر خطی دیگه!)
یه حالت غیر خطی دیگه هم داریم:
تجزیه کنیم:
(a-b)*(a+b);
خب حالا a-b رو اسمشو بذاریم x و a+b رو بذاریم y :
xy=3;
الان از یه غیر خطی به یه غیر خطی دیگه رسیدیم. پس شد در کل 4 حالت غیر خطی مختلف. شما تو مطالعاتتون میتونین نتایج حاصل از این 4 حالت رو با هم گزارش کرده و تحلیل کنین.
سلام خسته نباشید
میخوام این عبارت تو متغیرها بیان کنم
(I.(t
(.) binary indoctor of appliance
status at period t , where1 mean on and 0 mean off
t و . که زمان و وسیله باشن قبلا معرفی شدن . بازه عمکرد وسیله های . هم تعریف شده
الان من (I.(t باینری تعریف کنم کافیه یا باید با روشنی خاموشیم واسش بیان کنم باز امکانش هست بنویسید برام. ممنوم
سلام
چیزی که من متوجه شدم اینه:
1- t یک اندیس هست
2- . یک اندیس هست
3- بر حسب این دو اندیس میخواین i رو تعریف کنین.
کافیه I(.,t) رو به صورت باینری تعریف کنین و استفاده کنین. فقط توجه کنین که گمز “.” قبول نمیکنه. براش یه اسم دیگه مث k بذارین
سلام.خسته نباشین.
من توی برنامم یه شرطی دارم این هست که برای یکی از متغیرهام در یک بازه ای باید مقدارش به صورت تابع یکنواخت تعریف بشه.آیا نوشتن این شرط امکان پذیر هست؟
سلام از دستور ifthen کمک بگیرین
ifthen(condition,true answer, false answer);
سلام ممنون از اینکه بررسی کردید و جواب دادید
فکر کنم تو قسمت solve مدل مشکل دارم چون من قبلش نوع برنامه رو nlp نوشته بودم خطا میداد می گفت dnlp بنویس. این کار رو به صورت زیر نوشتم
model IRP /all/;
solve IRP using DNLP minimizing z ;
display x,y.l,f.l;
همه متغیرها رو صفر میده و این دو پیغام زیر رو هم می ده:
can not handle function ‘min’
can not handle function ‘rel_lt’
can not handle function ‘min این پیام یعنی سالوور نمی تونه تابع min را استفاده کنه. در انتخاب روش حل و سالوور دقت کنین
بله درسته
سالورمو عوض کردم درست شد
ممنون
بسیار عالی
ممنون از اینکه جواب دادین
خیلی ساده شده مدل من این می شه ولی مدل اصلی غیر خطی و محدویت های زیادی داره:
sets
i /1*3/;
parameters
x(i) /1 5,2 3,3 6/
d(i)/1 6,2 2,3 7/
;
positive variables
y(i)
f(i)
;
free variables
z;
equations
obj
A(i)
B(i);
obj.. sum(i,y(i)+f(i))=e=z;
A(i).. y(i)=g=d(i) ;
B(i).. f(i)=e=min(y(i),x(i));
الان محدودیت آخری رو چه طوری باید بنویسم؟
به این صورت که می نویسم خطا می ده:.
B(i).. f(i)=e=min(y(i),x(i))
ولی هر چیزی غیر از
y(i)
تو این محدودیت می نویسم کار می کنه. فقط با متغیر مشکل داره.
به صورت زیر هم نوشتم ولی باز خطا میده
F(i)=e=ifthen(x(i) < y(i),x(i), y(i))
لطفا کمکم کنید چه طوری بنویسمش
سلام برنامه ات درست کار می کنه وقتی پارامتر کوچک تره اونو برمی داره و وقتی متغیر کوچکتره اونو برمی داره. همیشه مقدار متغیر را کوچکتر در نظر نمی گیره .
---- 22 VARIABLE z.L = 28.000
---- 22 PARAMETER x
1 5.000, 2 3.000, 3 6.000
---- 22 VARIABLE y.L
1 6.000, 2 2.000, 3 7.000
---- 22 VARIABLE f.L
1 5.000, 2 2.000, 3 6.000
در برنامه ای که ران شد 2 بار پارامتر و 1 بار متغیر و برمی داره.
سلام از وبسایت خوبتون
ممنون می شم اگه این مشکل بنده رو حل کنید
من می خوام یه متغیر f(i)
تعریف کنم که برابر min
یه پارامتر x(i)
و متغیر y(i)
هست. یعنی اینطوریه:
f(i)=min{x(i),y(i)}
از هر دستوری استفاده کردم نتیجه نگرفتم. دستورات min علامت دلار یا
ifthen
هم استفاده کردم. ولی همیشه متغیر رو کوچکتر در نظر می گیره. حتی وقتی متغیره بزرگتره
دستور ifthen رو اینطوری نوشتم:
F(i)=e=ifthen(x(i) < y(i),x(i), y(i))
و این خطا رو داد:
cannot function 'ifthen'
دستور ifthen وقتی خطا نمی ده که به جای حالت true ,false
عدد قرار بدم مثلا اینطوری:
F(i)=e=ifthen(x(i) < y(i),1, 2)
همیشه مقدار عدد مربوط به false یعنی 2 را برمیگرداند. یعنی همیشه مقدار متغیر را کوچکتر در نظر می گیرد. حتی وقتی بزرگتر است. دستور دلار هم نتیجه ای مشابه ifthen می ده.
لطفا بنده رو راهنمایی بفرمایید دستور مناسب برای min چیه.
خیلی ممنون
سلام حداقل سازی می یاد به گونه ای به متغیرها مقدار دهی می کنه که اونها کم شوند تا جواب بهینه کم باشد. یک حد پایین برای متغیرتون در نظر بگیرین که از پارامتر بیشتر باشه.
اینطوری ممکنه متغیر مقدار نادرستی بگیره که صحیح نیست. چون متغیرها از قبل حد پایین مناسبی دارن
و پارامترها مربوط به مجموعه است و از قبل مشخص است و هر i پارامتر خودش را دارد ولی اختلاف مقدار متغیر و پارامتر قبل از حل مشخص نیست. و برای هر اندیس ممکنه متغیرش بزرگتر یا کوچکتر از پارامترش باشه. یعنی هر پارامتر x(i) متغیر y(i) خودش رو داره و ممکنه بعد از به دست اومدن متغیر ها از پارامتر متناظرش کوچکتر یا بزرگتر باشه. که بین x(i) و y(i) اونی که کوچکتره برابر f(i) می شه.
مشکل من با f(i) هست که نمی دونم تو عبارت زیر چه طوری تعیینش کنم.
f(i)=min{x(i),y(i)}
مدلتونو بفرستین
; parameter withoutV2H(t) operation period without V2H
withoutV2H(t)$(ord(t)>=38 and ord(t)=42 )=vc
withoutV2H(t)$(ord(t)>=100 and ord(t)=103 )=vc
ببخشد جا به جا میشه نوشته ها
برای درست نشان دادن کد ها اول روی گزینه code کلیک کنید و بعد کد بنویسین و بعدشم گزینه code دوباره کلیک کنین
سلام خسته نباشید
من چند تا وسیله خانگی دارم که هر کدوم تا یه بازه ای کار میدنن
وسیله ها قبلا تو set معرفی شد به این صورت
/A appliances /Vc,Tv,Pec,Cd,Wm,Dw,Cm
حالا میخوام دوره عملکردشون بیارم مثلا وسیله Vc تو دوره t بین 38 تا42 و 100تا103 کار میکنه بازه t هم قبلا معرفی شد ./T periods /1*144
به این صورت معرفی میکنم تو شناسایی vc ارور میده
;parameter withoutV2H(t) operation period without V2H ability
withoutV2H(t)$(ord(t)>=38 and ord(t)=100 and ord(t)<=103)=vc
از طرفی نمیتونم بنویسم (ord(a جای vc چون شامل چند تا وسیلس که من فقظ میخوام دوره عمکرد هر کدوم جدا بگم چطور باید عمل کنم
سلام
ممنون
کدی که شما نوشتین اشتباه است.
من جای شما بودم دوره را تعریف می کردم و وسایل را زیر مجموعه دوره تعریف می کردم.
set t/1*44/
vc(t)/38*42,100*103/
بقیه هم به این نحو زیر مجموعه دوره تعریف می کردم.
سلام، وقت بخیر
یه محدودیت دارم که به ازای i تعریف شده ولی تو این محدودیت دو تا sum دارم که یکی به ازای e عضو t(i) و بعدی به ازای e عضو t(j) تعریف شده، اینو چطور باید کد کنم؟
با تشکر
سلام
کامل توضیح ندادین. ولی میتونین e,i رو آلیاس کنین. و j,ee رو.
بعد به جای t(i)بزنین t(e) برای j هم همینطور
سلام. خسته نباشید.
من یه تابع هدف به شکل Z=xy دارم که x و y هر دو متغیر باینری هستن. روش خطی سازیش چیه؟
متشکرم.
سلام
حاصلضربشون رو برابر t بگیرین. بعد اینو در نظر داشته باشین که t همیشه صفر هست، بجز وقتی که هم x,y یک باشن.
یعنی:
t=l=x
t=l=y
x+y-1=l=t
سلام
من دوتا متغیر دارم(متغیر مثبت) که میخوام وقتی اون یکی مقدار می گیره یکی دیگه صفر بشه و بر عکس.و در کل هیچگاه با هم مقدار نگیرند.باید چکار کنم؟
سلام
از sos1 استفاده کنین. تو همین تاپیک توضیحاتش اومده.
مهندس حداقل یه بار تایپک رو مطالعه کنین بعد سوال رو بپرسین. مرسی
سلام
در خصوص توابع توزیع در گمز سوالی داشتم
نوشته بودید که با دستور normal میشه عددی رندم با توزیع نرمال داشت. می
خواستم بدونم ایا تابعی در گمز هستش که تابع چگالی احتمال تابع توزیع
نرمال رو هم بده؟
البته دستور زیر تو راهنمای گمز دیدم اما گمز میگه نمیشناسمش
pdfNormal(x,MEAN,STD DEV)
ممنون میشم اگه راهنمایی بفرمایید
سلام
فرمول رو میخواین؟ برای چی میخواین استفاده کنین؟
سلام
آره فرمولش رو میخوام بدونم
در واقع برا در نظر گرفتن قیمت احتمالاتی در بازار برق، که در اون قیمت بصورت رندم با توزیع نرمال تولید شده و به میزان احتمال اون هم نیاز دارم ولی چون تعداد قیمت ها زیادن و اونا رو بصورت جدول گرفتم گفتم شاید تابع توزیع احتمال توزیع نرمال تو گمز باشه.
ممنون میشم اگه راهنمایی بفرمایید
سلام
من تابع توزیعش رو کار نکردم متاسفانه. سر فرصت میگردم اگه پیدا کردم میذارم اینجا.
فعلا که من تابعشو نمیدونم چجوریه. ولی میتونین یه کار بکنین. فرض کنیم میانگین m و انحراف معیار sigma و متغیر شما x باشه.
میتونین اول x رو به صورت تصادفی با توزیع نرمال تولید کنین. بعدش اون مقداری که برا x به دست اومده رو بذارین تو فرمول تابع توزیع نرمال. فرمول رو دستی براش تعریف کنین. اینجوری هم x به دست اومده و هم احتمالش. احتمالا یکم دقت هم بخواد که مجموع احتمالا بالا یک نشه
سلام
در مورد نحوه بدست اوردن مقدار احتمال به ازای تابع توزیع نرمال لطفا میشه توضیح بدید
البته در helpگمز یه تابع تعریف کرده به شکل زیر
Pdfnormal
این دستورخطا میده و گمز اونو نمیشناسه
با تشکر
برای توضیح سوالم
تابع هدف من اینه
OBJ .. Z=e=sum ((i) , as(i)*x(i));
تابع محدودیت من سیگما 1 تا 8 x هاست ممنون میشم بگید چه جوری محدودیتمو بنویسم
OBJ .. Z=e=sum ((i) $(ord(i) <=8 ), as(i)*x(i));
عذر میخوام از سوال مجددم بعد اگه برای مثال بین 8 تا 16 بخوام تعریف کنم به چه شکل میشه
$(ord(i) >=9 and ord(i) <=16)
سلام با تشکر از مطالب خوبتون
من داخل برنامه i را از 1 تا 30 تعریف کرده ام .. در توابع محدودیت نیاز دارم که در هر تابع از چنتد تا از i ها استفاده کنم اما نمیدونم چطور ممکنه
برای مثال x(i ) که متغیر باینری هم هستن در یک تابه محدودیت فقط از i=1,2,3,4,5,6,7,8 میخوام استفاده کنم ممنون میشم بگید چجوری باید تعریف کنم
سلام
مرسی
مثال زیر رو ببینید.
c1(i)$(ord(i) <=8).. x(i)=e=1;
من متغیر باینری دارم،مثلا برای فروش یا تولید که ممکن است تولید نداشته باشیم یا فروش نداشته باشیم،هر کار میکنم متغیرهای باینریم یک میشن.لطفا راهنمایی کنید.
سلام
خب من چه راهنمایی بکنم الان. این وضعیت به چند تا چیز ربط داره که شما همه رو باید چک کنین:
1- ساختار مدل، آیا ساختار اجازه میده که صفر هم بشه؟
2- داده ها، آیا داده ها مشکلی ندارند؟
3- کد، آیا کدم درسته؟
4- تابع هدف، ممکنه یه جوری باشه که به نفعش باشه که همیشه صفر بشه
مهمترین دلیل ساختار مدل و داده ها هست
سلام
من مدلم یه متغیر موجودی داره،که مقدار اولیه درواقع در زمان صفر یه عدد ثابته.
تو معادلات هم یک معادله برای موجودی دارم چه جوری بنویسم که مشکل نباشه.متغیز موجودیم هم تک اندیسه هست.
/tt time periods /0,1*6
/t(tt) /1*6
من اینو واسه مجموعه ها تعریف کردم.
اینو واسه متغیر
;positive variable I(tt) amount of inventory
;I.fx(“0”)=20
معادله هم اینه
((Inventory(t).. I(t)=e=Q(t)+I(t-1)- sum((j),R(j,t
سلام
خوب تعریف کردین. نباید مشکلی داشته باشه. این بهترین راه برای مقدار اولیه ست.
سلام. ممنون از آموزش ها و پاسخ گویی خوبتون.
یه سوال از خدمتتون داشتم در همین زمینه.
اگر فرضا بخواهیم در همین معادله از شرط ord(t) استفاده کنیم، اندیس t را به همین صورت میتوان استفاده کرد؟ چون به صورت زیرمجموعه ی tt تعریفش کردیم.
چون برای من خطای زیر را می دهد که فکر میکنم دستور اورد رو اشتباه نوشتم برای t
کد:
خطا:
درواقع چند خط محدودیت هام به این شکله:
و خطاهای 52و64و256 رو دارم.
هر کار هم انجام میدم، رفع نمیشه. خیلی ممنون میشم اگر راهنماییم کنید
سلام
متن اولین خطا رو باید بذارین، یکی یکی باید رفع بشن.
سلام
این خطا مربوط به این خط نیست.
سلام.
من میخوام توی گمز یه تابع هدف نویسم که توش متغیر در ترانهاده اش ضرب میشه نمیدونم چجوری باید متغیر ترانهاده رو وارد کنم.
اینجوریه:
‘wsw
w متغیره و یه ماتریس 1*n
s پارامتره و یه ماتریس n*n
ممنون میشم راهنمایی کنین چجوری باید بنویسمش
سلام
خواهش میکنم.
کافیه که جای اندیس هاش رو عوض کنین.
سلام متغیرهای زیر رو دارم و در قسمت معادلات این فرمول رو دارم
CONST15_1(h0,bus) $(ord(h0)>1 )..Pes(h0,bus)=e=Pch(h0,Bus)+ Pdch(h0,Bus) ;
میخوام طوری تعریف کنم که در صورت عدد دار بودن بکی از Pch یا Pdch دیگری صفر در نظر گرفته بشه ممنون میشم اگه راهنمایی کنید البته خودم اینطوری نوشتم ولی فایده نداشت:
CONST15_1(h0,bus) $(ord(h0)>1 )..Pes(h0,bus)=e=Pch(h0,Bus) xor Pdch(h0,Bus) ;
Pdch.lo(h0,BusPs)=0;
Pdch.up(h0,BusPs)=0.0005;
Pdch.fx(h0,busNoPs)=0;
Pch.fx(h0,busNoPs)=0;
Pch.lo(h0,BusPs)=-0.0005;
Pch.up(h0,BusPs)=0;
Pes.lo(h0,BusPs)=-0.0005;
Pes.up(h0,BusPs)=0.0005;
Pes.fx(h0,BusNoPs)=0;
سلام
مقداری ساده تر فکر کنین. مث عبارت زیر:
pch(h0,bus)+pdch(h0,bus)=e=1;
میبخشید مثل اینکه سوالم رو بد مطرح کردم Pdch و Pch متغییرباینری نیستن من یک باز 24 ساعته دارم که در هر ساعت یکی از این دو پارامتر باید در حدود تعریف شده در صورت سوال، قرار بگیرد و متغیر دیگه تو اون ساعت صفر در نظر گرفته شود برای این از xor کردم که البته متوجه شدهم باینری و قابل ااجرا نیست چون میخوام از این پارامتر ها در فرمول زیر در هر ساعت استفاده کنم
CONST15_7 (h0,bus)$(ord(h0)>1)..Ps(h0,bus)=e=Ps(h0-1,bus)+(Pch(h0,bus)*0.95+Pdch/0.95) ;
متوجه نشدم متاسفانه. شایدم دل به کار نمیدم. نمیدونم 🙂
??? با شعار ما میتوانیم خودم حلش کردم مرسی
ایولا
سلام
یک نوع متغیر میخوام که باینری باشه اما -1 هم داشته باشه.آیا چاره ای هست؟
1و-1و 0
با تشکر
سلام
بسته به مدل شما، میتونین هر راه خلاقانه ای استفاده کنین.
ساده ترینش که خیلی هم خلاقانه نیست اینه که یه متغیر integer تعریف کنین. و یه کران بالا و پایین (1 و -1) براش بذارین. اینجوری فقط این سه مقدار رو میگیره
یک مثال ساده می زنین که، جواب که قرار تو این رابطه بدست بیاد، ۰ یا ۱ و یا عددی بین ۰و ۱ می تونه باشه یکم راهنمای بیشتری انجام بدین برام
سلام
توی گمز یه کد نوشتم.این کد یک مقدار بهینه رو برای 24 ساعت بهم میده.حالا من میخوام این مقدار در عدد 365 ضرب بشه و مقدارش کنار گزاشته بشه.در ادامه یک پارامتر وروردی تغییر کنه (مثلا تمامی مقادیرش +1 بشه) و یه بار دیگه کد اجرا بشه و مقدارش به دست بیاد .عدد به دست اومده مثل دفعه قبل در 365 ضرب کنه و حاصل رو از عدد قبلی که کنار گزاشتیم کم کنه.
قبول دارم که اینکار به صورت دستی و با دوبار ران گرفتن و تغییر دستی پارامتر میشه انجام داده اما میخوام ببینم این کار توسط گمز چجوری بیاده میشه؟
با تشکر
سلام
یه loop بنویسین، به ازای تعداد دفعاتی که قراره انجام بشه. مثلا ده بار. یه مجموعه مث s تعریف کنین و لوپ رو به ازای اون بنویسین.
دستور solve رو بذارین تو لوپ.
این کد براتون میتونه مفید باشه.
loop(s,
p(i)=pp(s,i);
solve .....z;
value(s)=z.l+1;
a=a*ord(s);
;);
display value
با تشکر از سایت خووبتون.
ببخشید در ادامه این سوال یه سوال دیگه اینکه آیا امکان داره که گمز پس از بهینه کردن یک تابع هدف مقدار بهینه را در ادامه مساله در یک بهینه سازی دیگر بکار گیرد؟
یعنی دو بهینه سازی در یک مساله.که مقدار بهینه تابع اول در بهینه تابع دوم بکار گرفته شود.
سلام
بله میشه. مشکلی نیست
سلام یه معادله خطی به این شکل در داخل گمز میخواهیم بنویسم ک
L (T)= 0 ,T<ET
L(T)= T-ET/E-ET,ET<T<E
L(T)=1,E<T<L
L(T)=EL-T/EL-L,L<TEL
که در اینجا ET ,EL, E,L,پارامتر اندیس دار هستند، و Tمتغییر است، L هم متغییر،این و چطوری باید نوشت از طریق IFTHEN بنویسیم در نمیاد، معادله رو غیر مشتق پذیر می کنه، از DNLP مدل می گه حل کنین که حل نمی شه، راهکاری داره ایا ؟
سلام
به نظرم شما بهتره که راه حل خلاقانه ای استفاده کنین. به عنوان مثال یه متغیر integer تعریف کنین که سه مقدار 0 و یک و دو رو بگیره. هر کدوم رو گرفت یکی از معادلات منطقی بشه. فقط خلاقیت میخواد و احتمالا از اعداد بزرگ و یا صفر و یک هم بتونین استفاده کنین. من که الان چیزی به ذهنم نمیرسه. همه جوره میشه احتمالا.
یک مثال ساده می زنین که، جواب که قرار تو این رابطه بدست بیاد، 0 یا 1 و یا عددی بین 0و 1 می تونه باشه یکم راهنمای بیشتری انجام بدین برام
الان چیزی خاطرم نیست خب.
مثلا فرض کنیم اگه متغیر s بین 0 و 4 باشه، y باید یک بشه و اگه بیشتر شد، y باید صفر بشه. (شما باید شرطا رو ریز کنین، پیاده کنین، و چک کنین که با هم تناقض نداشته باشن)
4-s=l=y*M;
s-4=l=(1-y)*M;
لطفا صفحه مربوط ifthen مفصل تو صفحه تون اضافه کنین با توضیحات مفصل زیاد تو کامنتا مشخص نیست
سلام
چشم حتما. مقداری سرمون شلوغه. چشم و ممنون بابت نظر مفیدتون
ممنون از سایت پر بازخورد و مفیدتون
سلام،اگر موجودی جزو متغیر ها باشد،وموجودی اولیه داشته باشیم،میخایم اینوم بنویسیم چیکار باید بکنیم؟
سلام
تو اینگونه مسائل میتونین مثلا یه I(t) تعریف کنین. که این I موجودی تو هر دوره هست. بعد یه I0 هم تعریف کنین که واسه دوره صفره و پارامتره. هر جا I برا دوره اول داشتین، از I0 استفاده کنین. این سریعترین راه ممکنه. و از همه روشای دیگه هم فکر کمتری لازم داره. روش زیاده. باز خواستین عرض میکنم. فقط به مسئله بستگی داره
یعنی واسه موجودی دوره اول یه معادله،واسه بقیه اش یه معادله دیگه؟یا خودش از اون پارامتری I(0) که تعریف کردیم استفاده میکنه با یه معادله؟
سلام مجدد،
اول از همه خیلی ممنونم بخاطر سایت خوبتون، من حتمن به یک طریق از خجالت گردانندگان این وبسایت خوب در میام.
و اما بعد، من تو مدلم، یک متغیر دارم q_jct، این متغیر در تابع هدف و محدودیت ها با اندیس های مختلف که جنسشون یکسانه حل بکار رفته. منظور از اینکه میگم اندیس های متفاوت با جنس یکسان یعنی این متغیر، به فرم های q_jct، q_j’ct، q_j’c’t در مدل بکار رفته. واضحه که من نیاز به استفاده از آلیاس دارم برای تعریف مجموعه j’ از روی مجموعه j مثلا. سوالم اینه که آیا نیاز هست که من برای هر کدوم از این سه تا متغیر، یک متغیر متمایز تعریف بشه، یعنی مثلا بازای q_jct، q1، بازای q_j’ct، q2، و برای q_j’c’t، q3 ، یا اینکه نیاز نیست و میشه مثلا با تعریف یک q1 و تخصیص اندیس کار رو انجام داد؟
ببیخشید طولانی شد
ممنون.
سلام
ممنونم لطف دارین. و خوشحالیم که تونستیم کمکی کرده باشیم بهتون.
مشکلی نیست. یه دونه تعریف کنین. درستش هم همینه
سلام.
من مشکلم اینه که سوالمو میپرسم،بعدا قبل از اینکه شما زحمت بکشید، خودم جوابشو پیدا میکنم.هرچند که شما واقعا سریع جواب سوالاتمونو میدید!!
بازم تشکر.
سلام
خواهش میکنم
سلام.
من یک مجموعه تعریف کردم به شکل مقابل: C //C1*C2
روی این مجموعه آلیاس گرفتم و مجموعه B رو هم با همین اعضا تعریف کردم.
مجموعه سومی هم تعریف کردم بدین شکل:
R //R1*R4
روی C و B پارامتری دو بعدی تعریف کردم به شکل زیر:
RR(C,B) //C1.C2 2,C2.C1 2,C1.C3 3,C3.C1 3,C2.C3 4,C3.C2 4
حالا میخوام در یکی از محدودیتهام به ازای هر عضو BوC، روی متغیری مثل F(C,B,R) روی اندیس R جمع بگیرم، بنحوی که اولا Cهایی که اندیس شون برابره و در پارامتر RR نیستند،(مثل .C1)C1) در نظر گرفته نشن، ثانیا حد بالای R همواره به ازای مقداری که در پارامتر براشون تعریف شده، تغییر کنه، مثلا وقتی که داره محدودیتم رو به ازای C1وC2 محاسبه میکنه، مقدار RR(C1.C2) که برابر 2 هست رو در نظر بگیره و حد بالای R رو تا 2 در نظر بگیره. چطوری این محدودیت رو تعریف کنم؟
مرسی و شرمنده بابت طویل شدن توضیحات!
سلام
الان محدودیت رو دارین و میخواین شرطا رو بذارین یا میخواین یه محدودیت تعریف کنین؟
سلام.
نه میخوام تعریف کنم محدودیتی که عرض کردم رو.
سلام
خب این کار رو شما باید انجام بدین. من یه مقداریش رو نوشتم. تککمیل کنین شما:
C1(C,B)$(ord(c) ne ord(b) )sum(R$(ord(R) <= RR(C,B),F(C,B,R)
سلام
می خواستم دستور ((Sum(i,v(i,j را طوری بنویسم که در آن اندیس i برای هر j تغییر کند.
فرض کنید اندیس j مربوط به یک واحد تولیدی است و بازه ی تغییرات i برای هر واحد به طور خاص تغییر می کند.
با تشکر
سلام
اگه هر i مربوط به هر j هست که sum نمیخواد.
اگه برای هر j مثلا چندتا i داریم، باید یه مجموعه چند بعدی تعریف کنین، مث E(i,j) که هر جا E یک بشه یعنی i,j در ارتباط هستن.
برای تعریف E(i,j) از صفحه ی زیر کمک بگیرین.
تعریف رابطه بین دو اندیس در گمز
بعد E باید به صورت شرطی به کد شما اضافه بشه. اینجوری:
sum(i,$E(i,j),v(i,j));
سلام و خسته نباشید.
یه جایی گفته بودید که چطوی میشه در خروجی که نشان میده تعداد اعشار رو دست کاری کرد.من هرچی می گردم نمی تونم پیداش کنم.لطف می کنین دوباره بگین؟
مثلا اگه عدد 1.3245 می خوایم تو خروجی نشون بده 1.23
ممنون
سلام دستور زیرو به مدلتون اضافه کنید
option decimals = 2;
با سلام وتشکر بابت مطالب آموزنده تون
سوالی داشتم ممنون میشم راهنماییم کنید
میخام متغیری بنویسم که نشان دهنده زمانی باشه که ،یک اندیس از سه اندیس متغیر باینری x مقدار مشخصی رو گرفته، مثلا زمانی که ایکس با j=3 یک میشه رو بیان کنه
T(x(f,j=3,d)=1)
در ست / 3*1/ j نوشته شده است
سلام باید از اندیس مورد نظر را در ” قرار بدین. مثلا
X(f,'3',d)
منظورتونو از تی ایکس متوجه نمیشم. احتمالا اون هم اشتباهه
سلام .ممنونم
منظورم از تی ایکس، زمانی هست که متغیر ایکس، مقدار یک میگیره
T(x(f,’3′,d)
یعنی نمیدونم چطور متغیر t3 تعریف کنم که معرف زمانی باشه که X(f,’3′,t) =1 هست
t3 چه نوع متغیری هست ؟
مثلا می تونین این محدودیت را بنویسین
t3=L=bigM*X(f,'3',t);
بستگی به مدلتون داره .
سلام تی نمیتونه تابعی از ایکس باشه ها ! با محدودیت باید منظورتونو برسونین به گمز
با سلام و قدر دانی از شما
حاصلضرب دو متغیر پیوسته که همزمان نمی توانند مقدار بگیرند به چه صورت خطی می شه؟ مثلا x.y=0 که هیچکدام باینری نیستند و در صورت مقدار گرفتن یکی دیگری صفر میشه.با تشکر
سلام
ممنونم
اگه بزرگتر مساوی صفر هم هستن، میتونین یه متغیر باینری به اسم u تعریف کنین و برای
خطی سازی ضرب دو متغیر پیوسته که حاصلضرب آنها برابر صفر است به شکل زیر عمل کنین:
x=l=u*M;
y=l=(1-u)*M;
این دو محدودیت باید جایگزین محدودیت مورد نظر شما بشن.
اگه منفی هم بتونن باشن. بازم باید بررسی بشه.
ممنون. مرسی از سایت خوبتون.
ضمنا با هر solver که بگین، حل کردم و حتی با rminlp هم حل کردم. ولی تو فکر کنم تو همشون اینجوری میاد.
Option optcr=0
سلام. ببخشید مزاحم شدم. من تو کدم متغیرهای باینری تعریف کردم و البته مساله به صورت MINLP است. منتهی پس از run و نمایش جوابها، این متغیرها به صورت اعشاری حل شدهاند. مثلا 0.2 یا 0.89. مشکل از کجاست؟
سلام
حل دقیق نیست. سالور رو بزنین رو بارونی چیزی، بعد مقدار گپ رو هم صفر بدارین درست میشه
بسیار سپاسگزار.خوشبختانه مشکل حل شد.الان یه مشکل دیگه دارم.ممنون میشم راهنماییم کنید.
فرض کنید مجموعه i از اجتماع دو مجموعه w,d بدست میاد.حالا یه سری از محدودیت های ما به ازای هر w است.این رو چطوری باید در گمز بنویسیم؟
سلام
بخش اجتماع مجموعه ها رو بخونین.
اجتماع مجموعه ها در گمز
سلام. اگر متغیر مجهول ما بین دو حد بالا و پایین که دو متغیر معلوم هستند بود،
مثلا L(j)<Q(j)<U(j)l بود که Q متغیر مجهول و L و U دو پارامتر معلوم که در قسمت پارامترها تعریف و مقداردهی شده اند بود، این عبارت را به صورت دو نامساوی و دو محدودیت جداگانه در قسمتی که محدودیتها را تعریف میکنیم می آوریم یا در قسمت تعریف پارامترها؟
فکر میکنم به جواب رسیدین
سلام. من در مدلم ضرب دو عدد صحیح رو دارم که مدل من رو غیر خطی کرده. برای خطی سازی چه کنم؟
سلام
متغیرای عدد صحیحتون باینری هم هستن یا فقط عدد صحیحن؟
فقط صحیحند ولی حد بالای یکیشون مشخصه. ضرب دو متغیر صحیحه که باید صفر بشه
سلام
اگه بزرگتر مساوی صفر هم هستن، میتونین یه متغیر باینری به اسم u تعریف کنین و برای
خطی سازی ضرب دو متغیر عدد صحیح به شکل زیر عمل کنین:
x=l=u*M;
y=l=(1-u)*M;
این دو محدودیت باید جایگزین محدودیت مورد نظر شما بشن.
اگه منفی هم بتونن باشن. بازم باید بررسی بشه.
خیلی ممنون. فقط M بزرگ در گمز تعریف شده است که عدد خیلی بزرگی است؟
سلام
نه باید خودتون بهش مقدار بدین
با سلام و تشکر از مطالب مفیدتون.من یه مدل دار که یه متغییر تصادفی دارای توزیع uniform تعریف شده اگه این متغییر غیر صفر باشه باید اندیسش بره تو یه مجموعه اگه غیر صفر باشه اندیسش تویه یه مجموعه دیگه.میشه لطف کنین راهنمایی کنین چطوری تعریف کنم این شرط رو.
سپاسگزارم
سلام
میشه گفت خیچی نفهمیدم چی فرمودین. لطفا مجددا توضیح بدین. و اینکه متغیر منظورتونه یا پارامتر؟
سلام و ممنون از توجهتون.در مدل بنده یه پارامتر هست که از توزیع یکنواخت میاد.حالا اگر مقدار این پارامتر صفر بشه (چون تصادفیه ممکنه صفر بگیره در تولید اعداد) در این صورت اندیسش(که جز set) باید بره عضو یه مجموعه میشه در غیر اینضورت اندیسش عضو یه مجموعه دیگه
سلام
مجددا عذرخواهی میکنم. ولی خوب مطرح نمیکنین سوالتون رو. لطفا با x و y و a و i و j توضیح بدین. و بگین هر کدوم چه نقشی دارن. فکر میکنم مشکل ساده تر از این باشه که پیچیده شده الان.
سلام و وقت بخیر
اگر در یک سیگما، حد بالا یک متغیر باشه چطوری میشه به عنوان مجموعه تعریفش کرد؟
در واقع تعداد دوره های زمانی در مسئله بعنوان متغیر تعریف شده و میخواهیم سیگمای یه متغیر دیگر با اندیس زمان را برای کل دوره های زمانی حساب کنیم. (این سیگما هم در محدودیتها هست و هم در تابع هدف)
یه راه خلاقانه؟؟؟؟!!!!
متشکرم
– S = Sum((i,j)$(q(i,j)>0),q(i,j));
مثلا در خط بالا برای جمع شرط گذاشته ! شما هم می تونین این جوری تعریف کنین یا اینکه از حلقه ها استفاده کنین. اینکه به طور مستقیم حد بالا سیگما متغیر باشه امکان نداره
جهت تکمیل فرمایشات خانم رمضانی،
شما دو راه اساسی دارین (حداقل من فعلا اینا به ذهنم میرسه):
یا اینکه مث خانم رمضانی که فرمودن لوپ تعریف کنین و هر بار اضافه کنین ببینین کدوم بهینه ست.
یا اینکه اگه بتونین محدودیتتون رو جوری بنویسین که دستور ifthen رو بتونین توش پیاده کنین که خوب میشه براتون. ifthen رو تو کامنتای بخش معادلات تشریح کردیم. مثلا شرط بنویسین که اگه t
سلام
می خواستم بدونم مقایسه پارامتر و اندیس در گمز غلطه؟
loop(j,
if(a(“1”,j) = 1,
cnt = 0;
******while(cnt > j,
cnt = cnt + 1;
);
b(“1”,j) = cnt;
);
);
ممنون می شم کمک کنید
سلام
به جای j باید بزنین ord(j) یا j.uel
سلام
خسته نباشید و تشکر بابت سایت خیلی خوبتون
من در مدل ریاضیم محدودیتی دارم که نیاز دارم از یک عبارت هم به عنوان اندیس استفاده کنم و هم به عنوان متغیر، میخواستم ببینم چه طور میتونم این مسئله را در گمز در نظر بگیرم؟
ممنون
سلام
گمز اجازه این کار رو نمیده، باید یه خلاقیتی به خرج بدین. چیزی که لازمه اینجا بذارین تا راهنماییتون کنیم.
خواهش میکنم
سلام
خیلی ممنون از پاسختون
محدودیت های فعلی این ها هستند که برای کنترل ظرفیت یک بخش از سیستم در هر لحظه از زمان هست که زمان را به صورت مجموعه ای از اعداد گسسته در نظر گرفتم:
c13(t,p) .. Big_number*abs(t-landa(p))=g=1-aa(t,p);
c14(t,p) .. abs(t-landa(p))=l=(1-aa(t,p))*Big_number;
c15(t,p) .. Big_number*abs(t-mio(p))=g=1-bb(t,p);
c16(t,p) .. abs(t-mio(p))=l=(1-bb(t,p))*Big_number;
c17(t,p) .. sum((tt,p) $ (ord(tt)<t+1),aa(tt,p))-sum((tt,p) $ (ord(tt)<t+1),bb(tt,p))=l=Qauc;
متغیرهای aa و bb متغیرهای صفر و یک هستند که بررسی میکنند آیا پالت p در لحظه t به سیستم وارد و از اون خارج شده یا نه
من تنها راهی که به ذهنم میرسه اینه که جاهایی که از t به عنوان متغیر استفاده کردم جاش l(t) رو بزارم و در پارامترها l(t) را به صورت نظیر به نظیر با t تعریف کنم ولی با توجه به زیاد بودن تعداد بازه های زمانی این کار خیلی سخت میشه.
خیلی ممنون
سلام
به نظرم اگه l با اندیس t بیاد یه جوریه هر چند ممکنه کار درستی باشه.
یه راهنمایی خوب براتون این میتونه باشه که شما تو مقالات، دنبال محدودیت سرویس دهی یا محدودیت زمانی یا پنجره زمانی باشین. ببینین اونا چجوری نوشتنش.
نکته دیگه اینکه از دستور t.uel هم میتونین استفاده کنین. اگه t رو فقط اندیس تعریف کنین و مسئولیت هایی که به عنوان متغیر داره رو به بقیه متغیرها یا پارامترا بدین
سلام.ببخشید میدونم خیلی سوال پرسیدم.میشه بگید خطی سازی x/y چه طور باید انجام بشه؟
سلام ! Z=X/Y بگیرین و طرفین وسطین کنین که تقسیم به ضرب تبدیل بشه. و با توجه به نوع متغیر هاتون (باینری یا عدد صحیح) روش هایی برای خطی کردن وجود داره! توضیح بدین x و y نوعشون چیه!
سلام.ممنون از پاسخ گویی شما.هر دو متغییر عددصحیح هستند.
سلام براتون روش خطی سازی میل می کنم .
سلام وقتتون بخیر میشه این جزوه رو برا منم بفرستین؟ خیلی حیاتیه برام. ممنون
سلام. وققتون بخیر
ببخشید میشه لطفا این جزوه رو برای منم ارسال کنید؟
سلام
بعد اون ضرب رو خطی کنین. در حالت کلی قانون خاطی نداره
سلام و باز هم خسته نباشید.
راستش منم همچین سوالی دارم و خیلی ممنون میشم که برای من هم روش خطی سازی حاصلضرب دو متغیر رو ایمیل کنین.
یکی از متغیرهای من، عدد صحیح و یکیش باینری هست.
بازم ممنون از اینکه با دقت و حوصله به سوالامون جواب میدین.
سلام براتون ایمیل کردم.
سلام
تشکر بابت مطالب خوبتون
امکانش هست جزوه ای که برای خطی سازی هست برای منم ایمیل کنید.ممنونم
سلام
جزوه مدونی نداریم. مشکل چیه
با سلام. برای من هم ممکن هست این جزوه رو ارسال کنید. چون مشکل منم هست. معادله ای دارم که به صورت z=y/x می باشد که y متغیر باینری و x متغیر پیوسته می باشد. از توجه شما سپاس گزارم.
سلام
یعنی z هم باینری هست؟ یا اینکه مقدار 0 و 1/y رو میگیره فقط؟
سلام،وقت شما بخیر.
ممنون میشوم روش خطی سازی ضرب دو متغیر صحیح را برای من هم میل کنید لطفا…
باتشکر
با سلام و ادب
خسته نباشی استاد
اگر در تایع هدف، یک پارامتری همانند d(i,j,t) در مخرج کسر وجود داشته باشد که برخی از آرایه های آن صفر باشد، سبب می شود تابع تقسیم بر صفر شود و ارور دهد.
شرط $ را باید کجا نوشت؟
تمام کامنتا رو بررسی کردم، دیدم همیشه در محدودیت شرط گذاشتید، آیا در توی تابع هدف، در کجا باید شرط کجاست؟
OF1 .. z1=e= sum((i,j),ATAW(i,j,t)/d(i,j,t))
سلام.
اولا تو دستور sum اندیس t رو فراموش کردین. ثانیا اینجا:
sum((i,j,t)$(d(i,j,t) ne d(i,j,t)),.....)
این یکی از کارایی هست که میتونید انجام بدید.
موفق باشین
بسیار از بررسی تون متشکر
با سلام و ضمن تبریک سال نو
با توجه به اینکه برای تعریف توان دوم یک متغیر باید از علات ** در گمز استفاده کرد، اما بنده پس از استفاده این علامت ، در خروجی نرم افزار ضریب متغیر مربوطه را صفر کرده (به جای اینکه به توان دو برساند) در نتیبجه جوابی بدست نمیدهد.
کد به صورت زیر است:
eq9(j)..(v2(j))**2=g=a(‘3’,j)*r(j);
ولی در خروجی به صورت زیر نشان داده میشود:
—- eq9 =G=
eq9(1).. (0)*v2(1) – 20*r(1) =G= 0 ; (LHS = 0)
eq9(2).. (0)*v2(2) + 35*r(2) =G= 0 ; (LHS = 0)
eq9(3).. (0)*v2(3) – 14*r(3) =G= 0 ; (LHS = 0)
لطفا کمکم کنید.;)
سلام
احتمالا مدل شما یه طوریه که v2 صفر میشه همیشه. یا بهتره براش صفر بشه
در حالت کلی هم هنگامی که یک متغیر به توان دو را مینویسم ، (حتی بدون سایر محدودیتها و …) نمیتواند توان دو را نشان دهد و به جای آن ضریب را صفر میگذارد.(در حالیکه استفاده از علامت ** برای اعداد چنین مشکلی را پیش نمیاورد.)
با تشکر
سلام
جالبه. منم الان دقت کردم. کد زیر رو کپی کنین و ران کنین. هر بار به جای 1+x یه عدد دیگه بذارین. هر سری سر خود یه عددی میده که منم نمیفهممش.
positive variable x;
variable z;
equation obj;
obj.. z=e=(1+x)**2;
model a /all/;
solve a using nlp minimizing z;
display z.l,x.l;
منم نمیدونم چرا. شرمنده. دوستان اگه بلدین همینجا بگین.
خب به دردتون هم فک نکنم بخوره جوابش بهار خانم
فرض کنید قرار از بین چندین فناوری با توجه به هزینه و بازده و… برای رسیدن به یک هدف خاص مدل بنویسید که اطلاعات فناوری ها داده های مشخص هستند اما فناوری ها در سه نوع دسته قرار میگیرند که قراره مدل بگه کدوم فناوری ها با توجه به شرایط بهم متصل بشن تا هزینه کل سیستم کمینه باشه. متغیر های انتخاب اتصال باینری است. حالا سوال من اینکه برای اینکه مدل توانایی اتصال موازی فناوری یا سری رو داشته باشه باید چه کار کنم؟فکر کنم منجر به ضرب متغیر های باینری در هم میشه که مسئله رو غیر خطی میکنه اگه مثلا 3-4 متغیر باهم ضرب شه گمز میتونه حلش کنه؟ممنون میشم با جزئیات توضیح بدید چون من تازه با گمز کار کردن رو شروع کردم.
سپاس
سلام
اینکه چند متغیر صفر و یک تو هم ضرب بشن تو سایزهای کوچیک با پیچیدگی کم گمز میتونه مدل رو حل کنه. ولی اگه سایز بالاتر بره دیگه گمز ممکنه نتونه به جواب برسه. اگه همچین حالتی پیش اومد، سعی کنید خطی کنید محدودیت رو
سلام
میشه یک مقدار در مورد تحلیل حساسیت توضیح بدید؟ مثلا برای یک محدوده خاص گمز یه فناوری را انتخاب میکنه میخوام بدونم در چه محدوده ایی این انتخاب پایدار ؟ ایا کد خاصی داره یا دستی باید عوض کنیم ؟
سلام
تو تحلیل حساسیت شما میاین یه پارامتر رو چند بار تغییر میدین و نتیجه و اثر رو هر بار ثبت می کنین. این ثبت نتیجه (معمولا تابع هدف) هم دستی میتونه باشه، و هم اینکه میتونین بعد دستوراتی مثل solve با مقداری خلاقیت هدف تغییر یافته رو ثبت کنین. دستور خواصی نداره
سیگما روی هر 3 تا h,g,v هست.
خب شما سیگما هم بزنین
سلام من سیگما زدم ولی ارور میده.میشه دستور قبل رو با سیگما بنویسید(سیگما روی هر سه اندیس g,h,v می باشد)
سلام
c1.. sum((g,h,v)$(ord(h) ne ord(g))x(g,h,v)=g=1;
اگه درست نوشته باشم البته
سلام.
من متغیر xghk دارم که اندیس g یا h هر بار عضو یک مجموعه متفاوت هستند. کد مربوطه رو چجوری در گمز وارد کنم؟
با تشکر
سلام
یه مجموعه مرجع تعریف کنین که همه این مجموعه هایی که g و h شامل میشن رو شامل بشه، بعد g و h رو از رو اون انتخاب کنید. یا میتونین x رو به صورت x(*,*,k) تعریف کنین و هر بار چیزی که میخواین رو به کار ببرین. اگه جوابتون رو نگرفتین بیشتر صحبت کنید در مورد مجموعه ها و چگونگی استفاده شون.
مرسی از کمکتون
برای وارد کردن ∀s⊂i∪j∪k ,i∪j⊆s
و xghv≥1 ∑ که h∈{i∪j∪k}-s,g∈s,v∈V باید چطوری مجوعه ها و محدودیت رو وارد کنم؟
i و j و k رو تعریف کنید.
بعدش با دستور زیر اینا رو اجتماع بگیرید ازشون.
set s/set.i,set.j,set.k/
بعد:
c1(g,h,v)$(ord(h) ne ord(g)).. x(g,h,v)=g=1;
دقت کنید که باید s,h,g هر سه آلیاس هم باشن.
جهت اطلاعات بیشتر به بخش مجموعهها مراجعه کنین.
با سلام و تشكر از زحماتتون
در صورتي كه روي يك متغير شرط داشته باشيم و در equation لحاظ كنيم روش چيست؟
مثلا اگر متغير Pi بزرگتر از متغير Pj باشد از رابطه زير استفاده شود:
P=sqrt Pi-Pj , و در غير اينصورت P=sqrt Pj-Pi
با سلام ممنون
در محدودیت ها می توان از دستور ifthen استفاده کرد.
(ifthen(condition, expressioniftrue,expressioniffalse
سلام
اگر کدنویسی رو ایمیل کنم ایرادش رو رفع میفرمایید البته با ذکر هزینه.
الان همه جواب ها صفر شدن!
پس مدلتون نشدنی هست. باید توش تغیراتی که لازمه رو اعمال کنید
چه تغییراتی اعمال کنم شدنی بشه؟
دو یا چندتا از محدودیت ها با هم تناقض دارن. اونا رو باید دستکاری کنین. یا محدودیت ها ، داده ها…
بهتره سر به سرش بذارین دیگه. تحلیل کنین مدل رو
و اینکه چرا مقادیر متغیرهای تصمیم در خروجی پراکنده هستند؟
مشکل باز وجود داشت؟ متغیرهای اینتیجر باز درست نبودن؟
تغییری ایجاد نشد، در ماتریس متغیرهای تصمیم باینری تعدادی 1 و مابقی اعداد اعشاری مثبت و اعشاری منفی هستند!
آیا در صورتی که z آزاد در علامت باشد جواب داریم و منفی است؟ z باید آزاد در علامت در نظر گرفته شود؟
خب سالور رو بزنین روی بارون. بعد دوباره ران کنید. نتیجه رو بگید
سلام
یه کد نویسی انجام دادم که الان که کامل شده جواب شدنی می ده ولی متغیر های تصمیم باینری رو منفی و اعشاری می دهد؟؟ چرا ؟ چطور درست می شه؟
جوابتون دقیق نیست. کد زیر رو به ابتدای کدتون اضافه کنین. اگه همه جوابها رو صفر کرد، مشکل از مدلتونه و نشدنیه و باید تغییرش بدین.
option reslim=1000;
option optcr=0;
صفر نشدن جوابها!
سلام
من میخوام مقدار اولیه یک متغیر رو در زمان صفر برای گمز تعریف کنم، طول دوره زمانی 24 ساعت، و میخوام در زمان صفر مقدار ثابتی به یکی از متغیرهای وابسته به زمانم بدم
اما متاسفانه به مشکل خوردم، اگه لطف کنید راهنمایی کنید ممنون میشم…
t /1*24/
سلام
یه t1 تعریف کنین که t زیر مجموعه اون باشه
Set t1/0*24/
T(t1)/1*24/;
بعد به اون t1=0 مقدار اولیه بدین. دقت کنین که متغیر هم باید به ازای t1 تعریف بشه.
سلام،
من توی گمز خیلی مبتدی ام. یه سواله هرجا میگردم جوابشو پیدا نمیکنم. اگر بخوام بنویسم جمع Xi,j ها به شرطه که i با j برابر نباشد، موقع استفاده از sum چجوری شرط برابر نبودنو بیارم؟ اصلاً علامت نا مساوی تو گمز چیه؟
با تشکر
سلام
توی کامنتهایبخش معادلات، به وفور جواب سوالتون داده شده. به بخش معادلات مراجعه کنین.
با سلام
برای تحلیل حساسیت در نرم افزار گمز (از طریق کدنویسی عادی)، می بایست ابعاد مدل ریاضی را چندین بار بزرگ کنم که چندین جدول بزرگ با اعدادی تصادفی در یک رنج خاص می خواهد. برای وارد کردن جدول اعداد تصادفی(مثلا از روی اکسل) چه فرمول هایی باید به کد گمز اضافه گردد؟
با تشکر فراوان
سلام . وقتتون بخیر و ممنون از این همه وقتی که میزارین
یه سوالی داشتم . خواستم بپرسم علامت دلار یا همون $ برای چه موقعی استفاده میشه ؟
من تو مدلم یه مجموعه ای رو تعریف کردم که در اونS>(d(i,j))
حالا میخوام در یک سامیشن به عنوان کران پایین، j رو عضو این مجموعه تعریف کنم
میشه کمکم کنید ؟
سلام
دقیقا نفهمیدم سوالتون رو، ولی علامت دلار برای شرط گذاشتن برای گمزه. مثالهایی که به دردتون میخوره تو کامنت های مختلف تو سایت اومده. در هر حال در خدمتم
سلام و خسته نباشید. چند سوال دارم که ممنون میشم توضیح بدین.
1. در حالتی که مساله دو هدفه باشه، روش اپسیلون به چه صورتی هست و باید چیکار کنیم؟
2. و اینکه نتایجی که تولید می کنه به صورت چندهدفه هست؟یعنی هربار اجرا به تعداد اهدافمون عدد میده؟
3. و در ابعاد کوچک مساله، معمولا توی مساله های تک هدفه، جواب متلب و گمز برابری می کنه، حالا با توجه به اینکه کد متلب هربار بیشتر از یک جواب میده، این برابری به چه صورتی باید باشه؟
خیلی ممنونم
سلام
1. خب مدل رو طبق متدی که ارائه شده کد می کنین و ازش جواب میگیرین.
2. به تعدادی که مسئله رو تقسیم میکنین جواب برای تابع هدفاتون ارائه می ده. مثلا برای هر کدوم ده عدد بهتون میده
3. کد متلب اگه منظورتون الگوریتم های فرا ابتکاری و ابتکاریه، این جوابا دقیق نیستن هر چند ممکنه جواب دقیق رو بدن. کلا هر وقت بخواین دو رویه رو با هم مقایسه کنین باید مقیاس داشته باشین، بعضی مقیاس ها شامل اینا هستن: زمان حل توسط هر رویه، تعداد تکرار برای رسیدن به جواب، گپ هر کدام در یک زمان مشخص و …
خواهش میکنم و موفق باشین
سلام،بله شما درست می فرمایید الان متوجه اشتباهم شدم راستش من یک محدودیت دارم که این متغیر توی اون استفاده شده ولی چون این محدودیت برای هر زیرمجموعه 2 تایی و 3 تایی و … از مجموعه j باید برقرار باشه استادم به من گفت که چون ممکنه loop ایجاد بشه من این محدودیتو تو مدلم نذارم و در آخر که جوابهامو از مدل گرفتم بصورت دستی بررسی کنم که آیا این محدودیت نقض میشه یا نه؟حالا نمی دونم این کارو بکنم یا نه چون فکر کنم به احتمال زیاد بیشتر جوابهام توسط این محدودیت نقض بشه
امکانش هست من این محدودیتو براتون اینجا بنویسم تا شما نظرتونو راجع بهش بفرمایید؟شرمنده م ممنون میشم از لطفتون
سلام
این کار حتی اگه یه جواب نشدنی هم به وجود بیاد باز اشتباهه. چون هدف از مدلسازی، ارائه مدلیه که بقیه هم بتونن بهش استناد کنن.
بفرستین ببینم چجوریه
سلام،وقتتون بخیر
N مثلا مجموعه {0,1,2,3,4,5} و E مجموعه ی (i,j) هایی هست که در اون i,j عضو N هستن و i<j هستش. (E(S هم مجموعه ی (i,j) هایی از E هست که در اون i,j عضو S هستن(S زیرمجموعه N هستش.(X(i,j,k,t و (z(i,k,t هم هر دو متغیرن.
حالا محدودیت من اینه
((sum(i$S,z(i,k,t))-z(e,k,t)=g=sum((i,j)$E(S),X(i,j,k,t
و این محدودیت برای هر S زیرمجموعه N که حداقل دو عضو داشته باشه(ینی مجموعه های 2 تایی و 3 تایی و … و 6 تایی) و برای هر e عضو مجموعه S و برای هر k و t برقرار هست.
ممنون ازتون
مرسی همچنین.
مجموعه E رو عرض کردم خدمتتون تو یکی از کامنتا.
الان مهمترین چیزی که نیاز دارین، تعریف مجموعه s هست. این مجموعه رو میتونین با استفاده از کامنتی که برای آقای غفاری در بخش مجموعه ها گذاشتم تعریف کنین.
درصورتی که S رو خوب تعریف کنین، فکر میکنم با این اوصاف تمام اون چیزی که نیاز دارین رو فهمیدین. اون کد رو تو گمز کپی کنین و یه بار ران کنین و نتایجش رو ببینین. بعد میفهمین چیکارش کنین
موفق باشین
سلام براتون فرستادم
بی نهایت ممنونم از کمکتون
سلام و وقت بخیر.براتون کامنت گذاشته بودم و اون محدودیتو توضیح داده بودم ولی مثل اینکه نرسیده دوباره براتون می نویسمش.
یک مجموعه به اسم N داریم که مثلا شامل اعداد {0,1,2,3,4,5,6} هستش. E مجموعه ای از زوج مرتب های بشکل (i,j) هست که در اون i,j هر دو عضو N هستن و i<j هستش.
(E(S هم مجموعه (i,j) هایی از E هستش که در اون i , j عضو مجموعه S هستن.(فرض می کنیم S زیرمجموعه N هستش). در ضمن (X(i,j,k,t و (Z(i,k,t هر دو متغیر هستند.
حالا محدودیتی که من دارم به این شکل هستش:
(sum((i,j)$E(S),X(i,j,k,t))=l=sum(i$S,Z(i,k,t))-Z(e,k,t
و این محدودیت به ازای هر S زیرمجموعه N که اندازه ش بزرگتر مساوی 2 هست برقراره(ینی زیرمجموعه های 2عضوی و 3 عضوی و… تا 6 عضوی) و برای هر e عضو مجموعه S , هر k و هر t ای برقراره.
میشه لطفا کمکم کنید.خیلی خیلی ممنونتون میشم
نه کل کد اندازه یه دفتر صد برگه. تو وورد میشه صد صفه. اما کدهای مربوط به این متغیر همینه.
خیلی شرمنده انقد سوال میپرسم اما تنها در صورتی که کد محدودیت رو این
RT.LO = -INF;
RT.UP = +INF;
RT.L = RT0;
بزنم قبول میکنه و جواب میده.
در غیر این صورت میگه تعداد معادلاتت از مجهولاتت بیشتره. در واقع با این حد بالا و پایین گذاشتن واسه متغیر دستگاه حل نمیشه چون فکر میکنه یک متغیر کم شده.
سلام
model type رو CNS گذاشتین؟ یا شایدم MCP؟
فرض میکنم از این دو استفاده کردین. ببینین MCP این محدودیت گذاشتن رو قبول نمیکنه! باید کاملا آزاد باشه متغیرتون. به جاش سعی کنید که یه معادله دیگه به فرمول هاتون اضافه کنین به شکلی که این محدودیت بازه رو که میخواین برای متغیر اعمال کنین رو نشون بده. دیگه با ابتکار خودتون.
اگه اینا رو نتونستین یه کار دیگه هم میشه کرد. اینکه شما یک متغیر رو optimize کنین با ی چیزی مث dnlp. فعلا گذارش رو بدین تا عرض کنم
سلام
سوال داشتم از حضورتون
من میخواستم یک متغیر رو محدود کنم مثل نرخ بهره که حد بالا و پایین داشته باشه اما وقتی حد بالا و پایین تو بخش اسکار میذارم دستگاه حل نمیشه. دلیلش اینه که من 157 متغیر و 157 مجهول دارم اما دستگاه میگه متغیرهای آزادت کمه البته جفتش رو 157 نشنون میده
SCALAR
ROWCLOS rest-of-world closure /1/;
FSAV.FX = FSAV0;
EXR.LO = -INF;
EXR.UP = +INF;
EXR.L = EXR0;
RT.LO = 0;
RT.UP = 0.21;
RT.L = RT0;
در بخش جواب هم اینو میگه
MODEL STATISTICS
BLOCKS OF EQUATIONS 48 SINGLE EQUATIONS 157
BLOCKS OF VARIABLES 46 SINGLE VARIABLES 157
NON ZERO ELEMENTS 583 NON LINEAR N-Z 254
DERIVATIVE POOL 10 CONSTANT POOL 105
CODE LENGTH 772
**** Unmatched variable not free or fixed
RT
**** Counts do not match
Single equations in unmatched =E= blocks 157
Unmatched single free variables 156
**** Unmatched free variables = 156
سلام
متغیر همون مجهوله. من نفهمیدم واقعا، لطفا کدتون رو بذارین کامل
Variables
RT loan rate of return;
Equation
YBANKDEF.. YBANK =E= (rt * LOANT) – (R * TDT);
Initial value
RT0 = SUM(INSDNG,SAM(‘DBK-CA’,INSDNG))/SUM(CAPINSNGP, SAM(CAPINSNGP,’DBK-CP’));
RT.L = RT0;
DISPLAY
RT.L;
RT.LO = 0;
RT.UP = 0.21;
RT.L = RT0;
DISPLAY RT.UP ;
کل کدتون همینه؟؟
سلام شبتون بخیر واقعا شرمنده ام من دوباره مزاحمتون شدم سؤالی داشتم از حضورتون
اگر یک متغیر داشته باشیم به نام (X(i,j,k,t که باینری هست و این محدودیت برای هر (i,j) عضو (E(i,j برقرار باشه (عرض کرده بودم خدمتتون که (E(i,j زوج مرتب های (i,j) هست که در اون i از j کوچیکتره) و در اون i باید مخالف صفر باشه، حالا یک متغیر دیگه داریم به نام (X(0,j,k,t که فقط مقادیر 0 و 1 و 2 رو می تونه شامل بشه.من این دو محدودیت رو نمی دونم چطور تعریف کنم اگر کمکم کنید ممنونتون میشم.
سلام
ببینید شما می تونید که i1 رو به عنوان مجموعه مرجعتون تعریف کنین. این محموعه مرجع شامل مقادیر i هست به علاوه مقدار صفر. پس شما بهتره مجموعه i رو زیر مجموعه i1 تعریف کنین. به این شکل: (فرض کنیم که i از یک تا ده باشه)
set i1/0,1*10/
i(i1)/1*10/;
بعد شما نیاز دارین که X رو تعریف کنین. x رو هم به صورت زیر می تونین تعریف کنین. این تعریف به شما این امکان رو میده هرجا بخواین 0 رو به کار ببرین یا i رو:
variable x(i1,j,k,t)
برای اطلاعات کاملتر، بخش مجموعه ها رو کامل بخونین.
سوالی داشتین در خدمتیم
سلام جناب محمودی،ممنون از پاسخگوییتون. فکر کنم شما متوجه منظور بنده نشدید سوال من اینه که ما فقط توی محدودیتها با دستور $ روی دامنه ها شرط می ذاریم ولی الان من این شرطو میخوام توی تعریف متغیر بذارم مثلا توی تعریف متغیر من (X(i,j,k,t عضو مجموعه {0و1} هست ولی جلوش این شرط رو داریم که :
(i,j)∀ که عضو (E(i,j هستش و i≠0 و هر k عضو K و هر t عضو T
مشکل من اینه این متغیر تو هیچ محدودیتی نیست که اگر بود من این شرطها رو همونجا براش میذاشتم و این متغیر فقط توی تابع هدف تعریف شده.من این شرطایی که جلوش هست رو نمی دونم کجا براش تعریف کنم.
و اینکه قسمت دوم سؤالم اینه که همین متغیر در صورتی که i برابر صفر باشه یعنی (X(0,j,k,t علاوه بر مقادیر 0و1 مقدار 2 رو هم می تونه اختیار کنه بنظرتون برای تعریف این متغیر بصورت زیر بنویسم درسته؟
/set j/1*5
/set jj/0
(semiint variable X(jj,j,k,t
X(jj,j,k,t).lo=0
X(jj,j,k,t).up=2
سلام
ببینید تو قسمت متغیر، شما نمیتونید این شرط ها رو بذارین. به یاد داشته باشین یه متغیر فقط وقتی تو معادلات استفاده میشه معنی پیدا میکنه. پس شما یه بار X رو تعریف میکنین، تو مرحله بعد، هر جا X استفاده بشه شرط رو می تونین براش بذارین.
سوال دوم، بله همینی که تعریف کردین درسته. فقط دقت کنین که هر چی کدتون ساده تر باشه ویرایش و فهمش آسون تره. پس خیلی ساده تعریف کنین X1(i,j,k,t) به یک متغیر باینری هست و متغیر x2(j,k,t) یک متغیر شبه صحیحه.
سلام
یک سوال داشتم بزرگوار
من یک ست به این صورت تعریف کرده ام
set i pump /1,2/ I
الان اگر بخوام به پمپ یک و 2 دو هر کدام یک عدد مجزا بدهم چطور باید آدرس دهی کنم؟
چون اگر اینجوری بنویسم p(i).L=4
هم پمپ1 رو 4 در نظر میگیره هم پمپ2 رو
اما من میخوام به پمپ 1 مقدار 4 بدهم و به پمپ2 مقدار10
ممنون میشوم راهنماییم کنید
متشکرم
سلام این روشا خوبه:
Parameter a(i) /1 4,2 10/ ;
Or
Parameter a(i);
A("1)=4;
A("2")=10;
موفق باشین
ممنونم
خیلی لطف کردید
شما هم موفق باشید
با سلام
من یه محدودیت دارم که باید خطی بشه . ولی تو محدودیت متغیر لگاریتمی دارم. جطور می تونم تغییر متعیر رو اجرا کنم. مثلا فرض کنیم در محدودیت اول داشته باشیم
log x1+ x2=L=10
چطور می تونم تغییر متغییر بدم. مثلا
t=log x1
تا محدودیت به فرم t+x2=l=10 تبدیل شودو خطی شود.
با تشکر
سلام
همین روشتون صحیحه. ولی باید t رو متغیر تعریف کنین. و به حدود واقعی t توجه کنین! مقداری دقت کنین بهش. بعد اینکه برنامه هم جواب داد، یه پارامتر به اسم x1 تعریف کنین و مقادیر t رو به x1 تبدیل کنین
موفق باشین
سلام من یه پروژه گمز دارم موقعی که اجراش می کنم این ارور رو میده شما می دونید مشکل چی هست و مربوط به اعداد هست یا اینکه محدودیت ها؟ واقعا ممنون میشم راهنمایی کنید..
generating MINLP model test
Error at line 123: Equation infeasible due to rhs value
United_8.gms(153) 4 Mb 1 Error
...
سلام
مسئله شما نشدنی هست، فضای شدنی رو بررسی کنین. یک یا چندتا از محدودیتا تناقض دارن با هم.
اول بیاین یه محدودیت رو در نظر بگیرین، کن کم زیادشون کنین، اونجا مشخص میشه مقداری که کدوم یک از محدودیتا داره مشکل ایجاد میکنه.
سر به سرش بذارین مقداری
مرسی که راهنمایی کردین.
همین کاری که گفتین انجام دادم بعد 8 تا از محدودیتام مشکل داشت و حذفشون کردم و اجرا که کردم یه جواب بهم داد.
بعد یه سری تغییر توی داده هام ایجاد کردم، محدودیتارو اضافه کردم دیگه مشکل نداشت ولی جوابی که میده همون مقدار اولیه هست که بدون اون محدودیتا هم همون بود. در حالی که محدودیتای تاثیر گذاری هستن و به نظرم این یه کم غیر منطقیه.
حتا یه دونه از محدویتام مشکل داشت و دوباره و بدون تغییر، اجراش کردم و دیگه مشکل نداشت! امکان همچین چیزهایی هست یا مشکلی در کل وجود داره؟
ممنون
سلام
اینکه همون جواب اولیه رو بده مقداری غیر منطقیه، چون احتمالش در حد صفره. پس شما ناحیه شدنیتون مقداری ممکنه مشکل داشته باشه، به قولی تنگ تر کنین محدودیتا رو
خیلی ممنون از جواب سریعتون. من البته یه کار دیگه کردم، اونحایی که set تعریف میشه، اندیس ها رو دستی و برای j از 1 تا 3 و برای i از 4 تا 8 گذاشتم و درست شد. خیلی ممنون.
یه سوال دیگه هم دارم، من دو متغیر دارم که یکیش غیر منفی (non negative) و اون یکی باینریه. میخوام در صورتی که متغیر اولم مقدار بزرگتر از صفر میگیره، متغیر دومم مقدار یک بگیره و در صورتی که متغیر اولم صفر میشه، دومی هم صفر بشه. میخوام به صورت محدودیت بنویسمش.
سوالم OR ایه، میدونم ولی احتمالا شما میتونین جواب بدین.
بازم ممنونم
سلام
ببین من این سوالو لارها تو کامتتا جواب دادما، دو یه تا محدودیت میشه دیگه، یکم فک کنی اوکیه، M بزرگ
u /1*8/
i(u) /1*3/
l(u) /1*5/
سلام و تشکر از سایت و پاسخگویی بی نظیرتون.
من یه سوال در مورد تعریف اندیسها دارد.
فرض کنید یه مجموعه U دارم که اجتماع دو مجموعه I و L هست. تا اینجاش رو همونطور که خودتون گفته بودین نوشتم.
کد این قسمت و تو کامنت بعدی گذاشتم
حالا برای اینکه مشخص کنم مثلا هرجا 1 تا 3 استفاده شد، منظورم مجموعه I بوده و هرجا اندیس 4 تا 8 استفاده شد، منظورم مجموعه L بوده، باید چیکار کنم. چون فرض کنید یه مسأله مسیریابی داریم که همه نقاط تو مجموعه U اومده و وقتی داریم جدول فاصله رو تعریف می کنیم، فاصله همه گرهها رو توش نمایش میدیم. اما گاهی فقط با مجموعه i که مثلا انبارها هست سروکار داریم. ممنون
…
سلام
ممنون و خواهش میکنم
کافیه که تو اون محدودیی که متغیر یا پارامتری که استفاده میکنین، به جای u بذارین i یا L.
یعنی شما یه بار مثلا x(u) رو تعریف میکنین، سری بعد مثلا تو محدودیت اول باید فقط مقادیر i رو بگیره. پی اونجا میزنین x(i).
به همین سادگی
سلام
من میخوام در مدلم یکی از متغیرهای باینری رو ریلکس کنم. یعنی فقط یکی از متغیرهای باینریم بجای 0 یا 1، مقداری بین 0 و 1 داشته باشه. میشه راهنماییم کنید؟
ممنون
سلام
نوع متغیر رو positive تعریف کنید و برای upper bound و lower bound تعریف کنین.
برای اطلاع از این دو ویژگی به بخش متغیرها مراجعه کنین
موفق باشین
این کار رو کردم، اما مدل من خیلی بزرگ هست و زمان حل برام خیلی مهمه، با این کار زمان حل خیلی بیشتر شد! گفتم شاید دستوری باشه که بشه بعضی از متغیرها رو ریلکس کرد.
تشکر
سلام
من یه متغیر اینتیجر تعریف کردم ولی جوابش 16.125 شده .
مگه میشه؟؟؟؟؟؟
سلام
من تو یه مدل متغیر اینتجر تعریف کردم ولی تو جواب همراه با اعشار اومده
مگه میشه؟؟؟؟؟
سلام
بله میشه
جولبتون دقیق نیست. Solver گمز نتونتسته مقدار شدنی پیدا کنه، اجبارا فرض صحیح بودن متغیر رو ازاد سازی کرده
سلام
من متغیرکمکی رو تعریف کردم ولی نمی خواهم اون مقدار مثبت بگیره پس باید متغیر متناظر دوال اون محدودیت مقدار مثبت داشته باشد تا شرط مکمل قوی برقرار باشه چطور می تونم بیان کنم که متغیر دوال متناظر با این قید باید بیشتر از یه عدد ثابت باشه.بعنوان مثال اگر SI متغیر باشه می خواهم در محدودیت اول (CONST1) متغیر متناظر این قید یعنی v1 مثبت بتشه بعبارتی SI.M مثبت باشه چطور میشه این کار رو انجام داد
با سلام
قبل از هر چیز از مطالب مفیدی که در سایت قرار می دهید تشکر می کنم. من یک سوال در مورد تعریف متغیرها دارم. یک مجموعه 35 عضوی برای j دارم که یکی از متغیرهای مدل تنها می تواند مقادیر 10و13 و 15 را از بین این مجموعه اختیار کند. چگونه می توان بیان نمود که این متغیر تنها به ازای اندیس های فوق برقرار است.
ممنون
سلام
روش اول، برای اینکار باید از ابتکار عمل داشته باشین. میتونین متغیر رو به ازای j تعریف کنین و این متغیر رو روی یه مقدار که وجودش رو بی معنی میکنه فیکس کنین (مثلا بگین که مقدارش 100000 میشه و اگه این بشه تاثیری رو جواب نداشته باشه) بعد تو خط بعدی بگین که همین متغیر به ازای 10و13و15 مقدار (level, .L) منطقی رو بهش بدین. چون اگه این کارو بکنین به مدل اجازه میده که به متغیر به ازای این سه عدد بتونه مقدار بده.
روش دیگه اینه که همچین متغیری تعریف نکنین و صرفا سه متغیر دیگه تعریف کنین و تو دهنتون مثلا x1 رو همون x(“10”) بگیرین و بقیه ماجرا
روش دیگه اینه که این متغیر رو تعریف کنین. مثل X(j) و j رو هم با مثلا jj آلیاس alias کنید. بعد هرجا x(jj) و j داشتید با استفاده از شرط بگین که jj باید برابر این سه تا باشه
روش چهارم اینه که بعد اینکه مجموعه رو تعریف کردید، یک مجموعه دیگه تعریف کنید که زیر مجموعه مجموعه اولی باشه و فقط این سه عو توش باشه. مناسب ترین روش احتمالا روش آخره
چقد زیاد شد
موفق باشید
سلام
من متغیرمو تو گمز باینری تعریف کردم ولی اون پیوسته در میاره…به نظرتون مشکل از چیه؟
باتشکر
سلام
مدلتون نشدنی هست احتمالا، و یا اینکه تایپ مدلتون رو گذاشتین rminlp که از آزاد سازی استفاده می کنه
خواهش میکنم
مرسی
مدلم مسیریابی داره…برای داده های کوچیک ران کردم…متغیر رو صفر و یک درمیاره…ولی داده ها مو بزرگ میکنم…پیوسته در میاره
با minlp حل کردم….
احتمال داره ایراد از لایسنس باشه؟ مثلا گمز و لایسنس بهم نخورن؟
سلام
اگه جواب داده که خیر همچین مشکلی وجود نداره. مشکل نشدنی بودنه ظاهرا
خواهش میکنم
اشکالشو فهمیدم..محدودیت غیر خطی داشت. که باعث شده بود گمز برای مثالهای بزرگتر جواب اشتباه بده…وقتی خطی کردم درست شد. البته با محدودیتهای غیر خطی، مثالهای کوچیک حل میشند ولی جوابشون شدنیه…بهینه نیست
فقط یه سوال. من مثالمو بزرگتر تر از 20 مشتری میکنم گمز 16 دقیقه حل میکنه بعدش بدون اینکه جوابی بده متوقف میشه…بخش solvar نیست..مشکل از چیه؟
باتشکر
سلام
شرط توقف در گمز یکیشون زمانه. به صورت دیفالت گمز هزار ثانیه یا 16 دقیقه متوقف میشه.
خواستین بیشترش کنین کد زیر رو به اول مدلتون اضافه کنین:
Option reslim=3600;
3600 یعنی بعد انقد ثانیه متوقف شو
خواهش میکنم
سلام . نرمالیزه کردن در توابع هدف به چه صورت است.من در مدل ریاضی پایان نامه ام دو تا تابع هدف دارم که در کد گمز باید نرمالیزه بشند به چه صورت باید این کار را انجام بدم.لطفا راهنمایی بفرمایید تشکر
سلام
تشکر از مطالبتون
در قسمت ۴٫ مقدار کنونی یک متغیر دستور داده شده اشتباه است.لطفا اصلاح فرمایید.
دستور از ۳٫ ثابت کردن یک متغیر
* How to assign a attribute to the variables
variable x ;
x.fx=5 ;
variable y(j) ;
y.fx(j)=10; کپی شده
سلام
خسته نباشید
من مدلم را براتان ارسال کردم ولی جوابی ندادین و برای انجام پروژه هم هرچه تماس گرفتم کسی گوشی بر نمی داره.
سلام وخسته نباشید
من نرم افزار گمز و متلب رو لینک کرده ام و به راحتی می توانم از متلب یک عدد اسکالر را به Gams بفرستم و سپس نتایج شبیه سازی رو به متلب برگردانم.
ولی الان نیاز دارم یک ماتریس بفرستم و در Gams به یک Table تبدیل کنم. حال موندم چطوری در گمز یک Table خالی بنویسم.
میشه کمکم کنید؟ خیلی سپاسگذارم
من خودم این دستورو مینویسم ولی وقتی از متلب داده میفرستم جدول رو پر نمیکنه.
sets i /1*2/
j/1*32/;
Table Y(i,j)
/ 1
1
;
سلام خدمت شما
میخواستم بدونم که حد بالا و پایین یک تابع هدف رو چطور میشه بذست آورد؟؟
شما یکی از حدود رو دارین. اگه مینیمم سازی باشه، پس شما مینیمم تابع رو دارین. واسه بدست آوردن ماکسیمم کافیه که تو یه محدودیت، مقدار تابع هدف رو کوچکتر مساوی یک متغیر آزاد قرار بدن. تو حالت بهینه برابر ماکسیمم میشه
با سلام و ضمن تشکر از راهنماییهای مفیدتان
متغیر عدد صحیح در برنامه ام تعریف کرده ام که در راهنماهای موجود برای گمز نوشته شده که به صورت پیش فرض برای متغیری که از این نوع تعریف شود مقادیر 0 تا 100 را در نظر می گیرد. چگونه حد بالای این محدوده را تغییر دهم؟
پیشاپیش سپاسگزارم
سلام
خواهش میکنم.
بعد تعریف متغیر x به شکل زیر حد بالا داده میشه.
variable x;
x.up=200;
یک برنامه ای دارم می نویسم که یک سری متغیر دو اندیسه را باید بده به عنوان مثال beta(i,j) وقتی این متغیر رو معرفی می کنم اررورuncontrol set entered as constant می ده.
کلا چه جوری باید این متغیرهای دو و یا چند اندیسه را معرفی کنم.ممنون میشم به سوالم جواب بدین
سلام
مشکلی نداره تعریف یه متغیر. فقط حواستون باشه که سیمیکالون هاتون رو همیشه و با دقت بذارین. معمولا دستور table مشکل واسه متغیر ها ایجاد میکنه. اینو یادتون نره. بعد هر دستوری = سیمی کالون.
مثالهای تعریف متغیر تو همین تاپیک موجودن
با سلام
این عبارت که متغیر ایکس با اندیس آی و تی داشته باشم و بخواهم بنویسم به ازای آی برابر با یک و هر مقدار تی متغیر صفر شود را چگونه بنویسم؟
پیشاپیش از توجه شما سپاسگزارم
سلام
این روششه. بعد تعریف متغیر x به شکل زیر بنویسین:
variable x(i,t);
x.fx("1",t)=0;
توجه کنین که fx همون fix کردن یک متغیر هست.
پاینده باشید
سلام و خسته نباشید
من یک سوال در مورد تعریف متغیر داریم .کلا بحث اینه که دو سری مجموعه داریم E1 و E2 که هر کدومشون تعدادی عضو دارند حالا می خواهیم یک مقدار به یکی از عضوهای E1 اضافه کنیم و مقداری دیگه از تمام اعضای E1و E2 کم کنیم بطوریکه مجموع مقادیر کم شده برابر با اون مقداری باشه که اضافه شده و قاعدتا مقداری رو که می خواییم اضافه کنیم باید برای واحد تحت ارزیابیمون تعریف کنیم. مشکل اصلی تعریف اون متغیر اضافه شده برای واحد تحت ارزیابی است که فقط به خروجیشم اضافه باید بشه .چه جوری باید این متغیر رو معرفی کنم که بفهمه فقط مربوط به خروجی , تحت ارزیابیه؟
ممنون میشم راهنمایی کنید.البته دو اندیسه هم است.یک اندیس مربوط به واحد تحت ارزیابی یکی هم مربوط به خروجی ها.
با سلام
در صورتی که در قسمتی از محدودیت ها با متغیر ایکس با اندیس تی کار کرده باشم که اندیس آن را در قسمت مجموعه ها مثلا اعداد شامل 1 تا 40 در نظر گرفته ام آیا در صورت نیاز به استفاده از متغیر ایکس با اندیس تی منهای یک می توانم منهای یک را صرفا با اضافه کردن ان به اندیس اعمال کنم؟ چون جایی خواندم که با اندیس مثل رشته برخورد می کند و در نتیجه اگر چنین باشد اعمال منهای یک در اندیس درست کار نمی کند…
اگرواقعا چنین است شما چه راه حلی پیشنهاد می کنید؟
سلام
منها عمل میکنه. فقط به مقادیر پایین و بالای اندیس دقت کنین که مثلا صفر نشه اندیسه. از دستورای شرطی استفاده کنین
سلام. ببخشید من یک سوال در مورد گمز داشتم
من یک متغییر X دارم که free variable هست. حال می خواهم یک y تعریف کنم که اگر x>0 بود y=x شود در غیر این صورت (یعنی X<=0).
سوال من این است آیا می شود قبل از مدل این کار را انجام داد؟ یعنی یک y تعریف کرد که شامل مقادیر مثبت x باشد؟
سلام
نه
باید تو محدودیت ها این کار رو انجام بدین. یا باید محدودیت مناسبش رو بنویسین. و یا اینکه تو یک محدودیت از دستور ifthen استفاده کنید.
پاینده باشید
سلام متشکرم که جواب دادین.
مگر در قیود هم می توان از if then .. استفاده کرد؟
میشه یک نموه برا همان x و y که در سوالم پرسیدم بنویسید؟
متشکرم
این یه مثاله:
c1.. x=e=ifthen(t>3,y,y+1) ;
یعنی x مساوی y هست اگر t از 3 بزرگتر باشد. در غیر این صورت x=y+1 است.
سلام برای وقتی که به ازای یک شرط، چندتا متغیر مقدار میگیرن چی؟ مثلا همین که نوشتید
c1.. x=e=ifthen(t>3,y,y+1) ;
اگه به ازای t>3 داشته باشیم x=y , p=w , u=r چطور نوشته میشه؟ تک تک؟
با and از هم جداشون کنین.
بله تک تک
سلام،خسته نباشید و ممنون از مطالب خوبتون.
میخواستم بدونم میشه غیر از متغیر اصلی مدل یک متغیر باینری توی تعریف متغیرهام معرفی کنم و بدون اینکه مشخص کنم چه وقت صفر یا یک میشه از اون توی معادلاتم استفاده کنم یعنی یک متغیر باینری که هیچ رابطه ای در مورد نحوه مقدارگیری اون بیان نشه رو تعریف و استفاده کنم مثلا یه حالت تصادفی داشته باشه؟
و اگر امکانش هست آیا درصورتی که به ازای مقدارتصادفی که گرفته مثلا صفر محدودیت برآورده نشه آیا اون در ادامه حل مقدارش رو به مثلا یک تغییر میده؟
خیلی متشکرم
سلام
بله دقیقاً همین کار رو می کنه.
اگه مطمئنین که مقدار صفر یا یک میگیره کافیه نوع متغیر رو باینری تعریف کنین.
اگه مطمئن نیستین که چه اعدادی رو ممکنه بگیره، شما یه متغیر آزاد باید تعریف کنین.
به کد زیر دقت کنین.
Binary Variable x;
Variable Y;
x صفر و یک بوده و y همه عددی می تونه بگیره.
متن همین صفحه رو بخونین.
موفق باشین
سلام، ممنون از راهنماییتون.
به امید موفقیت روزافزونتون.
ممنون علی عزیز
شما هم همینطور
سلام
خیلی عالی بود… ممنون از مطالب خوبتون.. استفاده کردم.. 🙂
سلام
خواهش میکنم. لطف دارین
سلام
مطمئنید کدها درسته؟
اخه داخل positive variable و… که ابعاد متغیر نوشته نمیشه…
سلام
منظورتون چیه از ابعاد؟
اوکی متوچه شدم.مرسی
من تو مدلم یه متغیر موجودی دارم که سه اندیسه است و مقدارش برای دوره صفر ثابت است
t دوره (3 تا دوره)
tt دوره صفر
i مشتری( مثلا 2 تا مشتری)
r کالا (2 تا کالا)
میخام بگم موجودیم بری دوره صفر برای هر محصولی در هر مشتری برابر یه مقدار ثابت است و برای بقیه دوره متغیره.
چه جوری بنویسم؟
positive variable
I(i,t,r
;
I.fx(i,tt,r
؟؟ مثل جدول بنویسم
باتشکر
سلام
شما اول مجموعه ها رو تعریف کنید به شکل زیر:
set tt/0,1*3/
t(tt)/1*3/
;
بعدش متغیر I رو باید تعریف کنید و مقدار اولیه رو صفر بگیرید.
به شکل زیر:
variable II(i,tt,r)
;
I.fx(i,"0",r)=Constant;
تو کد بالا به جای constant اون مقدار اولیه رو قرار بدین.
توجه داشته باشید وقتی مجموعه I هم تعریف کردید دیگه متغیر I باید اسمش فرق داشته باشه، مثلا II بشه.
مقداری هم تو فرمول نویسی دقت کنید که t رو بزنید یا tt رو.
موفق باشید
با تشکر فراوان خیلی خوب بود
سلام
بابت مطالب مفیدی که گذاشتید بسیار سپاسگذارم
اگر امکان دارد راجع به خطاهایی که هنگام اجرا کردن مدل ایجاد می شود، هم توضیحاتی قرار دهید.
سلام
ممنون
چشم حتماً. وقت کردیم حتماً Error های GAMS رو حتما توضیح میدیم.
موفق باشین.
سلام ارتباط بین متغییر حالت با صفر ها و قطب ها رو میدونیی؟
سلام
چی هستن اینا.