مجموعه ی اندیس ها، پارامترها، جداول و متغیرهای مسئله تعریف شد. نوبت می رسد به وارد کردن معادلات، محدودیت ها، تابع هدف و… . همانطور که می دانید، مدل های بهینه سازی شامل دو بخش تابع هدف و محدودیت ها می شود.
معرفی و اعمال این معادلات در دو بخش Equation Declaration و Equation Specification انجام می شود. مثال زیر را در نظر بگیرید:
همانطور که ملاحظه می شود، در بخش اول دستور یا Equation Declaration، به تعریف و اعلام اسامی تابع هدف و محدودیت ها به همراه وابستگی اشان به اندیس های متناظر می پردازیم. co6 را در نظر بگیرید؛ این گذاره صرفا اسمی است که توسط کاربر برای محدودیت ششم انتخاب شده است و هیچ ارزش دیگری ندارد. در حالی که co1(i,j) وابستگی محدودیت اول به اندیس های i و jرا نیز نشان می دهد. و این معادل همان علامت ∀ در جبر خواهد بود. پس در واقع co1(i,j) یعنی قید اول به ازای هر i و j باید برقرار باشد. محدودیت جبری معادل:
در بخش دوم یا Equation Specification، در هر سطر، اسم هر معادله یا نامعادله که در بخش اول به تعریف آن پرداختیم، آورده خواهد شد و سپس دو نقطه (..) مطابق شکل بالا جلویش خواهیم گذاشت. دقت شود که اگر در قید، شرطی مانند i≠j نیز داشته باشیم باید این شرط را قبل از دو نقطه ای که گذاشته ایم اعمال نماییم. اگر مبتدی هستید، هیچگاه تایپ دو نقطه را فراموش نکنید! چون برطرف کردن خطاهایی که به هنگام run کردن مدل خواهید دید، انصافاً شما را به شدت عصبی می کند!
مثال: کد محدودیت زیر را مشاهده می کنید:
محدودیت:
کد:
*Example
co1(i,j,l)$(ord(i) ne ord(j)).. z(i,j,l)=l=z(j,j,l);
در فرمول های بالا قواعد و قوانینی در فرمول نویسی استفاده شده اند که در بخش تابع نویسی توضیح داده خواهند شد. در صورت نیاز به این بخش ها مراجعه نمایید. در اینجا صرفاً مهارتی که در تعریف محدودیت ها کسب می کنید مدل نظر می باشد.
دقت کنید که در بخش اول تنها یک سیمی کالون استفاده می شود، در حالی که در بخش Specification پس از بیان هر معادله باید یک سیمی کالون به کار برده شود.
در معادلات و نامعادلات، دیگر از علایم ≠یا=،≤،≥ استفاده نمی کنیم. نمادهایی که در معادلات و نامعادلات در GAMS به کار می روند به قرار جدول زیراند:
از سنبل هایی که در جدول بالا معرفی شد، به ندرت پیش می آید که از =n= و =c= استفاده شود. در واقع این نمادها کاربرد خاص وتخصصی دارند.
جهت روشن تر شدن موضوع مثال زیر را در نظر بگیرید:
کد مربوط به به بخش معادلات این مدل به شکل زیر می تواند باشد:
*Example2
Equation
objective
Constraint1
constraint2
;
objective.. o=e=x1+x2 ;
constraint1.. x1*x2=l=10 ;
constraint2.. x1-x2=g=2 ;
دقت کنید که کد بالا کامل نیست و باید قبل از تعریف این معادلات متغیرهای x1 و x2 و همچنین متغیر مربوط به تابع هدف یا o قبلاً تعریف شده باشند.
بپردازیم به ادامه ی مثال کاربردی 1:
مدل تنها دو محدودیت دارد. آن ها را به ترتیب cont1 و cont2 و تابع هدف را obj می نامیم. نتیجتاً کد مربوطه به صورت زیر خواهد بود:
بحث در باب تعریف معادلات در GAMS به اتمام رسید. با اندکی تمرین و دقت می توانید به سادگی تعریف کردنِ معادلات و وارد کردن تابع هدف و محدودیت ها را فرا بگیرید. مباحث تکمیلی در همین برگه خدمت عزیزان ارائه خواهد شد.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش دستورات نهایی مدل، در نوار کناری سمت راست (منوی داینامیک دسته بندی) مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
سلام
در محدودیت های دارای Mبزرگ
M را چگونه باید تعریف کنیم؟
سلام. بستگي به مسئله و ديتاهاي ان دارد.
اما در ساده ترين حالت اگر اعداد ديتاي شما بزرگتر از 100000 نيست، همين مقدار را در نظر بگيريد.
به صورت كلي بايستي اين عدد كمترين مقدار ممكن باشد و كاملا به نوع مدل و ديتاهاي ان بستگي دارد.
سلام وقت بخیر استاندارد محدودیت X2a>0.1Xa به چه صورت هست و به چه صورت وارد گمز کنم؟
سلام. در محدوديت ها و در بهينه سازي چيزي به فرم كوچكتر يا بزرگتر اكيد نداريم. شما بايستي ان را به فرم كوچكتر مساوي يا بزرگتر مساوي بنويسيد.
مثلا محدوديت شما به صورت زير ميشه:
با سلام
بنده یک معادله دو سطحی دارم که با استفاده از روش تئوری دوگان و kkt به تک سطحی تبدیل کردم خیلی دنبال مشکل گشتم که مشکلش چی می تونه باشه ولی پیدا نکردم.
برنامه ای که نوشتم عمل می کنه ولی تمام جواب ها رو صفر در میاره این مشکل از کجا می تونه باشه ممنون میشم اگر راهنماییم کنید با تشکر
سلام وقت بخیر
سوال اول اینکه، بدون این رویکرد جواب درستی میده؟
سوال دوم، مراحل رو درست طی کردین؟
مسئله فالور باید بره تو مسئله لیدر به عنوان محدودیت، بعد برای تابع هدف فالور، متغیرهای لاگرانژ تعریف میشن به هموان متغیرهای دوال ما محسوب میشن. بعد باید شرایط kkt رو اعمال کنین، و از kkt استفاده کنین تا متغیرهای دوالیتی رو حذف کنین تا مسئله به یک سطح تبدیل بشه.
من فکر میکنم یا از اول جواب نداده مسئله یا اینکه متغیرها رو درست تعریف نکردید.
اگر لازم باشه که کد رو براتون ارسال کنم تا اصلاح بشه از چه طریقی باید اقدام کنم
با سلام دوباره
بنده شرایط kkt و دوگان قوی رو از یک کد آماده پیدا کردم و یکم شک دارم به درست بودنش. آیا منبعی می شناسید که نحوه اعمال این شرایط و همچنین تبدیل یک معادله دو سطحی به تک سطحی رو توضیح داده باشه. ممنون میشم بهم معرفی کنید
با تشکر
سلام و وقت بخیر
ایا کد زیر برای حل یک تابع سه هدفه با روش اپسیلون محدودیت به درستی نوشته شده است؟
به نظر میاد در کل مشکلی نداره، حالا ممکنه که مقداری نیاز باشه جهت ها رو مجدد چک کنین، به نظر من مشکلی نداره. و این یکی از راه های اپسیلون هست که از لکسیکو به اون صورت اصتفاده نکرده و تقویت نشده.
سلام و سپاس از سایت بسیار خوبتان
برای محدودیتی به صورت sum(j,$k(j), lambda(j)*x(i,j))+lambda(p)*xo(i)=l=xo(i) آیا این دستور برای lambda(p) و پارامتر xo(i) درست است یا نه؟
سوالتون در بخش قبل پاسخ داده شده. لطفا ببينيد.
سلام وقتتون بخیر. ممنون از سایت خوبتون. ببخشید من در محدودیت هام یک محدودیت دو ضابطه ای دارم . میخواست ببینم اگر از if استفاده کنم ایا باید این محدودیت به عنوان اخرین محدودیت اورده شود؟ با تشکر
سلام و روز بخير.
لطفا دقيقتر سوالتون را توضيح ميدهيد؟
منظورتون از دو ضابطه اي چي هست؟
با سلام
ایا استفاده از دستور ord برای تعریف معادلات به شکل زیر درسته؟ و اگه اره این نحوه تعریف رو چه زمانی میشه انجام داد؟
WaterStoraget(t,s,m)$(ord(t) and ord(s) and ord(m))
سلام و ادب
خیر درست نیست. اینی که نوشتین معنیش اینه: t و s و m . چی میخواید بگید؟
سلام. لينك زير را ببينيد.
https://t.me/gamsbook/1528
سلام
وقت بخیر
بی زحمت این کد بررسی می کنید؟ جواب کارایی بیشتر از یک می دهد. نمیدونم کدوم دستور اشتباه نوشتم
تشکر
سلام وقت شما بخیر
نمیدونم.
تو این مدلهای DEA، اگر کارایی بیشتر از یک بشه، معمولا مشکل از جهت محدودیت و منفی و مثبت ها هست. جایی که تتا هم استفاده میشه مهمه. به نظرم با یک مقاله چک کنید مدل رو
خیلی ممنونم
ببخشید تعریف رادیکال ها (sqrt) در قیود درست هست؟ آیا باید دستور دیگری هم به مدل اضافه کنم به این دلیل که در مدل رادیکال داریم؟
سلام وقت بخیر
مشکلی نداره. فقط اگر متغیر داخلش هست خب مسئله غیر خطی میشه. ارور میگیرید؟
سلام و عرض ادب
ارور خیر ولی دقیقا مثل قیود کد نویسی انجام داده ام اما جواب بی کران می دهد.
با سلام
جناب آقای مهندس بنده چند روز قبل هم از شما سوال رسیدم و لطف کردید پاسخ دادید.
یک مشکل دیگه هم دارم که اگگر بشه اونم راهنمایی فرمایید.
توضیح کلی مسئله:
بنده تعدادی فرمول دارم که باید در یک حلقه با شمارنده ای که اندیس آن K هستش کرار صورت گیرد تا با یک شرط خروج تکرار خاتمه پیدا کند. در این حلقه من سه اندیس دیگر که دو تای آن نشان دهنده گره در یک شبکه برق هست و دیگری زمان مواجه هستم.
سوال اول اینکه وقتی من از این حلقه تکرار استفاده می کنم آیا باید اندیس های زمان و گره را در اندیس حلقه بنویسم یا خیر و اگر خیر چگونه می توانم حلقه را بنویسم تا برای تمامی گره ها و در تمامی ساعات انجام گیرد.
سوال دوم. در لابلای فرمولهای من نیازمند جمع مقادیر بدست آ»ده در تکرار قبل هستم تا جایگزین مقداری در تکرار بعدی شود و وقتی اندیس های زمان و گره را در حلقه استفاده می کنم دیگر امکان استفاده آن در sum وجود ندارد.
به شکلی تقریبی مسئله به شکل زیر می باشد
با تشکر وعذرخواهی از بابت اینکه شاید نتوانستم مطلب خودم رو کامل عر کنم خدمتتون
سلام زنده باشید
لطفا زمانی که بحث رو شروع میکنیم، به همون سوال و جواب ادامه بدیم که کسی که میاد میخونه سوال رو بدونه مربوط به چی هست.
چون دستور if داریم، ظاهرا نیاز به اندیس n,m,t,k در لوپ هست که رعایت کردید شما هم. اگر sum خاصی مد نظر شما هست، به نظرم میشه از کد زیر ایده بگیرید.
اینطوری میشه سیگما هم زد. stop هم ببینید کجا باید بیفته، احتمالا روی لوپ k باید باشه.
سلام وقت بخیر
ببخشید نحوه شمارش اندیس ها در سور عمومی رو میخواستم بدونم.
مثلا در محدودیتی که سور عمومی اون شامل سه اندیس هست که یکی از اندیس ها وابسته به دو اندیس دیگر هست، چطور و به چه ترتیب باید این سه اندیس رو وارد کرد؟ در واقع ماکزیمم مقداری که اندیس سوم میگیره از یک جدول و شامل درایه مربوط به دو اندیس قبلی هست. یعنی برای اینکه ماکزیمم مقدار رو دریافت کنه باید یک شرط رو به سور عمومی اضافه کرد. ممنون میشم نحوه کد کردن رو بفرمایید.
سلام
مثال زیر رو ببینید شاید ازش ایده گرفتین.
سه اندیس i,j,k داریم، جدول T هم داریم، حالا میخوایم تو محدودیتمون بگیم اندیس k برابر با عدد مربوط به پارامتر T هست که از i,j تشکیل شده.
با سلام خدمت استاد گرامی
بنده ی تابع دارم که می خوام با روش تکرار و شرط خروج معادلم رو حل کنم
معادله بنده به صورت زیر هستش
λ _nm^(k+1)=[λ_nm^k-ξ_λ^k (P_nm^k-P_mn^k )]
m,n تعداد گره های شبکه بنده هستش و k مرحله تکرار. البته در این روابط ما برای 24 ساعت خواهیم نوشت.
بنده می خواستم در صورت امکان روش مناسب برای ایجاد حلقه و نحوه اعمال شرط خروج که باید
λ_nm^(k+1)-λ _nm^(k) کمتر از اپسیلون باشد رو برای بنده شرح بدید. واقعا ممنون می شم اگر پاسخ تون رو به ایمیل بنده ارسال فرمایید.
با تشکر رحیمی
سلام وقت بخیر
طبق چیزی که من متوجه شدم، شما یک تابع دارید که توی هر تکرار یه اتفاقی براش میفته و در نهایت گمز باید متوجه بشه که کجا باید توقف کنه. حالا این توقف ممکنه قبل از اتمام لوپ باشه.
مورد زیر رو ببینید.
کد رو ساده نوشتم براتون که بتونین خودتون بهینه کنین. ممکنه بخواین از مجموعه ها استفاده کنین بجای استاپ.
ممنون از لطفتون
فقط اقای مهندس من کانتر که K هسش رو کجا جا کنم اونم لطف کنید راهنمایی کنید.( m ، n اندیس های گره های شبکه برق هستش )
اگر ایتریشن روی k با انجام بشه، اندیس لوپ رو همون k بذارید.
با سلام.
در نرم افزار گمز میشود قیودی را که موجب حل نشدن مساله می شوند را شناسایی کرد و در یک حلقه آنها را کنار گذاشت تا مساله به جواب برسد؟
ممنون میشم راهنمایی کنید.
سلام
اگر بصورت خودکار هست این فرآیند، من ایده ای ندارم. احتمالا بشه و ولی من اطلاع ندارم.
سلام
ممنون از اینکه با حوصله جواب همه رو میدین
من تو مدلم 3 دسته محدودیت دارم که دسته اول همشون اعمال میشن
ولی از 4 محدودیت دسته دوم باید یکی
و از 6 محدودیت دسته سوم هم حداقل باید یکیشون انتخاب بشن و در صورت انتخاب یکیشون متغیر مربوط به اون محدودیت در تابع هدف ضرب بشه
میشه راهنمایی بفرمایید که چطور باید این رو کد کنم؟
تشکر
سلام زنده باشید
اینکه مثلا از دسته سوم حداقل یکی باید انتخاب بشه، معیار انتخاب چی هست؟ چرا solve های مختلف نمی نویسید؟
تو دسته دوم جهات دسترسی هستش که از یکی از 4 جهت باید به بلوک مورد نظر دسترسی داشته باشه و این رو هم گزارش کنه که از کدوم سمت دسترسی ایجاد شد (یعنی کدوم محدودیت انتخاب شد).
تو دسته سوم که 6 تا حالت داره باید حداقل یکیش برقرار باشه و این رو هم مدل خودش میتونه تصمیم گیری کنه که کدوم باشه بر اساس مقدار هزینه که اعمال میشه (مسئله مینیمایز میکنه منظور) واسه من مهمه که حتما حداقل یکی برقرار باشه.
چون مدل یکپارچه هستش و تابع هدف که توش 3 تا متغیر باینری استفاده کردم به صورت همزمان تو همه محدودیت ها استفاده میشه.
ممنون میشم اگر یه راهنمایی بفرمایید
با این توضیحات انگار همه محدودیت ها باید در دستور model باید بیان ولی همه الزاما کارکردی نیستن. یعنی الزاما مدلهای جدا از هم تشکیل نمیشن، مدل خودش میاد تصمیم میگیره که کدوم زائد هست کدوم نیست.
اگر درست متوجه شده باشم، پیشنهادم این هست که مثلا برای دسته دوم 4 متغیر باینری به نام y1,y2,y3,y4 تعریف کنیم. به شرح زیر:
برای دسته سوم هم که حداقل یکی باید برقرار باشه، میشه به صورت زیر نوشت:
بست به مدلسازیتون میشه تغییرش داد.
خیلی ممنون از لطفتون اوکی شد.
الان اگر محدودیتی بخوام تو محدودیت های دسته دوم تعریف کنم که به صورت z(i,j) = y4 باشه، این رو چطور باید تعریف کرد؟
یعنی میخوام تو دسته دوم متغیر چهارم برابر با متغیر باینری اصلی مدلم باشه که اگه 3 تای بالایی نشد y4 رو یک بزاره و گزارش بده.
این محدودیت خودش مقداری داستان داره. اولا چرا باید برابر باشه. ثانیا این محدودیت میگه که اگر y4 یک بشه، کل zij ها هم باید یک بشن. و بالعکس. مفهوم رو شفاف تر بیان کنین روش فکر کنیم با هم
ببینید من یک سری محدودیت دارم که جهت دسترسی به بلوک رو تعیین میکنن.
قبل از اینکه این محدودیت هارو تعریف کنیم مدل خودش از بالا بر میداشت. حالا میخوام تعریف کنم که برای اینکه بتونی یک بلوک رو برداری باید از یکی از سمت های جانبی (شمال،شرق،غرب،جنوب) بهش دسترسی داشته باشی که میشه 4 تا و پنجمی هم اینه که اگه دیدی به بلوک دسترسی نداری میتونی مثل قبل از همون بالا برداری ولی در اینصورت (یعنی اگر Y5 برابر 1 شد) یک هزینه به مدل اعمال میشه.
حالا من او 4 تا جهت رو تعریف کردم مشکل هم نداره ولی وقتی پنجمی رو تعریف میکنم مدل میاد فقط اون رو انتخاب میکنه. مشخص میکنه که مثلا از شرق بهش دسترسی داره ها ولی بازم از بالا برداشت میکنه. این هم بگم چون مدل minimization هستش چون اگه از بالا برداره باید یک مقدار به هزینه ها اضافه بشه، منطقیه که از استخراج از بالا اجتناب کنه و اونی که دسترسی داره رو از جانب برداره ولی نمیکنه.
کل مشکل همینه.
با این توصیف شما احتمالا محدودیتی دارین که نمیذاره y3 (اگه جهت شرقه البته) برابر با یک بشه.
برای اینکه این مفهوم برقرار بشه، باید محدودیتی بذارین که اگر حداقل یکی از جهت ها در دسترس باشه، y5 باید صفر بشه. من نمیدونم متغیرهای شما چی هست، ولی قطعا یه سری متغیر صفر و یک دارن و میتونین از M بزرگ هم استفاده کنین.
با M بزرگ نوشتم اتفاقا ولی باز هم انتخاب نمیکنه
اون بخش از کد که مربوط به این محدودیتها میشه رو اینجا میذارم یه نگاهی بندازین اگر ممکنه.
زیادی بحث داره. در واقع من متوجهش نشدم.
به نظرم جدای از اینها
یه محدودیت بنویسید، که اون مفهوم رو پوشش بده. یکی یکی هم اضافه کنین. مثلا اگر شرق هست، بالا رو نگیر. خیلی ساده بنویسین و هر بار یکی بهش اضافه کنین.
با M بزرگ نوشتم اتفاقا ولی باز هم انتخاب نمیکنه
اون بخش از کد که مربوط به این محدودیتها میشه رو اینجا آپلود کردم یه نگاهی بندازین اگر ممکنه.
محدودیت های 10 تا 14 مربوط به این ها میشه.
https://uupload.ir/view/ws1_1i28.rar/
در ضمن این محدودت ها مربوط به این مقاله هستن که در بخش محدودیت دسترسی ماشینآلات به بلوک فرمول ریاضیشون اومده. دقیقا دارم همین قسمت رو مدل میکنم
https://www.sid.ir/paper/117136/fa
ببخشید که اینقدر وقتتون رو میگیرم
سلام. اگه دو تا سامیشن داشته باشیم که اندیس یکی وابسته به اندیس دیگریه باید چی کار کنیم؟ مثلا i از صفر تا نه و j از i+1 تا ۱۰.
اگه تو یکی از محدودیت ها، محدوده سامیشن وابسته به یه اندیس باشه کدش چطوری میشه؟ مثلا i از صفر تا k-1 و k میتونه مقادیر یک تا نه رو بگیره
سوالام از مدل تصادفی این مقاله است:
https://doi.org/10.1016/j.cor.2003.09.012
پیشاپیش ممنون از پاسخگوییتون
سلام و عرض ادب
من دو مثال براتون می زنم اینجا احتمالاً جواب رو پوشش بده
اگه اشتباه تایپی چیزی داره لطفا اصلاح بفرمایید.
نکته دیگه اینکه دقت کنید از اول j رو تا 10 تعریف کرده باشید.
سلام، خیلی متشکرم
یه مشکل دیگه برام پیش اومده اینه، من محدودیت زیر رو به این شکل کد زدم ولی خطای ۱۲۵ میگیرم که میگه set is under control already
سلامت باشید
شما نباید هم تو صور عمومی یه اندیس رو تعریف کنید و هم در سیگما یا عملگرهای دیگری مثل smax. بنابراین به جای (i,j,s) که در smax هستند. بنویسید smax((ip,jp,sp),u(ip,jp,sp)) و این سه اندیس جدید رو با موارد مربوط به خودشون آلیاس کنین. مثلا alias(i,ip)
با سلام و احترام
من در مدلی که برای کالای زوال پذیر نوشتم در یک محدودیت سامیشن دارای کران بالا به صورت
min{T,t+e}
هست. نحوه نوشتن کد گمزش رو نمیتونم بنویسم. ممنون میشم دوستان راهنماییم کنن.
سلام و عرض ادب
فرض میکنم که t , e هر دو اندیس هستن. اگر e پارامتر هست، به جای ord(e) بنویسید e کافی هست. اگر هم متغیر هست رویه کلا عوض میشه.
جناب آقای محمودی از لطف شما سپاسگزارم.
در محدودیت زیر
با دو خطای 149 مواجه میشم. راهکار شما برای برطرف کردن این خطاها چیه؟
سپاس مجدد از حضرتعالی
سلامت باشید
ببینید این خطا فکر میکنم مرتبط با این محدودیت نباشه. خطاها رو به ترتیب و از اول باید رفع کنید. شما تعریفی اینجا انجام ندادید تا ارور تعریف جدید بده بهتون.
در اینجا ارور دیگری می تونه براتون پیش بیاد. اینکه شما گفتین t مساوی یه تابع از t هست. این از نظر گمز اشتباه هست. باید یه tp با t آلیاس کنید و تو صور عمومی محدودیت بنویسید tp و t رو داخل سیگما بر اساس tp محاسبه کنید.
سلام و عرض ادب
در نرم افزار گمز دو تابع هدف خطی با محدودیتهای خطی میتوان نوشت؟؟
سلام و ادب
بله. فقط روش های حلش ممکنه متفاوت باشه
سلام ممنونم
ممکنه بیشتر توضیح بدین و اینکه از کجا شروع کنم؟
ببینید گمز به خودی خود دو هدفه یا چند هدفه حل نمی کنه. شما باید با استفاده از یه روش بهش دستور بدین که مسئله رو حل کنه.
یکی از راه های برخورد با مسائل چند هدفه، روش وزنی هست. یعنی مثلا هدف اول و دوم با هم جمع میشن و هر کدوم ضرب در یک ضریب وزنی میشه. w1z1+w2z2=z3 و z3 بهینه میشه.
روش ها زیاد هستن. باید مقداری در موردشون مطالعه کنین. چندتاشو رو می نویسم.
روش وزنی
روش معیار جامع یا lp-metric
روش برنامه ریزی آرمانی
روش لکسیکوگرافی
روش اپسیلون محدودیت
سلام اگه مجموعه قید ها داشته باشیم و تابع هدف نداشته باشیم بخواییم این
مجهول ها رو پیدا کنیم باید چه کار کنیم
سلام و ادب
اگر قرار نیست هدفی داشته باشیم، میشه یه محدودیت جدید به نام مثلا z=e=q به مدل اضافه کرد که z یک متغیر آزاد در علامت هست و q یک متغیر مثبت. و به مدل دستور میدیم که z رو کمینه کنه. طبیعتاً جواب تابع هدف 0 میشه و در کنارش جواب سایر متغیرها هم محاسبه میشه.
با عرض سلام و خسته نباشید
من یه تابع هدف مربوط به DEA دارم که میخوام به ازای هر t (سال) و به ازای هر j (DMU) به من خروجی بده.
آیا باید دو تا حلقه بنویسم ، یکی واسه j و یکی واسه t? که یکی درون دیگری باشه؟
و اینکه در تابع هدفم اندیس t دارم که چون هیچ سیگمایی روش تعریف نشده و در تابع هدفم نمیشه سور عمومی تعریف کرد در نتیجه خطای 149 میده. طبق مدل پارامتریکم t در تابع هدف هست.چه جور باید مشکل برطرف کنم؟
پیشاپیش ممنون که وقت میزارید.
سلام و ادب
بله باید دو تا لوپ بذارید، اگر اندیس t هم در هدف دارید و میخواید که حذف بشه و منطبق بر t مربوط به لوپ باشه، دو راه دارید، یک اینکه مثل xo و yo عمل کنید. دو صور عمومی t بذارید، و اندیس لوپ رو tt و پارامتر ttt رو برابر با مقدار اندیس tt بذارید و کنار صور عمومی شرط بذارید که به شرطی که t برابر با ttt باشه. با مجموعه های دینامیک هم میشه کار کرد
سلام جناب محمودی
ممنون از راهنماییتون
مشکل اینجاست که یکبار این مدل حل شده و تابع هدف مدل قبلی که dynamic بوده و t از 1 تا 11 تعریف شده حالا باید اینجا بشه محدودیت (یعنی تابع هدف مدل اصلی میشه محدودیت) و این باعث میشه اندیس های xo و yo با اندیس های xot و yot متفاوت بشه
سلام و ادب
مشکلی نداره. فقط باید دقت کنین که اندیس مبنا توی مدل گم نشه. همون شرط قبلی که گفتم رو می تونید با کمتر مساوی بنویسید و احتمالا نیاز باشه برای مقدار تابع هدف دوره قبل هم یه پارامتر برای ذخیره سازی داشته باشید
و البته از آخرین دوره t=T شروع میکنه و مدل واسه T با در نظر گرفتن محدودیت overall efficiency حل می کنه و به ازای هر t که حل میشه تمام تابع هدفهای t های قبلم که حل کرده محدودیت میگذاره
سلام آقای دکتر
من میخوام برای هر یال در شبکه به ازای هر سطح ظرفیت هزینه تعریف کنم که به صورت صعودی و با توزیع یکنواخت تولید شوند. مثلا برای یال (1,2)، c12,1=1 و c12,2=2 وc12,3=4 که صعودی هستند ولی بصورت توزیع یکنواخت. میشه بفرمایید در قسمت پارامتر کدش به چه صورته؟
و آیا بعد از هر بار اجرا مقدار تابع هدف تغییر خواهد کرد؟ با سپاس فراوان.
سلام و ادب
قاعدتاً شما دارید یه فرض جدید رو به مسئله اضافه میکنید و اگر این محدودیت ظرفیت محدودیت زائد محسوب نشه ممکنه تأثیر بذاره رو هدف (مهمه هدف چیه).
برای تعریف پلکانی، چون ظرفیت رو باید بصورت پارامتر تعریف کنید، دستی یه table بذارید (یا بصورت فرمول اولی رو بهش بدید بقیه رو خودش حساب کنه). بهتره یه اندیس جدید به اسم m یا mode داشته باشید که راحت بشه مدلسازی رو ادامه داد.
برای اینکه متوجه بشید مسئله از کدوم مد استفاده کرده، بهتره یه اندیس به متغیری که ظرفیت روش اثر گذار هست اضافه کنین.
سلام
ببخشید می تونید بگید محدودیت پایین رو چطوری کدنویسی کنم؟
CO2(t)<= CO2(t-1)
سلام
به همین شکلی که نوشتید. فقط دقت کنید که برای t>1 باید شرط بذارید:
با سلام
من توی نوشتن توابع غیر خطی مشکل دارم ،
علامت توان در گمز چیه ؟ اگر میشه مثال بزنید
سلام
توان رو به صورت های مختلفی میشه نوشت. مثلا با دو تا ضرب یا دستور power
سلام جناب محمودی وقتتون بخیر
من 2 تامحدودیت در مساله مسیریابی دارم که میگه شروع مسیر از گره 1 و پایان اون در گره آخر باشه چطور این
محدودیت برای اندیس ثابت باید کدش رو بنویسم؟ مثلا برای شروع حتما از گره اول دارم:
محدودیت =سیگما X(1,j) روی j همه عضوهای مجموعه N به غیر از عضو اول (مجموعه N از 1 تا 5)
چطور بگم i=1 باشه دائم؟
سلام روز بخیر
عملا همه چی رو نوشتید، و تغییرات زیر نیاز هست:
این در صورتی که هست i رو با 1و 2و 3و… تعریف کرده باشین. اگر مثلا اعضای i بصورت i1,i2 و.. تعریف شده، طبیعتا همون مقادیر باید در کوتیشن بیاد
سلام و وقت بخیر
من یه مدل زمانبندی دارم که با الگوریتم آزادسازی لاگرانژ حل میشه، تو قسمت تصمیم گیری برای بدست آوردن حد بالا یک الگوریتم دارم که میگه اگر متغیر باینری من (که همون تخصیص کار به ماشین هست) از صفر بزرگتر بود h رو که از روش هیورستیک بدست میاد رو یک قرار بده در غیر اینصورت صفر قرار بده. میخاستم ببینم این شرط رو باید چجوری تعریف کنم.
سلام و ادب
من متوجه سوال شما شدم، اما متوجه چرایی کد زیرش نشدم.
به هر تقدیر، این یک نمونه می توته باشه:
حالا این وسط، ممکنه لازم باشه که کل این شورت کد رو بذارین تو دستور loop(i . یا اینکه ممکنه به جای h.l بنویسین h.fx
سلام روزتون بخیر
در مدل میشه محدودیتی نوشت که مثلا تولید در یکجا متمرکز نشود؟
سلام و ادب
یعنی چی ؟
مثلا وقتی مدل رو run می کنم همه تولید رو می بره توی یک کارخونه و اون رو بین کارخونه های دیگه توزیع نمی کنه
بستگی به نوع مسئله متفاوت میتونه باشه.
یه راه میتونه این باشه که محدودیت ظرفیت برای کارخونه ها بذارین.
یه راهش اینه که فاصله ها رو منطقی کنین. خیلی ها فواصل نقاط رو بصورت تصادفی در نظر می گیرن که این کار اشتباهیه، بهتره که اول مختصات x,y نقاط رو بصورت تصادفی تولید کنین، بعد فواصل رو اقلیدوسی حساب کنین.
سلام و عرض ادب
من یک محدودیت به صورت زیر دارم این رو چطوری کدنویسی کنم:
i (steam,gas, combinedcycle, diesel, hydro,
( wind, solarpv,atomic
CAPi(t)≤ Smax(i) i∈(solar.hydro.wind)
سلام
بهتره یه مجموعه به اسم مثلا ip تعریف کنین که اون سه تا رو شامل بشه. یعنی:
و توی محدودیت هم از smax(ip) استفاده کنید.
سلام روزتون بخیر
من یک مساله مسیریابی وسیله نقلیه با پنجره زمانی دارم با توجه به آموزش های سایت نمی دونم دوتا محدودیت زیر چطور در گمز کد کنم ممنون میشم راهنمایی ام کنین.
U(i) بین عدد 2 و سیگما Y(j) , و j هم عضو مجموعه N ( از 1 تا n) هست.
u(i)-u(j)+1< (n-1)*(1-X(i,j)) به ازای هر i و j عضو مجوعه N
سلام و ادب
محدودیت مربوط به زیرتور هست، بنویسید کدش رو، بعد اگه مشکل داشت بگید براتون رفع کنیم.
سلام وقت بخیر، تابع توان در گمز وقتی که بخواییم یک اندیس روتوی معادله به عنوان توان بیاریم چی هست؟
سلام و ادب
کلا اندیس تو چنین فرمول هایی باید با ord بیاد. مثلا 2 به توان ord(i)
با سلام. من چند تا مقاله را ترکیب کردم و کدنویسی انجام دادم، نتیجه خطایی ندارم، چون دادهها از مقالات مختلف هست با تغییر حتی در مینیمم و ماکزیمم نتیجهها تغییر میکنه، حتی با تغییر بازهی برخی از ورودیها قسمت solver و model گاهی normal و optimal مینویسه گاهی هم نه. ولی حتی زمانهایی که optimal نوشته میشه باز به نظر جواب بهینه نیست.
مسالهم چند هدفه و غی خطی هست. طبیعیه که با تغییر محدودیتِ متغیرها ممکن مساله شدنی یا نشدنی بشه؟ احتمالش کمه مدل رو اشنباه نوشته باشم، اگر از این مورد چشم پوشی کنیم به نطر شما ایراد کار از کجاست؟ و مشخص کردن دادههای ورودی فقط از طریق آزمون و خطا و تسلط به اون تخصص امکان پذیره؟
سلام و ادب
اینکه احساس میکنین مدل درسته، خوبه ولی کافی نیست. با اطمینان بهتون میگم 99% مدل های ترکیبی تو نسخه های اولیه مشکل دارن.
برای بخش غیر خطی اگر امکانش هست خطیش کنین. برای داده ها هم باید حتما مسئله رو خوب بشناسین و طبق شناختتون داده استفاده کنین.
بله طبیعیه هر تغییر کنترل نشده ای مسئله رو نشدنی بکنه.
ممنون از پاسختون
یک سوال دیگه هم داشتم، زمانی که برنامهای اجرا بشه و قسمت solve summary عبارتهای normal competition و optimal نوشته شده باشه اما در پنجرهی احرا عبارت solver did not provide marginals for model ، منظور چی هست؟
گمز این پیام رو معمولا برای مدلهای غیر خطی میده. مارجینال همونمقادیر دوگان نظیر هست. مشکلی نداره و طبیعی هست
حقیقتش اینه که آقای دکتر من با کد بندرز کلاسیک آشنا هستم که با dsp و master كار ميكنه ولی حقیقتش با بندرز تعمیم یافته آشنا نیستم که با sp و mster کار میکنه. ظاهرا کد نویسیم اشتباهه زیرا بعد تکرار اول، مسئله sp نشدنی میشه. هر چقدر پارامترها رو عوض میکنم، نشدنی باقی میمونه. اگر امکان داشت کد رو براتون ارسال میکردم.
sp و master دردسرش کمتره. ولی برای نشدنی شدن sp باید یه ارتباط خوب بین sp و master برقرار کنین. معمولا خلاقانه هست. یه جایی باید جریمه به هدف اضافه کنین که سراغ این جواب نره. یه جاهایی این جواب باید ذحیره بشه و به گمز گفته بشه دیگه تکرار نکنه تولیدش رو.
به نظر باید کلی مطالعه کنین تا یه الگو دستتون بیاد. ما کمکی نمیتونیم بکنیم بهتون
ببخشید، لااقل منبعی برای مطالعه در این مورد معرفی میکنید؟ واقعا به این کد نیاز دارم. اگه راهی هست ممنون میشم بفرمایید
نمیشه منبع خاصی معرفی کرد.
این مقاله رو ببینید. برای مسئله خودش یه خلاقیت به خرج داده. ممکنه برای مسئله شما هم بتونید ایده ازش بگیرید.
https://link.springer.com/article/10.1007/s10479-019-03137-x
سلام خسته نباشید
من از کتاب دکتر سرودی بهنیه سازی چند هدفه رو خوندم در کتاب کد مربوط به بهینه سازی دو هدفه ی پارتو وجود داره، حالا من یک مساله سه هدفه دارم، میشه روش حلشو بگید؟
سلام و ادب
روش های زیادی داره. مثلا اپیلون، ارمانی و… . کدوم روش هست؟
روش اپسیلن
تفاوتی نداره چند تا هدف داشته باشین. کافیه که به ازای هر هدف، محدودیت (به همراه مواردی مربوطه مثل اسلک و…) تعریف کنین. یعنی یک هدف اصلی میشه، بقیه میرن تو محدودیت و اسلک مربوطه میاد تو هدف
کد مدل دو هدفه به صورت زیره
حالا اگه بخوام سه هدفه در نظر بگیریم
اینجوری نوشتم ولی نمیدونم که elim رو چطور باید تغییر بدم
برای هر هدف یه دونه از اینا تعریف کنین. Elim2, Elim3 و مثل همین آپدیت کنین. دقت کنین تو سر مربوط به هر Elim از پارامترهای همون هدف استفاده کنین.
و یه نکته: قبل از کد نویسی. مفاهیم روش اپسیلون رو یاد بگیرین. دیگه کد نویسیش براتون آسون تر میشه. بالعکسش خیلی سخته!
با سلام
آقای دکتر امکان سوال درباره بندرز تعمیم یافته هست؟
سلام و ادب
منظورتون از “تعمیم یافته” چی هست و انگلیسیش چی میشه؟
Generalized Benders Decomposition
اها. خب مشکل چیه؟ کلا بندرزهای تفاوت های زیادی با هم ندارن. شما بخش غیر خطی رو تفکیک میکنین اینجا.
آقای دکتر مدل من یک مدل minlp هست که برای حل آن از الگوریتم بندرز تعمیم یافته استفاده کردم. حقیقتش در کد کردن الگوریتم برای حل مدل به مشکل خوردم. میخواستم بدونم امکان راهنمایی هست؟
چه مشکلی؟مطرح بفرمایید اینجا ببینیم چه کاری میشه انچام داد.
با سلام
میخواستم اگه ممکنه درباره کد نویسی الگوریتم بندرز تعمیم یافته درباره مسائل MINLP بپرسم
سلام
CPgi =E= SUM (G, GDATA (G,’a’) *sqr(P(G) ) + GDATA (
G,’b’) *(P(G) ) + GDATA (G,’c’) ) ; در اینجا sqr چه معنی دارد؟
سلام و ادب
sqr به معنی square یا مربع یا توان دوم هست.
سلام استاد وقت بخیر
من یک مدل MIP دارم که یکی از محدودیت هام به شکل زیر هست :
C(i) =g= C(i-1)+P(i)
که در این محدودیت C و P متغیر هستند و اندیس i به صورت زیر هست :
i=m1,m2,m3,m4
مشکل در اینجاست که اگر i برابر با m1 باشد محدودیت به شکل زیر در می آید :
C(m1) =g= C(m0)+P(m1)
در حالی که اندیسی به نام m0 نداریم و در این حالت مقدار C(m0) باید صفر باشد
برای تعریف این محدودیت اگر راهنماییم کنید ممنون میشم.
سلام وقت بخیر
نیازی نیس اشاره ای بکنید به c0. چون خودش خودکار اونو برابر با صفر در نظر میگیره.
آخه پس چرا وقتی این محدودیت مساله رو به صورت
C(i) =g= C(i-1)+P(i)
مینویسم infeasible میشه
اما وقتی به صورتی تکی هر آیتم رو تعریف میکنم:
C(‘m1’) =g= P(‘m1’)
C(‘m2’) =g= C(‘m1’)+P(‘m2’)
.
.
.
جواب درست میده
اینو تست کنید:
قبلی هم نباید مشکلی داشته باشه البته
سلام تابع توان در گمز چگونه است؟
سلام
از power می تونید استفاده کنید یا از دو تا ستاره. مثال:
سلام
برای محاسبه جز صحیح متغیر باید چیکار کرد در گمز؟
سلام
حین حل مدل یا بعد از اینکه جواب بهینه شد؟
سلام وقتتون بخیر من اگه بخوام یه پارامتری تعریف کنم که برابر اعضای یک مجموعه از مجموعه اندیس هام باشه باید چه کدی بنویسم؟
سلام
اگه منظورتون تعداد اعضای یک موجموعه هست، از card یا کاردینالیتی استفاده کنین.
در اینجا a عدد 4 رو خواهد گرفت.
سلام
(t-tp)- رو چطوری به صورت توان در قسمت معادله ها کدنویسی کنم /t /1398*1430 هست و/ tp /1397
سلام
به جای t-tp بنویسین:
این کار رو کردم اما روی منفی پشت پرانتز رو ارور میده برای اون منفی باید دستور دیگه ای بزنم
منفی هم باید داخل پرانتز باشه. یعنی مثلا کلا بشه tp-t
بعد اینکه دقت کنین که با چی دارین توان می نویسین. دو تا ستاره، power و… با هم متفاوت هستن. چک کنین انواع توان در گمز رو
سلام، بهترین نرم افزار برای بهینه سازی مدل ها در جهان چیست؟
سلام
بهترینی وجود نداره کلا. این واژه بهترین از یک مدل به یک مدل دیگر و از یک مجموعه دیتا به یک مجموعه دیتای دیگه ممکنه متغیر باشه. مثلا تو یه مسئله mip سالور یا نفرم افزار cplex ممکنه از gurobi بهتر باشه. برای یه مسئله دیگه این قضیه برعکس باشه. قانون خاصی نداره.
سلام وقت بخیر من یه محدودیت به صورت زیر دارم
(Sum(a,x(a))=e=sum(k,y(i,k)×k
که تو این a عضو niکه به عنوان اندیس تعریف کردم باید چطوری اینو کد کنمk هم به عنوان اندیس تعریف شده اما اینجا هم سامیشن روی k قرار داره هم تو kضرب شده
سورعمومی هم روی i قرار داره.
سلام
بخش ضرب k رو بصورت ord(k) بنویسین. یا k.val
برای راهنمایی بیشتر اینجا رو بخونین
برای بخش a و تعریف ni هم از مجموعه های دو بعدی می تونین استفاده کنین.
اینجا رو بخونین
سلام درord)k( ضرب میکنم ارور میده
چه اروری؟
سلام
مجموعه نقاط تقاضا i
مجموعه استگاه ها j
مجموعه آمبولانس a
مجموعه آمبولانس که میتوانند به ایستگاه j تخصیص یابدAj
مجموعه از آمبولانس ها که میتواند نقطه تقاضاi را در کمتر از حد مشخص شده پوشش دهد ni
مجموعه از نقاط تقاضا که زمان سفر آمبولانس های تخصیص یافته آن کمتر از sاستba
sهم به عنوان یه پارامتر داده
این مجموعه ها رو چطوری میشه با اعداد دلخواه تو گمز کد کرد؟
سلام
i,j,a که بصورت معمولی تعریف میشن.
Aj هم باید به صورت Aj(a,j) تعریف بشه و بصورت دو بعدی تو دستور set و یا اینکه یه table که هر جا یک بشه یعنی می تونه تخصیص داده بشه هر جا هم صفر شد یعنی نمیشه. و تو معادلات هم هر جا Aj دیدین میگین به شرط Aj. (برای ba,ni هم همین شرط داخل محدودیت ها لازمه)
برای ba هم یه پارامتر تعریف کنین مثل ba(a,i) و بهش عدد ندین. بعد یه شرط (حلقه یا هر چیزی دیگه ای) بنویسین و بگین در صورتی که زمان صفر کمتر از s باشدف ba مقدار 1 و در غیر اینصورت صفر است. برای ni هم هیمنطوری میشه. اینجوری اگه تعریف کنین دیگه هر داده ای بدین قابل انجام هست. البته می تونین بصورت dynamic set این دو رو تعریف کنین. ولی پارامتر راحت تره
سلام وقت بخیر
چطور میتونم سامیشنی رو بنویسم که دارای کران بالا و پایین باشه و هرکدوم متغیر باشن مثلا کران پایین t و کران بالا t+n(i)
سلام
پست زیر در کانال تلگرام رو ببینید.
حد سیگما متغیر
سلام
میخواستم متغیری تعریف کنم که فقط مقدار 1 و -1 را بگیره میشه کمکم کنین؟
سلام
میتونید یه متغیر مثبت آزاد در علامت تعریف کنید. بعد برابر با مجموع دو متغیر باینری بذارینش. مثل مثال زیر:
با تشکر از پاسخ شما جناب محمودی
متشکرم
یه سوال دیگر داشتم و این بود که من یک متغیر مانند X دارم که می خوام وقتی مثبت باشد متغیر Y مقدار 1 بگیره و اینکه وقتی منفی باشد متغیر Y مقدار -1 را به خود بگیره.
دستور IFTHEN سالور بارون حل نمیکنه
اگر بشه راهنماییم کنین که به صورت خطی این مدل کنم
با تشکر
سلام
خواهش میکنم.
موردی که اینجا تعیین کننده می تونه باشه اینه که x اگه صفر باشه کدوم حالت میشه؟
سلام مجدد
با تشکر از پاسخ شما بزرگوار
x اگر 0 و بزرگتر از آن باشد y برابر 1 باشد
همچنین اگر x کمتر از 0 باشد (یعنی منفی) y برابر -1 (منفی یک) باشد.
سلام
سلامت باشید.
روشهای مختلفی می تونه داشته باشه. یه راه اولیه که به ذهن من رسید رو مینویسم اینجا. یکم دیگه فکر کنین ممکنه موارد بیشتر یا بهتری به ذهنتون برسه:
مقادیر مساوی و نامساوی و صفر رو خودتون هندل کنین (از یه مقدار کوچک که به سمت راست محدودیت ها اضافه میشه میتونین اسفتفاده کنین)
سلام من میخوام همچین رابطه ای بنویسم که در آن e(j,t) که j در آن صور عمومی تعریف شده و یک متغیر دیگر داریم با عنوان e(I,t) که در آن i در سیگما تعریف شده است. هر دو اندیس 33 عضو دارند
چطور اینا رو در قسمت متغیرها تعریف کنم آیا فقط اینکه در قسمت متغیر یک بار e(j,t) را تعریف کنم کافی است؟
سلام
اگر i,j آلیاس هستن، بله همین کافیه. اگه نیستن، میتونین بصورت e(*,t تعریف کنین
وقتتون بخیر
جناب محمودی چگونه M که در مدلسازی ها بعنوان یک عدد بزرگ شناخته میشه را به گمز باید بدهیم آیا نحوه خاصی برای این قضیه وجود دارد که گمز متوجه بشود؟
تشکر
سلام
اولا اینکه m رو خودتون باید به عنوان پارامتر تعریف کرده و وارد گمز کنین.
ببینید M بزرگ تعریف مشخصی داره. اینم تعریفش: “کوچکترین عددی که موجب صحت معادله می شود”
بنابراین m نباید کوچک باشد و نباید خیلی بزرگ باشد.
محدودیت x<=m*y را در نظر بگیرید. اگر y باینری باشه و x متغیر غیر صفر، باید اول دید که حداکثر مقداری که x میتونه به خودش بگیره چقدره؟ اگر حداکثرش 90ه، پس m رو میتونیم 100 یا هزار بگیریم. اگر حداکثرش 5 هست، m میتونه مثلا 10 باشه. دیدم عده ای از نوآموزان و حتی حرفه ای های گمز میان مقادیری مثل هزار میلیارد رو برای m در نظر میگیرن. این اعداد به دلیل تلرانس ناحیه شدنی ممکنه موجب زائد شدن محدودیت بشن.
با سلام
ببخشد چجوری ضرب دو متغییر تصمیم که یکیش باینری و دیگری بزرگتر از صفر است را به گمز بدهیم؟
ممنون
سلام
اگه میخواید به همین صورت میتونین کد کنین ولی مدل غیر خطی میشه. طبیعتاً حلش هم داستانای خاص خودشو داره.
اگه میخواین خطیش کنین. فرض کنیم x متغیر باینری و y هم متغیر غیر صفر شما باشه. با روش زیر میشه خطیش کرد.
که اینجا A یک متغیر بزرگتر مساوی صفر هست که برابر حاصلضرب x*y هست.
سلام وقت بخیر
در یک مسئله بهینه سازی فرض شود که دو متغییر باینری وجود دارد. متغیر باینری اول شامل دو اندیس (n,q)X و متغیر باینری دوم تنها به n وابسته است (n)X، در این مسئله اگر متغیر باینری اول به ازای تمام qها یک بار هم 1 شود (به ازای یک n)، متغیر باینری دوم به ازای n مربوطه باید 1 شود.
مدل من خطی است و مینیمم سازی هزینه ها است که با کمتر یا بزرگتر قرار دادن متغیر باینری اول نسبت به متغیر باینری دوم مشکل حل نمی شود و برای کاهش هزینه حداقل مقدار همیشه انتخاب می شود.
لطفا اگر روشی مدنظر دارید در اختیار قرار دهید. پیشاپیش از توجه شما سپاسگزارم.
سلام
مقداری ناقص توضیح دادین. مثلا اگر برای یک n مشخص همه x(n,q ها یک نشن، آیا y(n صفر خواهد شد یا خیر. من طبق برداشت خودم از فرمایشات شما محدودیت زیر رو می نویسم.
در اینجا y همون x دوم شما هست.
سلام خسته نباشید
جسارت عمگر حاصل ضرب به نام پای (Π) در گمز وجود داره اگر وجود داره با چه نمادی تعریف میشود
سلام
مثال زیر رو ببینید. تابع prod اینکار رو انجام میده.
سلام خسته نباشین.
ببخشید میخواستم بپرسم که یک عبارت کسری رو به چه صورت و با چه عملگر منطقی ای باید در گمز نوشت؟ با همین علامته “/” ؟؟؟؟
ممنون از سایت خوبتون
سلام
بله همین علامت هست. فقط دقت کنید همه مواردی که تو مخرج یا صورت هستن باید تو پرانتز بیان.
سلام خسته نباشید
دو تابع هدف خطی ساده با قیود خطی در متلب را اگر ممکن است راهنمایی بفرمایید چگونه بهینه سازی می شود؟
سلام
معمولا اینگونه مسائل با گمز، لینگو، سیپلکس حل میشن. از متلب برای حل مسائل توسط الگوریتم هایی نظیر NSGA II یا MOPSO استفاده میشه.
سلام
من بايد يک مدل رو با گمز بنويسم. اطلاعاتم خيلي کمه شما ميتونيد منبعي به من معرفي کنيد که بتونم ازش کمک بگيرم
سلام
خود آموز گمز خوبه ازش استفاده کنین. و سایت گمزبوک هم اگه مرحله به مرحله جلو برید بهتون کمک میکنه
سلام، وقت بخیر
امکانش هست در مورد کدنویسی تحلیل حساسیت من رو راهنمایی کنید.
ممنون
سلام
ببینید تحلیل حساسیت یعنی اینکه مقدار یه پارامتر رو تغییر بدین و هر بار نتایج تابع هدف رو ذخیره کنین و نهایتا نمودارش رو بر حسب این تغییرات بکشین. این نمودار میشه تغییر رفتار تابع هدف نسبت به پارامتر مذکور. این کار رو میتونید دستی انجام بدین و هر بار پارامتر رو تغییر بدین و جواب رو ثبت کنین. یا اینکه لوپ بنویسین که خودش اینکار رو انجام بده.
بخش حلقه ها در گمز رو بخونید. و مثال زیر هم ببینید.
سلام میشه لطفا جواب منو بدین
من یک رابطه دو ضابطه ای دارم که میگه اگه متغیر p مخالف صفره از رابطه اول برو و اگه متغیر p مساوی صفره از دومی….چجوری باید اینو بنویسم تو گمز؟ با max و ifthen نوشتم ولی میگه اینا پشتیبانی نمیشن
…مدلم minlp هستش….اصلا میشه این مدل رو پیاده سازی کرد؟
سلام
بستگی به اینکه این شرط های شما چند تا هستن میشه روش نظر داد. ifthen برای تعداد محدودی از سالورها قابل استفاده هست. تو همین صفحه find کنین ifthen رو. سالورهایی که مناسب هستن کامنت شدن.
سلام. ببخشید رادیکال رو در گمز چگونه باید تعریف کنیم؟
سلام
sqr,sqrt . بسته به توان از موارد مختلفی استفاده میشه. میتونید از ** هم استفاده کنین که نشون دهنده توان هست. یا از تابع power, rpower و….
سلام
وقت بخیر
ببخشید چجوری میشه روی متغیر شرط نوشت؟ یعنی بگیم مثلا اگه متغیر p مخالف صفر باشه مقدار y از یک رابطه ای به دست بیاد و اگه p مساوی صفر باشه از یک رابطه دیگه؟
با دستور ifthen نوشتم کلا همه رو صفر داد
مدلمم minlp هست
لطفا کمکم کنید هرکاری میکنم نمیشه
سلام
وقت بخیر
ببخشید چجوری میشه روی متغیر شرط نوشت؟ یعنی بگیم مثلا اگه متغیر x مخالف صفر باشه مقدار y از یک رابطه ای به دست بیاد و اگه x مساوی صفر باشه از یک رابطه دیگه؟
با دستور ifthen نوشتم کلا همه رو صفر داد
مدلمم minlp هست
لطفا کمکم کنید هرکاری میکنم نمیشه
با سلام ووقت بخیر با تشکر از سایت خوبتون .بنده یه کد دارم که باید یه سری پارامتر از یک جدول بگیره و عملیاتی رو روی اون ها انجام بده .مشکل من اینه که دوتا شرط داره یعنی در ابتدابه ازای i=tاست ودر قسمت سامیشن به ازای iنامساوی با tباید یک سری کار انجام بدهد که به شکل زیر است
.لطفا بفرمایید که این کد چطوری نوشته میشه و بهتره که در کدوم قسمت بنویسیم .معادلات یا جایی دیگه.ممنون
سلام
سلام من ی مقاله بهینه سازی دارم غیر خطی.میخواستم بدونم چجوری مثلا t^s یاs€t زیر انتگرال یا بالای انتگرال به جای x1 کد کنم.بنده تابحال این درس رو به طور جدی نداشتم و اطلاعات مورد نیازم رو پیدا نمیکنم ممنون میشم
سلام وقت بخیر
قبل از هر چیزی شما انتگرال رو باید دستی انجام بدین، بعد باز شده ش رو وارد گمز کنین. انتگرال قبول نمیکنه گمز. اینایی هم که گفتین بسته به متغیر یا پارامتر بودنشون ممکنه متفاوت باشه جوابش
سلام
چه طور میشه یک عضو مشخص از یک مجموعه رو خارج کرد.
می خوام Yj ها رو جمع ببندم بهازای تمام j=1 تا n ها به استثنای j=k.
باید subset تعریف کنم یا راه دیگه ای هم هست؟
سلام
روش زیاده.
سلام خسته نباشید
آیا ممکن است در گمز معادلات مشتق را بنویسیم یا خیر
اگر هست لطفا روش نوشتن چگونه است و اگر نیست راه حل چیه
ممنون
سلام
گمز مشتق نمیگیره و شما باید دستی مشتق رو بگیرین و وارد کنین. همچنین برای انتگرال هم همین حاکمه
سلام
من یه مدل چند هدفه دارم که برای حلش از روش اپسیلون محدودیت استفاده شده.
یه محدودیت دارم که سمت راست این محدودیت به صورت زیر هست. که TEmin در واقع مینیمم تابع هدف TE هست.
(TEmin + x(i,i >….
این محدودیت رو چطوری باید تو گمز کد کنم؟
یه سوال دیگه هم دارم، اگه بخوام یه همچین چیزی رو تو گمز کد کنم چطوری میشه؟؟
x=minTC
y=maxTC
یعنی x مقدار مینیمم تابع هدف رو نشون بده و y مقدار ماکزیمم تابع هدف رو نشون بده.
سلام ببخشید اگر معادله ای داشته باشیم که سمت چپ آن سیگمای آن از t’ تا t” باشه و متغیرمون هم اندیس t’ داشته باشه و معادله سمت راست متغیرمون اندیس t” داشته باشد. و در قسمت بهازای هم t” داشته باشیم چطوری در گمز کدنویسی میکنیم این کرانها را؟
سلام
1- در خصوص اینکه بنده 42 تا DMU دارم که میخواهم برای تابع هدف مدل من 42 بار تکرار بشه یعنی 42 تا z (تابع هدف) به من بده چکار باید کنم و از چه دستوری استفاده کنم و به چه صورتی آنرا تعریف کنم؟
j index of units /DMU1*DMU42
obj..sum((r1),yo1(r1)* u1(r1))+ sum((r2),yo2(r2)* u2(r2)
sum((r3),yo3(r3)* u3(r3))+ sum((r4),yo4(r4)* u4(r4))+ uo1+ uo2+ uo3+ uo4 =E= Z ;
2-xo ورودی تحت ارزیابی من و به عنوان یکی از پارامترهای مدل می باشد که من مقداری برای آن ندارم و از طرفی x1 را به عنوان شاخص ورودی مدل دارم که مقدار آن مشخص است. از چه دستوری و به چه نحوی میتوانم استفاده کنم؟ آیا دستور ذیل درست است؟
loop(j,
xo1(i1)=x1(i1,j);
xo2(i2)=x2(i2,j);
xo3(i3)=x3(i3,j);
xo4(i4)=x4(i4,j);
yo1(r1)=y1(r1,j);
yo2(r2)=y2(r2,j);
yo3(r3)=y3(r3,j);
yo4(r4)=y4(r4,j);
);
سلام.
من میخواهم یک شرطی رو روی 2 تا متغییر اعمال کنم آیا امکانش هست؟
مثلا دو تا متغییر a و b داریم، میخواهم بگم اگر در فرآینده بهینه سازی a<b بشه یک دستور مشخصی رو اجرا کن.
نکته ای که هست، a و b متغییرهای تصمیم هستن نه ورودی یا پارامتر که بشه به سادگی از ord استفاده کرد.
با تشکر
سلام
لطفا بفرمایید که اون دستور مشخص چی هست
model:
sets:
dmu/1..10/;
input/1..2/:v;
output/1..2/:u;
link1(input,dmu):x;
link2(output,dmu):y;
endsets
data:
x=2 3 1
9 2 1;
y=4 5 8
7 5 3;
enddata
سلام پاسخ این مئل با استفاده روش جمعی درلینگو خواستم ببینم به چه صورته؟
سلام
عملا چیزی ننوشتین. چه جوابی میخواید
سلام اقای محمودی خسته نباشید
اقای محمودی من یه کد نوشتم که دارای دو هدفه است و بدون هیچ گونه خطایی اجرا میشه فقط مقدار مینیمم تابع هدف اول 4856748 نشون میده و مقدار ماکزیمم تابع هدف اول 0 نشون میده و مقدار مینیمم تابع هدف دوم 24325 و مقدار ماکزیمم تابع هدف دوم 35663 نشون میده میخواستم ببینم این مقادیر مشکلی نداره
ممنونم
سلام
قطعا مشکل از کد نویسیتون هست. یا اینکه جواب optimal نداده. چجوری میشه کمترین مقدار از بیشترین بیشتر باشه
سلام روزبخیر، تابع هدف من مقدار U را باید حداکثر کنه که این U از دو مجموعه تشکیل میشه مثلا بهشون بگیم L و M. خود این مجموعه ها داده هاشون با جدول تعریف شده. حالا من دو تا سوال دارم، اول اینکه مثلا میخوام بگم L جمع ضربه داده های جدوله چطور باید کد بنویسم؟ چون هرچی مینویسم خطا 148 رو میده و دومین سوالم اینکه میخوام یه محدودیت تعریف کنم که بگم U جمع جواب دو محدودیت تعریف شده واسه L و M هست، این چطور کدنویسی میشه؟
ممنونم
سلام و ادب
یه کلمه هم نفهمیدم. شفاف تر توضیح بدید لطفا
با عرض سلام تشکر بابت سایت کاربردیتون.
سوالی داشتم، من 2 تا متغییر x و y دارم که هر دو free variable هستن.
قیدی دارک که طبق این قید بایستی ضرب این دو متغییر بزرگتر از صفر شود.
یعنی: x*y) >= 0)
سوال من اینکه آیا روشی برای خطی سازی این قید وجود دارد؟
سلام
ایده ای به ذهنم میرسه الان متاسفانه. هر چند احتمالا خطی سازی این عبارت باز هم غیر خطی میشه.
سلام ببخشید یه سوال داشتم
در قسمت equation در گمز باید به ازای هر اندیس یک سیگمای مربوط به آن اندیس حتما باشد؟
چون در شبیه سازی من یک اندیس دارم اما سیگمایی براش تعریف نشده و سیستم ارور میده
ممنون میشم راهنمایی بفرمایید
سلام
در ارتباط با وضعیت اندیس ها در محدودیت ها، دو تا بحث وجود داره.
یه اندیس یا توی صور عمومی محدودیت هست، یا اینکه در یک تابع مانند sum ترتیب اثر داده میشه. الزامی نیست که حتما سیگما داشته باشه. مشکل رو واضح تر بگید احتمالا بهتر میشه راهنمایی کرد.
سلام وقت بخیر
لطفا در مورد تابع SMIN توضیح دهید که چگونه در یک محدودیت می توانم از آن استفاده کنم و مثلا مینیمم دو عبارت را کوچکتر مساوی مقداری قرار دهم .و سوال بعدی این است که آیا در این حالت مدل من تبدیل به برنامه ریزی غیر خطی می شود؟
سلام
برای استفاده از این تابع در گمز باید مواردی که داخلش هست پارامتر و معلوم باشن و متغیر توش نباشه. اگرم امکان داشت بله غیر خطی میشد.
بهترین راه اینه که شما خطی سازیش کنین. برای خطی سازی این موارد در مورد خطی سازی توابعی نظیر minimax یا maximin جستجو کنین.
سلام خدمت شما
با سلام و عرض خسته نباشید و با تشکر از سایت عالی و مفیدتون
دو تا سوال فوری داشتم ممنون میشم جواب بدین
1. جز صحیح یک متغیر در گمز رو چطوری میشه نمایش داد؟
2. اگر یه محدودیت داشته باشیم که مقدار یک متغیر رو بر اساس متغیرهای دیگه در هر دوره زمانی بدست بیاره تا تو بالاخره یه دوره زمانی به یه پارامتر خاصی برسه. چطوری میشه نوشت وقتی به اون پارامتر رسید دیگه از دوره بعد اون متغیر رو حساب نکنه (به عبارت دیگه استفاده از اون محدودیت از دوره بعدش متوقف بشه)؟
سلام
سوال 1: جزء صحیح در گمز بصورت floor هست. ولی تو بخش equation نباید متغیر داخل floor استفاده بشه.
سوال 2: این صحبت شما یعنی اینکه یک شرط رو محدودیت باید برقرار باشه.
اگر متغیر بزرگتر از فلان شد، محدودیت های بعدی را در نظر نگیر. پس میتونید از دستور ifthen استفاده کنین. که مسئله رو غیر خطی می کنه. تعداد محدودی سالور مانند sbb می تونن اینگونه مسائل رو تحت شرایط خاص حل کنن. بهترین کار اینه که یه بار با ifthen بنویسین. یه بار هم خطی سازی کنین.
سلام. یک set مثل i دارم. میخوام یک محدودیت بنویسم به ازای هر i.
منتها نه همه ی i ها. مثلا فقط برای iهای 2 و 5 و 7 باشه. چجوری میشه نوشت این equation رو ؟
ممنون
سلام
راه حل های زیادی هست.
یکیش اینه که یه j که زیر مجموعه i هست رو به صورت زیر تعریف کنین. و آخرش هم بگین محدودیت به ازای هر j برقراره و تو محدودیت به جای هر i بنویسین j
سلام روزتون بخیر
یه برنامه هزینه تولید نوشتم و هر سناریویی که اعمال میکنم مدل بهش هیچ واکنشی نشون نمیده و اصلا تغییر نمیکنه. مقادیر دوگان محدودیت هارو که چک کردم تقریبا همشون eps شدند و خیلی کوچک هستند راه حلی هست که بتونم این مشکل رو حل کنم تا مدل نسبت به سناریوها واکنش نشون بده؟
ممنون بابت سایت عالییییتون
سلام
یا داده هاتون اونقدر تاثیر گذار انتخاب نمیشن، یا مدلسازیتون مشکل داره. مثلا یه محدودیت دارین به اسم ظرفیت فلان وسیلهف این ظرفیت رو اگه خیلی زیاد بگیرین خب قاعدتا هر چقدر هم وسیله رو بار کنین تغییری تو نتیجه ایجاد نمیکنه. یا مثلا جوری مدل رو نوشتین با تغییر داده ها ممکنه یه سری متغیر تغییر کنن که تاثیری رو تابع هدف ندارن.
سلام وقت بخیر
میشه لطفا جواب سوال منو بدین
من میخوام مقدار یک متغیر یا 0 باشه یا 1 یا 2 تا 10 باشه ولی با دستور integer Variable یا semiint معرفیش میکنم بازم مقادیرش 0.3 و… میشه
مشکلش چیه؟
سلام
با semiint که اینی که گفتین پیاده سازی نمیشه. (اون که 0.3 شده به علت ریلکس شدن هست. option optcr=0 رو قبل از دستور solve باید بذارین)
باید با integer variable تعریف کنین. فرضا متغیر شما u باشه. باید یه متغیر به اسم x که عدد صحیح و یه متغیر دیگه به اسم y(t تعریف کنین که صفر و یک باشه:
محدودیت اول یعنی اینکه حداکثر یکی از y ها یک هست. و محدودیت دوم هم متفیر اصلی شما رو بدست میاره.
سلام
ممنون از راهنماییتون
من کد زیر رو نوشتم و option optcr=0 گذاشتم ولی بازم مقادیرم عدد صحیح نشد
من میخوام مقادیر متغیرم از مجموعه زیر انتخاب بشه
a=[0 1 2 3 4 5 6 7 8 9 10]
کد گمز:
set n/n1*n33/;
set t/t1*t11/;
table a(t,*)
a
t1 0
t2 1
t3 2
t4 3
t5 4
t6 5
t7 6
t8 7
t9 8
t10 9
t11 10;
binary variable x(n,t);
eqc1(n).. sum(t,x(n,t))=l=1;
eqc2(n).. sum(t,a(t,’a’)*x(n,t))=e= ca(n);
solver status و modelstatus برابر چند شده؟
سلام
Solver status 1 normal completion
Model Status 5 locally infeasible
سلام
منو گیج کردین. متغیر شما اگه a هست، چرا با table تعریف کردین؟
نه متغیر ca هست
برای یک متغیر چگونه می توان دو دامنه تعریف کرد؟ برای مثال متغیر قیمت برای چندین کالا در سالهای مختلف چگونه باید در گمز وارد شود
فرض کنید متغیر شما X(i,t) باشه
i کالا و t زمان باشه
می تونید حد و بالا و پایین رو بر حسب زمان و کالا بذارید
x.lo(i,t)=lowlimit(i,t);
سلام خسته نباشید .
من ی سری مجموعه دارم با بازه ی مشخص حالا میخوام تو ی سری محدودیت بازه ی اون انذیس چیز دیگه ای باشه اولا میخوام بدونم چ جوری چند تا شرط رو اول ی مجحدودیت اعمال کنم ؟
و بعد اینکه در مواردی اندیس ها بع اندیس دیگه وابسته هستند .
محدودیتی دارم به ازای 4 اندیس که توی اون محدودیت بازه ی هر اندیس مفتوت از مجموعه اصلی تعریف شده .
ممنون میشم کمکم کنین که چ جوری کد بزنم .
سلام
سوال اول:
سوال دوم:
واضح نیست. لطفا بیشتر توضیح بدین. دقیق بگین سوال چیه. با i,j و…
سلام. ببخشید یک مدل از برنامه ریزی تولید دارم که عدد نداره فقط اندیس و پارامتره. این و چجوری تو گمز بنویسم و بعد برای اندیس هاش مقدار بزاریم ؟ مثلا n و تعریف میکنم بعد برای n عدد تعریف میکنیم
سلام
باید حتما مقدار بدین. گمز از کجا بفهمه اخه که قراره چیو حل کنه.
سلام.ممنون بابت سایت خوبتون
میشه لطفا نمونه کد برای حل توابع چندهدفه با روش وزن دهی بزارین
ممنون
سلام
این یه مثال برای شما.
این روش رو بهش میگن روش وزنی نرمال شده یا روش معیار جامع. بهتر از وزنی ساده هست. برای وزنی ساده کافیه فقط یک معادله با معادلات قبلیتون اضافه بشه. w1z1+w2z2
با سلام و خسته نباشید
من یه تابعی دارم که بر اساس یک متغیر باینری در سه زمان t-1 و t و t+1 مقادیر مختلف به خود میگیره. بر این اساس من 8 حالت دارم که تابع برای هر حالت یک مقدار دارد. چگونه میتوانم با جملات شرطی کد آن را بنویسم؟
با تشکر
سلام
راه حلش خلاقانه ست. قانونی براش وجود نداره.
معمولا شما باید یکی دو تا متغیر صفر و یک تعریف کنین، که بتونه این شرط هایی که بالا نوشتید رو بصورت صفر و یک در بیاره. بعد طبق اون متغیرهای صفر و یک فرمول های مربوط به prg رو بنویسید. من با این فرض اینو عرض کردم که delta متغیر باشه، اگه پارامتره و معلوم، نیازی به اینایی که گفتم نیست و همین شرط ها کافیه. اگه متغیره که روش همینیه که عرض کردم. مقداری فکر کنین، دنبال الگو باشین. مثلا یه متغیر صفر و یک میشه تعریف کرد به اسم Y، که نشون دهنده ی وضعیت دلتا باشه. هر جا دلتا صفر باشه برابر صفر (یا یک) باشه. یا هر مورد دیگه ای…
بسیار متشکرم از راهنماییتون با ifthen کل کردم پاسخ integer solotion بود اما بهینه نشد.میشه بیشتر در مورد راه حل دوم یعنی خطی سازی یه مثال بزنید شاید با این روش بهینه بشه.با تشکر
مثال که چه عرض کنم. باید مقداری در مورد خطی سازی مطالعه کنید. توی اینترنت مثالهای خطی سازی به وفور یافت میشه.
کار شما باید خلاقانه خطی سازی بشه.
با سلام
چطور میشه عبارت زیر را در گمز نوشت ؟
PE-D = PZ …انگاه (DN>0)
PC-D = PR …انگاه (DN<0)
DN یک متغییر است که در خود برنامه باید بدست میاد/اما میدونم از متغییر نمیشه تو دستور شرطی استفاده نمود. چکار باید کنم تا مسئله فوق را بنویسم.
با تشکر
سلام
از دستور ifthen می تونین استفاده کنین تو محدودیت.
خطی سازی هم ممکنه بشه انجام داد. که کار درست تری هست.
یه متغیر به نام y تعریف کنین، که هر وقت dnمثبت بود برابر 1 و در غیر اینصورت برابر صفر بشه. (یعنی یک یا دو محدودیت اضافه کنین)
بعد از این y توی این محدودیت ها استفاده کنین. ممکنه نیاز باشه از M بزرگ استفاده کنین.
اینا چیزاییه که تو ذهنم میاد و دارم بلند بلند فکر میکنم! باید اصلاحشون کنین.
سلام من میخوام ۳ عدد رو از مجموعه ۱۸عددی برای جایگزاری در یک قید انتخاب کنم و این قید دارای ۲ شرط است و این کار رو با
((ord(k) ne 1) and (ord(i) eq 3 and 8 and 14 ))$
انجام دادم ولی فقط i=3 رو در نظر میگیره و اگر مثلا ترتیب نوشتن ۸ و ۳ رو جابه جا کنم ۸ رو در نظر میگیره
ممنون میشم کمککنین
شرطی که نوشتید غلطه
می خوایید به ازای چه مقادیری شرط برقرار باشه ؟
سلام وقت بخیر
لطفا راهنمایی کنید برنامه رو اجرا میکنم ولی مقدار تابع هدفم صفر شده
چیکار کنم؟😭
سلام
solver status و model status رو اول چک کنین. ببینین چی نوشته.
سلام ، وقت بخیر، من یه برنامه میخوام بنویسم که عدم قطعیتها را با روش igdt مدل کنم،امکانش هست یه نمونه کد در این زمینه رو سایت قرار بدید.
سلام
خیر متاسفانه مثالی نداریم.
با سلام. من اندیسی دارم که وابسته به مقدار دهی دو اندیس دیگر هست. با انتخاب دو اندیس دیگر این اندیس از ۱ تا مقدار دو اندبس دیگر حرکت میکند. l اندیسی که روی سیگما از ۱ تا m)k,o( افزایش پیدا میکنه
(i,j,k,l)=e=1;
Co1(o) .. sum((i,j,k,l) ,x(
ممنون میشم راهنمایی کنین l و چطور باید تعریف کنم
سلام
سلام. ممنون میشم راهنمایی بفرمایید شرط تساوی روبا دستور ord چطور عنوان کنم
i=j رو بصورت
ord (i) e ord (j) که مینویسم ارور میده
سلام
بجای e بنویسین eq یا =
سلام
من در برنامم یک متغیر P دارم که اگر CH مقداری برابر یک داشته باشه باید قید Pmax>P>0 براقرار باشد و اگر CH برابر صفر باشه، باید P=0 باشه. (CH یک متغیر باینریه)
خودم به شکل Pmax*CH>=P>=0 نوشتمش، ولی مشکلش اینه که بعضی وقتا CH برابر یکه ولی P برابر صفر میشه.
میشه لطفا راهنماییم کنید چجوری حلش کنم؟
ممنون
قید رو درست نوشتید
گمز هم همون قیدی رو که نوشتید مدل کرده و جواب داده به شما
در قید شما اگر ch=1باشد p اجازه دارد ۰ شود
اینکه ۰ شده بر می گردد به سایر قیود شما
یعنی در مساله شما لازم بوده p صفر شود
سلام من یک مجموعه پروژه دارم که با i مشخص میشع
الان ی محدودیت ناسازگاری دارم که به این صورت هست
و i مجموعه پروژه هها و r متعلق به مجموعه h(i) کهه یعنی پروژه های که باپروژه i ناسازگارند
چجوری نوشته میشود؟؟؟؟؟؟؟
سلام
اول یه h(i,r( تعریف کنین تو قسمت sets، که این مجموعه ها رو شامل بشه. تو مرحله بعد، توی صور عمومی محدودیت شرط بنویسین که r شامل چیا میشه:
مجموعه های دوبعدی را ببینید
سلام مجدد… بله حق با شماست
خوب بذارید این جوری بپرسم
اندیسm به این شکل تعریف شده…
m/1*3/
بعد اندیس n به این شکله که وابسته به اندیس m هست. به این صورت:
n:1,…,n(m)
در واقع اندیس n به ازای مقادیر مختلف m حد بالای متفاوتی داره… الان مشکله من تعریف کردن اندیس n در گمز هست.
ممنون.
سلام
شما میتونین از $set استفاده کنین. سرچ بزنین در موردش.
سلام مجدد…
1. ببخشید من متوجه نشدم که اندیس n رو به چه شکل در گمز باید تعریف کنم؟
2. و این که آیا t یک اندیس واسط هست؟ و برابر حداقل و حداکثر تعداد دوره های ماندن همه محصولات در سردخانه؟ اون رو به شکل تعریف کنم؟
3. طبق اون سوالی که من پرسیدم خط 4 کد شما جواب سوال من میشه درسته
ممنون.
ببینید شما یه سوالی تو ذهنتون هست که خودتون اون رو می فهمید ولی کسی که سوالتون رو می خونه متوجه نمیشه
و نمی تونه به شما کمک بکنه
اندیس n چطوری تعریف میشه بستگی به مدلتون داره و خیلی چیزهای دیگه که خواننده نمی دونه چیه
شما در باره سینتکس سوال کنید نه اینکه مساله شما چطوری حل میشه
سلام … وقت به خیر …
اگر اندیس m تعداد محصولات باشه و به این شکل تعریف بشه (m:1,2,3) و اندیس n تعداد دوره های ماندن محصول در سردخانه و به این شکل تعریف بشه (n:1,2,.., nm ) (حد بالای اندیس n برابر با n اندیس m هست)
در واقع حد بالای اندیس n وابسته به شماره اندیس m هست . بر فرض مثال اگر محصول 1 به مدت 2 دوره در سردخانه باشه، محصول 2 به مدت 3 دوره و محصول 3 به مدت 5 دوره به چه شکل میشه اندیس ها رو در گمز کد کرد…
همچنین اگر x یک متغیر تصمیم باشه و بخوایم x رو روی اندیس n که در بالا شرایطش توضیح داده شد جمع ببندیم به چه شکل میشه اون رو کد کرد… در واقع این عبارت: sum(n,x)
مشکل sum این هست که حد بالاش متفاوت هست.
ممنون.
خیلی ساده
در جایی که کاندیشن می نویسید نباید متغییر داشته باشید همه موارد باید اسکالر یا پارامتر باشند (مقادیر معلوم)
سلام… وقت به خیر…
با فرض این که m، j، l، t و n اندیس و (xbd(m,j,l,t,n متغیر تصمیم باشد. به چه شکل می توان متغیر (xbd(m,j,l,t-n,n را تعریف کرد. برای مثال تابع هدف شامل عبارت زیر است:
یا در یک محدودیت داریم:
ممنون.
سلام
اینجا شما یک اندیس t و یک اندیس n دارین. میتونین یک اندیس دیگه که آلیاس با t هست رو تعریف کنین. مثلا tp
بعد هر جا که t-n داشتین، بنویسین tp و با دستور دلار شرط بنویسین که tp مساوی اختلاف t,nهست.
سلام مجدد… ممنون از راهنماییتون.
در این صورت من باید روی اندیسی که روی sum جمع بسته شده دو شرط بذارم… یکی tp=t-n و یکی هم این که بگم t بزرگتر از n باشه… چون شامل مقادیر منفی نشوند. مثلا روی این sum چه طوری این دو شرط رو اعمال کنم؟
( (sum (n, xbd (m,j,l,t-n,n
ممنون.
سلام
وقتی یک معادله داریم که خودش با شرط بزرگتر یا کمتر بودن یک متغیر دیگر از مقداری هست چطور میشه اون رو نوشت؟ و در کدوم قسمت؟ این کد رو من نوشتم با شرط if ولی ارور میده:
if(S(v,t)>maxStor(v),
spill(v,t)= S(v,t)-maxStor(v);
else
spill(v,t)=0;
);
نمی توانید برای معادلات شرط (با حضور متغییرها بگذارید)
این مقاله را بخوانید
https://cs.stackexchange.com/questions/71091/express-a-complex-if-statement-to-linear-programming
سپاس از پاسختون. در اینصورت باید چه کار کرد؟
نمی توانید برای معادلات شرط (با حضور متغییرها بگذارید)
این مقاله را بخوانید
https://cs.stackexchange.com/questions/71091/express-a-complex-if-statement-to-linear-programming
پاسخ شما داده شد ( ۲ بار)
اگر مایل هستید کسی کد را برایتان بنویسد به بخش سفارش پروژه سایت ایمیل بزنید
سلام
چطور توی equation حلقه بزنیم به صورتی که جوابا به دست بیاره داخل یه پارامتر بریزه و از جواب قبل استفاده کنه و دوباره مساله را حل کنه
فرض کنید شما معادله ای داشته باشید به فرم زیر
شما می توانید پارامتر b را در معادلات بالا عوض کرده (درون حلقه) و تاثیر آن را بر تابع هدف ببینید
شما نمی توانید درون حلقه equation تعریف کنید
شما نمی توانید درون equation حلقه تعریف کنید (جا نیست اصولا !! )
سلام…
یک عدد مثل M که بی نهایت است رو چه طوری میشه در گمز تعریف کرد. باید یک عدد خیلی بزرگ داد یا این که بی نهایتم میشه در نرم افزار تعریف کرد.
scalar M /inf/; Ω
سلام
من در برنامم متغیر SOC(i,t) دارم که به ازای هر i فقط در یک زمان مشخص (برای i=1 در t=13 برای i=2 در t=15 و برای i=3 در t=14) باید مقدار SOC از یه مقداری بیشتر باشه (قید ).
بدون اعمال قید مقادیر SOC در زمان هایی که گفتم این ها میشه:
SOC(1,13)=0.803
SOC(2,15)=0.9
SOC(3,14)=0.437
حالا وقتی قید دومو اضافه میکنم، به شکل زیر:
..SOC(‘i1′,’13’)=g=0.7;
با این که بدون وجود قید هم جواب از 0.8 بزرگتره، مساله Locally Infeasible میشه
از طرفی مقدار SOC به ازای هر i فقط در یک زمان مشخص (برای i=1 در t=7 برای i=2 در t=10 و برای i=3 در t=12) معلومه و من به شکل زیر فیکس کردم SOC رو در این زمان ها:
SOC.fx(‘i1′,’7’)=0.6955665195;
SOC.fx(‘i2′,’10’)=0.5811252335;
SOC.fx(‘i3′,’12’)=0.2653462415;
متوجه شدم که وقتی در قید مقدار رو بزرگتر از 0.6955665195 (مقدار فیکس شده) میذارم مساله INF میشه ولی نمیدونم دلیلش چیه. میشه لطفا راهنماییم کنید؟
ممنون
دفت کنید که برای محدودیت متغییر بجای تعریف equation
از .lo , .up استفاده کنید
بعلاوه زمانی که شما متغیری را فیکس می کنید ممکن است سایر قیود را نقض کنید
سعی کنید فیود را تک تک وارد مدل کنید
یعنی یکبار مدل را با قید ۱
یعنی یکبار مدل را با قید ۱ و ۲
یعنی یکبار مدل را با قید ۱ و ۲و ۳
حل کنید
دفت کنید هیچ کدی بدون داشتن ارور تولید نشده و نخواهد شد
این کار شما به عنوان برنامه نویس است که علت آن را پیدا و رفع کنید
موفق باشید
سلام ببخشید من یه مسیله دارم که تابع هدف خطیه قیدهام هم غیر خطی دارم هم باینری هم خطی چه جوری تو متلب حلش کنم؟
در سوال قبل تابع F فقط شامل اندیس i است… به اشتباه دو بار هم با اندیس i و هم با j نوشتم
سلام … وقت به خیر…
در تابع هدف زیر :
( ( (obj .. z=E= sum( (i,j) , C(i,j)( s(i,j) ) ) + sum ( i , F(i)( u(i
(s(i,j به عنوان متغیر تصمیم تابعی از (C(i,j و همچنین (u(i به عنوان یک متغیر تصمیم دیگر تابعی از (F(i است. تابع (C(i,j به صورت زیر بوده:
(C(i,j)( s(i,j) )= h(i,j)*s(i,j
که (h(i,j پارامتر است و تابع (F(i به شکل زیر است:
(F(i,j)( u(i) )= d(i)+g(i)*u(i
که (d(i و (g(i پارامتر است و این تساوی در صورتی برقرار است که متغیر تصمیم (u(i بزرگتر از صفر شود و زمانی که (u(i برابر صفر شود
F(i,j)( u(i) )= 0
به چه صورت این تابع هدف رو میشه در گمز کد کرد؟
ممنون.
سلام
شما باید عبارت های معادل رو بذارین تو هدف. یعنی مثلا h*s و d+g…
فقط در حالت دوم، در صورتی که u صغر باشه، باید صفر رو حساب کنه و اگه عدد بگیره باید فرمول رو در نظر بگیره.
برای اینکار یه متغیر دیگه مقل y(i می تونین تعریف کنین که صفر و یک باشه. و فرمول رو به شرح زیر تغییر بدین. (غیر خطی میشه و ممکنه نیاز به خطی سازی داشته باشین بعدا)
که باید این محدودیت رو هم به مدل اضافه کنین:
که m یه عدد منطقی و بزرگ هست.
سلام مجدد
چه طوری میشه در گمز یک مجموعه ای از اندیس ها رو از اجتماع دو مجموعه اندیس دیگه تشکیل داد. برای مثال:
/i /1*5
/j /1*3
اندیس k که میشه اجتماع i و j رو به چه شکل بنویسیم؟
سلام. تو بخش مجموعه ها گذاشتیم. یه نگاه بندازین.
بله … متوجه شدم
با سلام…
/i /1*m
/j /1*3
((obj .. z=E=sum((i,j) , c(i,j)*x(i,j
(co(j) .. sum ( i , x(i,j) ) =L= r(j
در تابع هدف و محدودیت بالا (x(i,j و حد بالای اندیس i ( بر فرض مثال m ) متغیر تصمیم هستند. به چه شکلی می تونم حد بالای یک اندیس رو به عنوان متغیر تصمیم در نظر بگیرم.
سلام
مجموعه ای نداریم که حد بالاش متغیر باشه. تو سیگما میشه. یه ایمیل به سایت بزنین و بگین که حد بالای سیگما رو میخوام تا براتون بفرستم یه مثال
بله ، حتما … تشکر
سلام دوستان وقتتون بخیر
من این محدودیت رو تو گمز نوشتم اما ارور 149 رو میده:
co2(k) .. sum((j),x(i,j,k))- sum((i),x(i,j,k))=e= 0;
لطفا منو راهنمایی بفرمایید.
با تشکر
سلام
اندیس iباید یا مثل k توی صور عمومی بیاد، یا اینکه روش سیگما نوشته بشه.
سلام. وقتتون بخیر. ببخشید یک سوال از خدمتتون داشتم. اگر متغیر temp سه مقدار -1,0,1 فقط بگیرد و بخواهیم اگر برابر یک شد متغیر c(i) هم یک شود وگرنه c(i) صفر بماند، آیا دو محدودیت زیر برای i>1 درست نوشته شده اند؟ bigM=10 است و کمتر گذاشتن آن مثلا 2، جواب کلی را تغییر میدهد.
ضمن اینکه اضافه کردن این دو محدودیت روی مقادیر متغیر باینری p(i) هم تاثیر میگذارد، که جای تعجب دارد چرا که این دو محدودیت رو من صرفا برای شمارش حالات temp(i)=1 نوشته ام. تعریف temp به صورت زیر است.
ممنون میشوم اگر بنده رو راهنمایی بفرمایید.
سلام
اول اینکه temp رو باید به صورت variable آزاد تعریف کنین. اینکه متغیر p روتعریف کردین که temp به دست بیاد کار درستیه از لحاظ کد نویسی گمز، ولی باید دید که این رابطه برای i های مختلف باید باشه که temp تولید بشه؟اگه اره که رابطه درسته. یک سوال من روجواب بدین سایر مواردی که مربوط به ارتباط temp و c هست رو اینجا براتون میذارم. الان درفتش رو نوشتم ولی برای اینکه کامل بشه باید بدونم که وقتی temp برابر -1 میشه، c چه بلایی سرش میاد؟
خیلی ممنونم از پاسختون. اگر متغیر temp(I) منفی یک یا صفر بشه، مقدار c(I) باید صفر بشه.
و فانکشن تعریف متغیر temp برای i>1 نوشته شده.
در واقع هدف فقط شمارش تعداد یک شدن متغیر tempهست.
با این اوصاف و با فرض اینکه رابطه ی بین temp و p درست نوشته شده از لحاظ مفهومی، روابطی که نوشتین درسته، فقط میمونه شرط اینکه i بزرگتر از یک که به شکل زیر نوشته میشه:
[css]
eq1(i)$(ord(i)>1).. temp(i)=l=……
[css]
این شرط برای هر دو محدودیت باید نوشته بشه.
با سلام …. من محدودیت زیر رو در گمز کد کردم …
ولی برای summation اولی که روی اندیس های i ، k و l جمع بسته شده میخوام یه شرط بذارم… به این شکل که اندیس k مخالف j باشه … به چه شکلی میتونم این کار رو انجام بدم ؟
ممنون.
سلام
سلام. خسته نباشید.
چطوری میتوان از از نتایج بدست اماده از معادلات دوباره در خطوط بعد استفاده کرد؟
به طور مثال یک مسئله را مینیمم میکنیم سپس x 1،x2 و.. بدست می آید. در خطوط بعد چگونه تابعی مانند c=2*x یا چیزه دیگره تعریف کرد؟
سلام
وقتی یه مدل حل میشه، متغیرهای تصمیمش جواب بهینه به خود میگیرن. که این جواب رو میشه با بسوند .L نمایش داد.
مثلا میخوایم بعد اینکه مدل حل شد. مقدار x3 رو ضربدر 2 کنیم و در c ذخیره کنیم. کافیه بعد از دستور solve بنویسیم. c=2*x3.L
ممنون. لطف کردی
بله،ممنون.
به طور کلی برای ترتیب حل معادلات کلا نیازی به تعریف جدول پیش نیازی مثل جدول پیش نیازی انجام فعالیت ها نیست؟ یعنی اگر در حین حل مدل با n استپ، مقدار متغیر فرضا x در یک استپ مشخص بنا بر محدودیت های تعریف شده با توجه به مقدار محاسبه شده ی یک متغیر دیگر تغییر کند، مقدار متغیرهای وابسته ی دیگر به x در این استپ، خودشان آپ دیت میشوند و مجددا محاسبه خواهند شد؟
سلام
لطفا به همون گفتگو جواب بدید که قاطی نشه سوالات.
من منظورتون رو متوجه نشدم. اگه منظورتون این هست که loop دارید، یا اینکه چندین دستور solve بله خودش مجددا میاد حساب میکنه.
خیلی ممنونم.
یه سوال دیگه هم از خدمتتون داشتم.
فرض کنید دو متغیر داشته باشیم به نام های phase(i) و SOC(i,t) به این ترتیب که ابتدا مقدار phase(i) که متغیر باینری است برابر phase(i-1) قرار میگیرد و SOC(I,t) محاسبه می شود و اگر مقدار آخرین درایه ی SOC(I,t) در محدوده ی معین تعریف شده از قبل باقی بماند مقدار phase(i) صحیح تعریف شده و اگر این محدودیت نقض شود، مقدار phase(i) برابر 1- phase(i-1) خواهد بود و SOC(I,t) باید مجددا محاسبه شود.
سوال بنده این است که آیا با مقدار دهی اولیه زیر قبل تعریف معادلات و معادلات تعریف شده ی زیر این اهداف و شرایط تامین می شود و نیاز به محدودیت دیگری نیست؟؟
از بین داده های بالا فقط Pd(i) و Estg1 متغیرند و بقیه معلوم.
سلام
به نظرم مشکلی نداره. فقط اون بخش loop رو حذف کنین.
سلام. وقتتون بخیر.
یه سوال از خدمتتون داشتم. من حد بالای عبارت سیگمام یک متغیر هست (NR). و وقتی تابعم رو به صورت زیر تعریف میکنم، خطا میده؟ راهی برای متغیر تعریف کردن حد بالای سیگما هست؟
TRو NR متغیر و iprim پارامتر هست.
سلام
گمز این حد رو قبول نمیکنه.
میتونین از ifthen استفاده کنین. یه راه بهتر هست که یه ایمیل میتونین بزنین به support که یه نمونه براتون ارسال بکنم.
ممنون از پاسخ شما
جناب محمودی شما حساب کن ما پارامتری داریم مانند f(t) که دو عضو مانند 15 و 10 دارد.
حالا میخواستم اگر مقدار x(t) از ۲ بیشتر شد f مقدار ۱۵ را به خود بگیرد و در صورت اینکه x(t) از ۲ کمتر باشد f مقدار ۱۰ را به خود گیرد.
سلام
لطفا گفتگوی جدید رو یه موضوع باز نکنین و به همون گفتگو قبلی ریپلای بفرمایین.
اینجا هم بازم مشکل داره. وقتی میگیم f مشخصه، یعنی اینکه ربطی به جواب متغیر نداره. درسته؟
مفهومی که تو ذهنتون هست و میخواین یه جایی استفاده ش کنین خوب پخته نشده. توضیح بیشتری از کاربرد این قضیه بدین درخدمت هستم.
سلام
من در مدل خودم یک متغیر پیوسته مانند x(t) و همچنین یک اسکالر مانند f دارم
میخواستم کدی بنویسم که اگر مقدار x(t) از 2 بیشتر شد f مقدار 15 را به خود بگیرد و در صورت اینکه x(t) از 2 کمتر باشد f مقدار 10 را به خود گیرد.
اگر پاسخ بدین ممنون میشم
سلام
وقتی اسکالر تعریف میکنیم که بهش یه مقدار مشخص بدیم. نه اینکه بیایم تو معادلات تازه بیایم براش شرط بذاریم که ببینیم چند میشه. این f اسکالر نیست. متغیره.
تکلیف این رو مشخص کنین. در خدمت هستیم.
با سلام …
ممنون از راهنماییتون .
به چه روشی میتونم محدودیت زیر رو در گمز کد کنم:
با این شرایط که P(j,n,m) و T متغیر تصمیم هستند، TU ، TL و P0(j,m) پارا متر هستند و j ، n و m اندیس هستند. (N بزرگ هم حداکثر اندیس n کوچک هست)
سلام
روش خاصی نمیخواد که. به همین شکلی که اینجا نوشتین تو گمز هم بنویسین. فقط مساوی رو رعایت کنین و به جای n,m بنویسین ord(m) و ord(n). مورد دیگه ای نداره.
سلام
ممنون از سایت خوبتون
میشه یه مثال از تابع هدف ترکیبی مثل max(min)l که تو گمز کد شده برام بفرستین
ممنون
سلام
تو گمز ترکیبی نداریم. باید خطی بشه، بعد نوشته بشه.
مثال:
سلام … وقت به خیر…
ببخشید محدودیت co(i,n,m) .. Y(j,n,m) =G= Y(j,n,m+1) رو چه طوری در گمز کد کنم؟
اگر بخوام هم زمان n>=m باشه چه طور؟
ممنون
سلام
سوال اول، به همین شکلی که نوشتید.
سوال دوم:
co(i,n,m)$(ord(n)>=ord(m))..
سلام
این کد رو ارور میزنه، ممکنه به این خاطر باشه که بازه سامیشنش متغیر هست؟ چجوری باید حلش کنم؟
TD(u,j) متغیر هست.
سلام
شما یه بار b رو متغیر تعریف کردین، یه بارم به نام equation نمیشه. اسما باید تغییر کنه. بازه sum هم نباید متغیر باشه.
خود مقاله این رو پیشنهاد داده که به نظر غلط می آید:
(( z(m,t)=l=sum(t $ (ord(t)<=card(t)-1),f(m,t
بعد گفته به ازای تمامی t ها و تمامی m ها چک بشه این معادله . و در توضیح معادله موارد کامنتی که بهش ریپلای کردم رو گفته.
سلام یک
متغیر (f(m,t دارم. میخوام که یک متغیر دیگر به نام (z(m,t تعریف کنم به صورتی که اگر(اندیس t هفت تایی و اندیس m فقط یکی باشد ) :
[f=[0,1,0,0,0,0,0 باشد متغیر z به این صورت در بیاد:
[z=[0,0,1,1,1,1,1.
یعنی برای همون t مقدارش 0 بشه ولی در بقیه زمانها مقدار 1 باشد.این روی چه جوری باید در قیود بنویسم.(هر دو متغیر باینری هستن)
با تشکر
این ماتریس z که نوشتین که با شرطی که فرمودین نمیخونه. درایه اولش هم صفره.
شرط اینه؟ اگر f یک باشه، z صفر میشه حتما؟. اگه f صفر باشه چیه؟
با سلام
ضمن تشکر از پاسخگویی شما.
ببنیید قضیه اینه که f نشون دهنده زمان رسیدن تیم تعمیرات به قطعه m هست و z نشونه در دسترس پذیری قطعه m.
حالا با این منطق کار به این صورت هست که اگر قطعه m در ساعت t تیم تعمیرات بهش برسه در همون ساعت و ساعت های قبلش اون قطعه اوکی نشده و f صفر هست ولی بعد از اون ساعت دیگه یک میشه.به عنوان مثال همون ماتریس f و z که در کامنت فوق اشاره کردم میشه
اگر f یک باشه، z صفر میشه حتما
اگه f صفر باشه اونوقت باید نگاه کنه این صفر قبل از ۱ شدن f هست یا بعدش:
* برای قبل از ۱ شدن f مقدار z صفر باید باشه.
*برای بعد از ۱ شدنf مقدار z باید یک بشه
اینم چند تا مثال:
[f=[0,1,0,0,0,0,0 در این حال z میشه: [z=[0,0,1,1,1,1,1.
[f=[0,0,1,0,0,0,0 در این حال z میشه: [z=[0,0,0,1,1,1,1.
[f=[0,0,0,0,0,1,0 در این حال z میشه: [z=[0,0,0,0,0,0,1.
سلام
فکر میکنم این کد به دردتون بخوره. شایدم مشکلاتی داشته باشه، لطفا زحمتشو بکشین شما. دقت کنین که هر کدوم از موارد زیر یه معادله هستن و t,tp آلیاس هم هستن. و N هم تعداد اعضای مجموعه ی t هست.
سلام
ببخشید یک سوال دیگه اینکه آیا ممکنه این کدی که شما فرمودید با بقیه که هایی که نوشتم و توش f بدست میاد تداخلی ایجاد کنه؟(با توجه به اینکه z رو برای اولین بار داریم تعریف میکنیم و یه متغیر خالی است).
من کد شما رو به این صورت وارد کردم (برای زمانی که مجموعه m هم هست) ولی مساله رو infisible میکنه و میگه :
(0.2)bound infeasibility column f
سلام
بله ممکنه این مشکل رو ایجاد کنه. من اینا رو به نظرم درست میاومد و خدمتتون عرض کردم. باید قشنگ بشینین تحلیلکنین همه اینا رو. اول بدون محدودیت های دیگه. اگه مشکلی نداشت، برین سراغ محدودیت های دیگه.
set
i nb /1*3/
parameters
b(i) /12,2 2,3 5/
c(i) /1 5,2 4,3 9/;
میخوام سیگمایی بنویسم کران پایینش b و بالاش c باشه
با تشکر
سلام
با سلام
ببخشید یک سوال داشتم.
میخوام در سامیشن از مقدار شمارنده خاصی شروع به شمارش کند مثلا از t=2 شروع کند (t=1 وجود دارد اما من میخوام ازt=2 شروع شود) تا t-1 (به جای اینکه تا t پیش رود).
برای اینکار باید چکار کنم؟
سلام
کامنتهای همینجا رو بخونین متوجهش میشین. کامنتا رو حتما بخونین. سرگرمیه ولی چیزای خوبی یاد میگیرین. دستورات ord و $ رو جستجو کنین تو همین صفحه مطالب خوبی گیرتون میاد:
با سلام و خسته نباشید
ببخشید که درباره موضوع خارج از بحث سوال میپرسم
از دوستان اگر فایلی یا جزوه ای در زمینه کاهش سناریو به روش scenred در گمز داره ممنون میشم در اختیار بنده هم بذاره. هرچی گشتم نتونستم مطلبی در این مورد پیدا کنم
ببینید این یه شبیه سازی است بر پایه یه مقاله . که توی اون یه اسکالر به نام VIN به معنی ولتاژ ورودی تعریف شده است و همچنین یک وریبل به نام V که ولتاژ داخلی شبکه ما رو در لحظه ی t نشون میده.
من از ord بلدم استفاده کنم. همچنین از دستورif هم استفاده کردم ولی مشکل اینجاست که ord برای ست ها استفاده می شود و همچنین تا قبل از حل شدن مدل v(t) مقداری ندارد که بتوانیم از دستور if استفاده کنیم. اگه یه ایمیل به بنده بدید بنده مقاله رو براتون ارسال می کنم.
شرطی که در داخل این مقاله آمده است این است که در صورتی که v در لحظه ی t از Vin کوچکتر باشد مقدار p را برابر صفر قرار بده.
سلام
این معادله رو به مدلتون اضافه کنین:
که در اینجا m یک عدد بزرگ هست (خیلی هم بزرگ نگیرین). این معادله میگه که اگر شرط برقرار باشه، p حتما باید صفر باشه.
سلام
می خواستم بدونم توی گمز معادلات شرطی رو چجوری میشه پیاده سازی کرد؟
برای مثال:
if v(t) vin then p = 1
نکته لازم به9 ذکر این است که V در داخل ورودی های ما موجود نیست.
سلام
vin چی هست که نوشتید؟
بله خیلی ممنون
باسلام و وقت بخیر
ممنون میشم راهنمایی بفرمایید رابطه زیر در گمز چه طور کد نویسی میشه؟
(Y(w,k,t24)=Y(w,k,t1
سلام
در صورتی که t1 و t24 اعضای مجموعه ی t هستن (مثلا t/t1*t24):
با عرض سلام
من در برنامم میخوام یک شرط رو چک کنم:
اگر |(M(i,t)-M(i,t-1| بزرگتر از 1 شد به مقدار (D(i یکی اضافه شه و در غیر این صورت مقدار (D(i تغییر نکنه. (D ورودی نیست)
مقدار M خودش از چک کردن شروط ریز مشخص میشه:
-اگر (pricem(i,t کوچکتر از (pricech(i باشه مقدار M برابر با یکه
-اگر (pricem(i,t بزرگتر از (pricedis(i باشه مقدار M برابر با منفی یکه
-در حالت های دیگه مقدار M برابر با صفره
(pricem(i,t و (pricech(i و (pricedis(i جز ورودی های برنامه هستن و مقدارشون معلومه
من قسمت مقداردهی M رو با دستور ifthen به صورت زیر نوشتم و درست جواب میده:
M(i,t)=e=ifthen(market_price(t)=price_dis(i),-1,0));
1-M متغیر محسوب میشه؟
2- قسمت مقداردهی D رو هم به صورت زیر با دستور ifthen نوشتم اما نمیدونم چرا کلا مقدار صفر رو برمیگردونه برای جواب D (حتی موقع هایی که شرط |(M(i,t)-M(i,t-1| بزرگتر از 1 برقراره)
D(i)=e=ifthen(abs(M(i,t)-M(i,t-1)) gt 1,D(i)+1,D(i));
میشه لطفا کمکم کنید؟
خیلی ممنونم
سلام
اینکه با ifthen نوشتین ممکنه درست باشه، یا نه. من جا شما باشم با if می نویسمش این رو. یاداوری هم بکنم که اینا رو تو بخش معادلات ننویسین چون همه پارامتر هستن. (احتمالا شما هم همینکارو کردین، صرفا جهت شفاف سازی عرض کردم)
خب، بحث اصلی اینه که چرا d رو اشتباه میده. اگه دقت کنین، یه بار i=1 میگیره، و میره ifthen رو حساب میکنه. خود ifthen هم اندیس t داره که اول t=1 میگیره و یه جواب برای d ارائه میده و همینجوری t بیشتر میشه و باز d رو مجددا مقدار دهی میکنه، این کارو تا جایی ادامه میده که t تموم میشه، t که تموم شد، d(i=1 مقدار گرفته، و میره سراغ i بعدی. بنابراین شما باید تکلیف فرمول رو مشخص کنین. باید دقیق بگین این d مربوط به کدوم t هست. روش فکر کنین بعد قشنگ.
سلام مقالتون واسه سال 2014 هست؟
سلام
من یک متغیر به اسم
(SOC(i,t
دارم که سطح شارژ باتری هارو در هر ساعت شبانه روز مشخص میکنه
i: مجوعه ای هست که تعداد باتریارو مشخص میکنه و t: تعداد بازه های شبانه روز رو (در برنامه من 24تاست).
مشکل من اینجاست که من مقدار SOC هر باتری رو فقط برای یک بازه زمانی در شبانه روز میدونم مثلا میدونم که SOC باتری اول در ساعت 19 برابر 0.3 هست و SOC باتری دوم در ساعت 24 برابر 0.5 هست ولی برای بازه های زمانی دیگه SOC مجهوله (یعنی جز نتایج برنامست).
میشه لطفا راهنماییم کنید چطور بنویسمش؟
سلام
قبل از دستور solve میتونین این کد رو بزنین. داریم از attributeی به نام fixing variable استفاده میکنیم.
x(i) یک پارامتر است
سلام
این کامنت مربوط به چه سوالی هست؟ ریپلای نمیکنین به همون سوال این مشکل بوجود میاد
سلام ، من میخوام یک محدودیت شرطی به صورت :
b(i,d,t) یک متغیر باینری است و زمانی یک شود که، شرایط ذیل درست باشد.
b(j,d,t)=1 متغیر باینری است و یک باشد. i مخالف j باشد. x(i) یک اسکالر است و x(i)+10>x(j) باشد.
لطفا کد ان را بنویسید خیلی ممنونم.
سلام
سلام
من میخوام یک متغییر شرطی صفر و یک تعریف کنم نیازی هست. مثلا: اگه بلوک x(i,j,k) در فضای سه بعدی x , y , z
انتخاب شد(یک شد) 9 بلوک بالاسری ان در فضای سه بعدی ( ارتفاع انها (k+1) و i انها و j انها یک واحد کم و یک واحد اضافه) هم پذیرفته شود (یک شود). این شرط فقط در یک محدودیت نوشته شود کافیه لطفا کد کامل ان را بزارید. ممنون بابت راهنمایتان
در ادامه سوال قبلم باید بگم که اندیس ها مرتب نیستند و باید برای پیدا کردن بلوک های بالاسری از یک بازه در شرط استفاده شود.
در یک table اطلاعات مختصات بلوک در راستای x,y,z قرار داره که اگه این بلوک را با نام b(i) بنامیم. اگه بلوک (i)b انتخاب شد بلوک های بالاسری در راستا های مختلف بین بازه (x+10 ,x-10) , (y+10 ,y-10) , (z+10 ,z) هم انتخاب بشه (متغیر باینری یک بشه).
سلام
ببینید روش کلی به این شکل هست که شما به یک محدودیت کوچکتر مساوی نیاز دارین به اضافه مجموعه ای از شرط ها. من یه محدودیت اولیه مینویسم. شما با استفاده از اون میتونین برای کار خودتون ازش استفاده کنین.
با عرض سلام و خسته نباشید بنده دو معادله دارم که به همدیگر مرتبط هستند مثلا یک متغیر باینری به نام X تنها در صورتی می تونه مقدار یک به خودش بگیره که دو متغیر بانری دیگر همزمان برابر یک باشند یعنی مثلا متغیر باینری نود و باس. و مقدارش هم همواره باید کوچکتر مساوی این دو مقدار باشد یعنی X =L=Si و همزمان X=l=Sj به صورتی که i و j ایلیاس هستند. این رو چطور در قسمت معادله وارد کنم با توجه به اینکه شرطی در این قسمت نمیشه وارد کرد. متشکرم.
سلام
این معادله رو به معادلات بالا اضافه کنین:
ببخشید کدتون نوشته نشده.
بله ببخشید نمیدونم چرا نیومده.
سلام ممنونم از لطف شما.واقعا واژه ایی برا تشکر کردن پیدا نکردم که بتونه حق مطلب رو ادا کنه.بازم تشکر میکنم.
اره I,J رو با alias تعریف کردم که از نوع v هستند.الان متوجه شدم ممنون از لطفتون. ببخشید سوال دیگه هم داشتم توی تابع هدف با خطای
This set is used already as an indexing map and can only be used
as a reference. No additional indexing is possible.
For example, x(link(i,j),link(ii,jj)) = …. is incorrect
because link now serves as a driving index
وهمچنین خطای Dimension different – The symbol is referenced with more/less
indices as declared
مواجه شدم .اگر راهنماییم کنید ممنون میشم بخدا.
ببخشید اگر محدودیتی به صورت x(i,j)-x(j,i)<= f(i,j)+f(i,u) داشته باشیم من این رو به صورت
eq12(i(R(V)),J(V),U(V)).. (1-x(j,u)-x(u,j))=l=f(i,j)-f(i,u) کد نویسی کردم ولی خطای
Dimension different – The symbol is referenced with more/less
indices as declared و
خطای Set expected رو میده.ممنون میشم لطف کنید بهم و ایراد این کارهام رو هم بگید.
من واقعا شرمنده شما ام بخاطر تعداد سوالات زیادی که پرسیدم. واقعا تجربه اولم هست کار کردن با گمز.بخاطر همین شرمنده شما میشم.
سلام
ممنونم. تیازی به تشکر نیست. لطفا به همون جواب قبلی من reply کنین. اینجوری کامنتا رو سخت میشه دید.
سلام.ببخشید من یک سوال دیگه هم داشتم .اگر یک متغیر صفر و یک داشته باشیم که تحت یک شرطی مقدار صفر بودن یا یک بودن اون مشخص بشه کجا و چجوری باید وارد بشه .مثلا
x متغیر صفر ویک باشد و در صورتی که c(i,j)بزرگتر مساوی sum(t(i,j)) باشد متغیرx مقدار یک اختیار کند در غیر اینصورت مقدار صفر بگیرد
سلام
اول بفرمایین که c,t پارامترن یا متغیر.
سلام.ممنون از پاسختون.به طور دقیق اگر بخام بگم اینجوری هست
ec(k,i)>sum(t(k,j)-sum(ec(k,i)
که ec متغیر و t پارامتر هستند.
اگه پارامترن کافیه دو طرف معادله رو ضربدر x کنین.
سلام خسته نباشید.ببخشید من قبلا هم از شما سوال پرسیدم و لطف کرید جوابم رو دادید.الان چند تا سوال دیگه دارم ممنون میشم بازم بهم لطف کنید و پاسخ بدید.من کد نویسی که کردم مجموعه هام رو تعریف کردم اما با یک سری خطا مواجه میشم.
سوال1:
مجموعه ها
پارامتر a(i,j)
الان وقتی تابع هدف رو به صورت زیر نوشتم ((hh1=e=sum((i$R(V),j$B(V)),F*a(i,j با خطای ‘)’ expected و Uncontrolled set entered as constant و Incompatible operands for addition مواجه میشم. ایراد کارم کجاست؟
سوال 2:
وقتی محدودیت ها رو نوشتم مثلا..((eq2(j$B(V با خطای rest of statement ignored مواجه میشم ممنون میشم ایراد این کارم هم بگید
سلام
بله حتما.
شما دو اندیس i,j رو تعریف کردین؟ اگه نکردین که نمیشه استفاده کرد ازشون.
وقتی میگین i به شرط Bv که نمیشه. این از کجا بفهمه منظور چیه. باید مثلا بگین i$something(i
برای eq2 هم که اشتباه نوشتین. eq2(j)$(something)
که something باید عبارتی که به j وابسته هست بیاد. مثل اون قسمت اول که مورد هدف گفتم. تو کامنتهای بالا موارد زیادی کد نویسی وجود داره. عبارت دلار $ رو فایند کنین تو همین پیج.
سلام عرض میکنم وقتتون بخیر باشه
استاد عزیز من اندیسی دارم به اسم I که مقدارش 1 تا 100 هستش.
داخلی یکی از محدودیت هام دارم دو مقدار i و j رو دارم از همین مجموعه انتخاب میکنم ، j رو به صورت صور عمومی و i هم برای سیگما به کار رفته و قید شده که i و j برابر هم نباشند ، میخواستم بدونم امکانش هست لطف کنید بفرمایید که این به چه نحوی باید نوشته بشه
سلام
به شکل زیر وارد کنید کد رو (لازم به ذکره که i,j باید آلیاس هم باشن)
سلام وقتتون بخیر
خیلی ممنونم از پاسختون متوجه شدم .
ببخشید من یکی از سیگما هام زیرش علاوه بر اینکه گفته روی i هستش ، i رو اجتماع با صفر هم کرده که این سیگما علاوه بر i به ازای 0 هم اجرا بشه ، این رو چجوری میشه نوشت؟
سلام
تو این موارد یا باید یه مجموعه دیگه مثل i0 باید تعریف کنین که شامل i و 0 هست، یعنی i زیر مجموعه ی i0 باشه. و هر جا لازم بود i رو استفاده کنین. و هر جا هم مثل اینی که الان گفتین i0
روشهای دیگه ای هم داره . ولی همین کافیه
سلام
من یه مدل MINLP دارم که توش داده های مربوط به بار الکتریکی دارم و متغیر با زمان هستش وقتی ران میگیرم حدود 12 ثانیه جواب میده بعد که میام این بار متغیر با زمان رو 30٪ افزایش میدم در عرض 5 ثانیه جواب میده. دلیلش چی میتونه باشه که برای بارهای مختلف زمان ران فرق میکنه؟
سلام
فرض رو بر این میگیریم که کد، مدل و داده ها درست هستن و خروجی مناسبی ازش گرفتین.
ببینین وقتی گمز مدل رو حل میکنه از الگوریتمای زیادی استفاده میکنه که مثلا یکیشون الگوریتم شاخه وکران هست. این الگوریتم میاد اول دو تا شاخه ایجاد میکنه و به عبارتی مسئله رو به دو بخش تقسیم میکنه، و هر کدوم رو دوباره شاخه زنی میکنه و نهایتا حل میشه و نتیجه رو اعلام میکنه. بعضی وقتها الگوریتم وسطای شاخه زنی متوجه میشه که با این داده ها، ادامه ی این شاخه به صرفه نیست و جواب بهتری به ما نمیده. از اینرو اون شاخه رو متوقف میکنه و نتیجه رو اعلام میکنه یا شاخه های دیگه رو ادامه میده. اینجوریه که تغییر داده ممکنه میزان جستجو در الگوریتم رو کم یا زیاد کنه. این صرفا یه مثال بود و با این قرض خدمتتون عرض کردم که مواردی که تو خط اول گفتم صحیح و منطقی باشن.
با تشکر از پاسخ جامع و کاملی که دادید. از لحاظ نتایج که کاملا مطابق انتظار بودن خروجی ها فقط برام جای سوال بود که چرا زمان ران برای بارهای مختلف فرق میکنه. البته شاید هم اشکال از داده ها یا کد نویسی باشه. در هر صورت بی نهایت ممنونم از وقتی که گذاشتید
بسیار عالی. نه نرم افزار سعی میکنه خیلی زود حل کنه مدل رو. با این داده ها این شرایط براش پیش میاد. زنده باشین.
با عرض سلام و خسته نباشید
ببخشید فایلی در مورد خطی سازی معادلات غیر خطی ندارید؟
سلام
خیر
به کتاب تحقیق در عملیات 2 مراجعه کنین. و اگه تو اینترنت سرچ زدین، به انگلیسی سرچ بزنین که مطالب بیشتری یاد بگیرین.
سلام.تشکز از پاسخگوییتون.من کد رو به این شکل نوشتم ولی ارور میده و جواب نگرفتم.کجا رو باید اصلاح کنم؟
این کد اخه درست نیست که. اصول گمز رو رعایت نکردین. بنده فقط فرمولو براتون نوشتم همین.
کد میتواند به شکل زیر باشد:
variables z;
positive variable Q;
Q.lo=0.0001;
equations
objective;
objective.. z=e=200000/Q+15*Q+210000;
model mymodel /all/;
solve mymodel using nlp minimizing z;
سلام و خسته نباشید
من این تابع رو توی گمز وارد میکنم ولی انجام نمیشه و ارور میده
این تابه باید مینیمو
min( 200000/q + 15*q + 210000) ;
سلام
دقیقا کد رو به همین شکل نوشتین؟
کد به شکل زیر باید باشه:
برای اینکه خطای تقسیم بر صفر هم نده، میتونین عبارت q.lo=0.1; رو قبل از دستور solve بنویسین. و یا تو مخرج به جای q بنویسین (q+0.00001)
سلام. روزتون بخیر
من توی نوشتن یه محدودیت گیر کردم. میشه کمکم کنید؟ خیلی خیلی ممنون میشم
من یک پارامتر دارم به اسم (p(t,j و یک متغیر به اسم (v(i میخوام این محدودیت رو بنویسم
کدم رو به شکل زیر نوشتم ولی خطا می دهد
po(t) را به عنوان پارامتر تعریف کردم و برای (p(t,j هم تیبل نوشتم
لطفا کمکم کنید ممنون
سلام
درستش اینه که این شکلی بنویسین (فرض کنیم t رو از t1*t5 تعریف کردین:
سلام، قسمت equation در کد من به صورت زیر است
وقتی در تابع هدف کد بالا به جای R(i,j) قرار می دهم
یعنی به این صورت
نتیجه به طور کل عوض می شود. در حالی که من در قید 1 تساوی آن دو را تعریف کردم. مشکل کجاست؟
سلام
همونطور که میدونین، سالورها وقتی میخوان یه مسئله غیر خطی رو حل کنن، اولی کاری که میکنن اینه که بررسی میکنن تابع هدف مسئله محدب هست و یا مقعر، محدودیت ها هم به همین شکل. به هر نتیجه ای که برسه سالور، طبق همون اطلاعاتی که به دست آورده حل مسئله رو ادامه میده. پس وقتی شما تقعر و تحدب مسئله رو با این حرکتی که زدین به هم میزنین، عملا رویکرد حل سالور رو هم تحت تاثیر قرار میدین. حالا همه اینا رو بذارین کنار این بحث که مسائل غیر خطی رو ممکنه نتونیم جواب بهینه جهانی رو براشون پیدا کنیم، پس بهترین کار برا شما اینه که دو روشی که استفاده کردین رو برای سالورهای مختلف استفاده کنین و بهترین جوابی که بهتون میده رو.گزارش کنین.
ممنون از شما و سایت خیلی خوبتون
سلام
ببخشید من میخوام بگم که مقدار X(i,r,k,t اگر مقدار t مثلا برابر 5 بود اونموقع مقدار X رو بده 1
اینو چه جوری باید بنویسم
سلام
یکی از دو روش زیر:
با سلام
من یک مجموعه دارم به صورت زیر دارم :
𝑟𝜖{1.2.3….𝑚𝑗} l
که mj تعداد ماشین آلات ایستگاه jام می باشد که تعداد ماشین آلات ایستگاه ها متقاوت می باشد من این مجموعه به صورت دو بعدیr و به شکل زیر تعریف کردم، یک معادله دارم که جمع ماشین های ایستگاه jام را برابر یک قرار دهد پس باید روی مجموعه r اجرا شود ولی شرطش این است که که در ایستگاه jام فقط sum برروی ماشین های این ایستگاه جمع شود نه تمامی ایستگاه ها ولی برای مجموعه های دو بعدی نمی شود از شرط ord استفاده کرد. ممنون میشم راهنمایی بفرمایید بلید چه کار کنم
[-css-]
sets
i index of patient /1*3/
j index of stage(laboratory) /a,b,c/
s /1*3/
r(j,s) index of machines(places) ;
table h(j,s) number of parallel machines(places)at stage(laboratory)j
1 2 3
a 1 1 0
b 1 1 0
c 1 1 1 ;
r(j,s)$(h(j,s))= yes
binary variables
z;
equations
E1(i,j,s) ;
E1(i,j,s) .. sum((r)$(ord(r)=ord(j)),z(i,l,r)))=e=1;j
[/css-]
سلام
بذارین به شرط r(j, s)
سلام
من توی تابع هدفم فرض کنید عبارت
(h (Irj + qrj *Iwj دارم که مثلا Irj من به یک فرمول طولانی تو در تو برمیگردد.
آیا باید آن فرمول را مستقیما در تابع هدف تعریف کنم یا میتوانم Irj را در تابع هدف بنویسم و جدا در جای دیگر فرمول را برای I rj تعریف کنم؟
تشکر
سلام
اگه این Irj که یه فرمول داره، همش شامل پارامتر میشه و معلومه عددش، جدا از equationها فرمولشو بذارین خودش محاسبه کنه و بره تو هدف irj رو بذاره. اگه متغیره که یه محدودیت میتونین اضافه کنین و فرمولش رو بنویسین.
با سلام و عرض خسته نباشید خدمت شما
ببخشید من تو کد مدل ریاضیم به یک مشکلی خوردم، من یک محدودیتی دارم که یک تابع سام داره، قسمت اولش روی r جمع بسته میشه و در ادامه داخل مجموعه سه جفت اندیس نابرابر بایستی تعریف بشه.حالا نمی دونم این رو در گمز چطوری کد کنم؟( اندیس ها، r اندیس پاسخدهی به ریسک،i,ip اندیس محصول،j, jpاندیس تامین کننده،t, tpاندیس دوره زمانی)
میشه راهنمایی بفرمایید
سلام
این مثالو ببینین:
سلام
محدودیت دارایM بینهایت رو چطوری باید کد کرد؟
مثلا
سلام
M رو به عنوان پارامتر تعریف کنین و یه عدد بهش بدین که نه کوچیک باشه، نه خیلی بزرگ. کوچکترین عددی که محدودیت رو نقض نمیکنه استفاده کنین.
با سلام.
اگر در محدودیت بخواهیم مثلا 40 داده را با هم جمع کنیم در مدل روی کاغذباید از سیگما استفاده کنیم. این محدودیت را در گمز چگونه بنویسیم؟
سلام
سیگما در گمز توسط دستور sum نوشته می شود.
سلام خسته نباشید. ببخشید چگونه می توان خطای مربوط به محدودیت زمان را رفع کرد. خطای زیر در مساله MINLP داده می شود:
the time limit has been reached
سلام
اینو قبل از دستور solve اضافه کنین.
یعنی بعد از 10 هزار ثاانیه متوقف بشه. میشه بیشترش هم کرد
با سلام
چطوری میتونم تو گمز
P(i)
را به ازای
i=3,7,19
مساوی
P(j)
به ازای
j=1,2,3
بنویسم.
ست های i و j از قبل تعیین شدن
سلام
سیستم عاملم 64 بیتیه و با رم 16 گیگ دارم ران میکنم. هم با نسخه گمز 24.1.2 و هم با نسخه 25.0.3 تست کردم نشد.
MyModelName.workfactor=8 قبلا گذاشتم جواب نگرفتم. و MymodelName.workspace=8000 رو هم قبلا تست کردم خطای زیر رو داد:
Error 113: wrong suffix on model- allowable area
با سالور baron هم تست کردم که بسیار دارای زمان ران بالایی هست و عملا نتیجه نداد. همچنین از سالور های IPOPT و IPOPTH هم استفاده کردم خطای حافظه میده. سالور lindo هم خطای زیر رو داد:
Could not allocate enough memory
ممنون میشم اگه راهکار دیگری به ذهنتون میرسه لطف کنید.
لطفا به گفتگویی که داشتیم ریپلای کنین.
ببینین همیشه که نمیشه جواب گرفت. بعضی وقتها شما باید ساعتها یا روزها منتظر جواب بمونین. همینکه بارون میگه داره حل میکنه خودش کلیه.
اگه امکانش هست مسئله رو تو سایز کوچکتر حل کنین. اگه نه که میتونین فرا ابتکاری بزنین.
ممنون از راهنماییتون.
سلام و وقت بخیر
من یه مدل مکان یابی_مسیریابی دارم که داخل گمز کدنویسی کردم، اتصال مستقیم یکی از مفروضات هست، برای 5 گره، هاب معرفی نمیکنه و وقتی یه هاب بهش میدم مثلا گره 4، مقدار تابع هدف رو صفر میزنه، مشکل از چیه؟
ممنونم از راهنماییتون
سلام و ادب
بطور کلی بخوام عرض کنم، مسئله تک هاب با بقیه متفاوت هست. و فرمول های خاص خودش رو داره در بعضی موارد. شما دو تا هاب فیکس کنید ببینید چی میشه.
model status و solver status رو چک کنید حتما که ببینید مسئله درست حل شده یا نه.
تحلیل کنید که چرا متغیرهایی که در تابع هدف هستن عدد نگرفتن….
سلام آقای محمودی خسته نباشید. من مدلم MINLP هست و موقع ران خطای کمبود حافظه میده و برنامه خطای fatal error رو میده. کامنت قبلی شما رو خوندم و کارهایی که فرمودید رو انجام دادم و سالور baron رو هم چک کردم فعال بود منتها بازم جواب نمیده. لطفا راهنمایی بفرمایید. با تشکر
سلام
سیست عاملتون چند بیته؟ و نسخه گمزتون چنده؟
اگه اپدیته این کد رو بزنین قبل از دستور solve
MyModelName.workfactor=8;
MymodelName.workspace=8000;
که در اینجا mymodelname اسم مدل شما در دستور model هست.
اگه اینجوری درست نشه، احتمالش کمه با این سالور conopt که دیفالته بتونین مدلو حل کنین. ناچارا باید برین سمت baron یا lindo
option minlp=baron;
سلام، شبتون خوش
برای تعریف تابع برنامه ریزی هندسی و گرفتن log از ان ، تابع رو این شکلی تعریف کردم ولی بعد از حل
میگه رنج تعریف تابع اشتباه و جواب نداره… میشه لطفا راهنمایی کنید باید چیکار کنم؟
f =e= (k*(P**(1-a))*(M**l))-(k*P**(-a)*M**l+O)-(k**(-b+O))*
(u**(P-a*(O-b)))*(M**(l*(O-b)-a))*k*(P**(-a))*(M**(l))
*(Q**(O-y))*i*k**(-b)*u*P**(a)*b*M**(-l)*b*Q ;
سلام
ممکنه به هر چیزی گیر داده باشه. طبق این چیزی که من میبینم، گمز اومده به اون مقادیری که دارن به توان میرسن گیر میده. میگه باید بزرگتر مساوی صفر بشن. شما همه عباراتی که به توان میرسن رو ببرین تو قدر مطلق.
تابعش abs هست.
با سلام؛
از دوستان کسی میتونه یه کد ساده از برنامه ریزی آرمانی وزنی یا آزمانی فازی برام بفرسته
با سلام
ببخشید من یه سامیشن روی “t دارم که حد بالای آن حداقل دو مقدار می باشد( یعنی مینیمم t+exp وT ) میشه راهنمایی بفرمایید که چطور باید در گمز وارد کنم؟؟
سلام
T,t,exp چی هستن. متغیر یا پارامتر
سلام
پارامتر هستن و t=1,2,3,…,T
سلام
با سلام و احترام
ممنون از سایت خوبتون
یک سوال داشتم ممنون میشم اگر پاسخ بدهید. چطور میتوانم ماکزیمم چند متغیر را گمز به دست بیاورم؟
سلام
این بستگی داره به اینکه حین انجام مدل میخوان به دستش بیارین، یا بعد از حل. فرض کنیم بعد از حل منظور شما باشه.
فرض کنیم x(i) متغیر شما باشه که میخواین بیشترین مقدارش رو به دست بیارین.
یه پارامتر به نام A تعریف میکنیم. و بعد از دستور solve فرمول زیر رو می نویسیم.
سلام . یه سوال داشتم که ممنون میشم جواب بدید.
من یه متغیر دارم که 24 تا است. مثلا y(n1)a تا y(n24)a
الان میخوام روی دوتا از این ها فقط شرط بزارم . مثلا y(n2)>y(n5)a
اینو چجوری می تونم بنویسم؟؟؟
سلام
سلام.
سایت خوبی دارید. بدون ارسال سوال، جواب خیلی از سوالاتمو گرفتم. ممنون.
اما یه سوال هم دارم:
یه مدل موجودی دارم که میخوام توی هر دوره برای هر محصول، مقدار ارسال شده به انبار در چند دوره اخیر حساب بشه که تعدادی که روش جمع میبندم به محصول بستگی داره.
توی مدل هم s و هم t رو بعنوان اندیس زمان معرفی کردم و k رو بعنوان اندیس کالاو این مجموع رو بصورت زیر نوشتم:
سیکما از
s=t-Ak
تا t
که برای هر t باید حساب بشه. توی گمز چجوری این مجموع رو نشون بدم؟
سلام تشکر.
برای حدود سیگما کامنتا رو بخونین. با دستور دلار و ord میشه این کار رو انجام داد.
به محدب و غیر محدب بودن معادلات هم ربطی نداره؟؟ یعنی اینکه اگه معادلات غیر محدب هم باشه میشه جواب گرفت؟
خیر ربطی نداره. فقط اگه مسئله پیچیده بشه و سایز مسئله بزرگ باشه، ممکنه مشکلی که براتون پیش بیاد اینه که گمز به جواب بهینه سراسری نرسه (چون ممکنه نتونه ثابت کنه که واقعا بهینه هست یا خیر) و به این ترتیب جواب بهینه نهایی هم به بمرحله بعد نره. و این مسئله برای یه مرحله ای ها هم برقراره.
فایلی دارید که مثالی از تصادفی دومرحله ای تو گمز داشته باشه یا اموزش بده نحوه مدلسازیشو تو گمز؟
سلام
خیر.
سلام
ببخشید اگه سوالی که میپرسم به پست مربوط نیست. موضوعی مرتبط با سوالی که میخوام بپرسم پیدا نکردم تو سایت.
من میخوام از برنامه ریزی تصادفی دو مرحله ای استفاده کنم سوالی که دارم اینه که باید حتما مدلم خطی باشه یا اینکه میتونه غیر خطی باشه ولی حتما باید محدب باشه. بعبارت شرط استفاده از برنامه ریزی دو مرحله ای خطی بودن مدل هستش یا محدب بودن مدل؟
ممنون میشم اگه راهنمایی کنید. با تشکر
سلام
خیر خطی و غیر خطی بودن مدل تاثیری تو این مراحل نداره. فقط به این نکته دقت کنین که غیر خطی سخت تر حل میشه توسط نرم افزار. و حواستون باشه که وقتی مدل ها در دو مرحله حل میشن. جواب بهینه جهانی رو بهتون بدن.
به محدب و غیر محدب بودن معادلات هم ربطی نداره؟؟ یعنی اینکه اگه معادلات غیر محدب هم باشه میشه جواب گرفت؟
سلام ببخشید من میخواستم بدونم که این دستور در گمز به چه معنا است و چه زمانی استفاده میشه؟ممنون میشم جوابم رو بدید خیلی ضروریه ..
if(mod_payoff.modelStat %modelStat.Optimal% and
,% mod_payoff.modelStat %modelStat.FeasibleSolution%,
;( ‘ abort ‘no feasible solution for mod_payoff
سلام
این میگه که در صورتی که استتوس مدلی به نام pay off برابر optimal بود، اگر وضعیت مدل شدنی بود، …
آنگاه برنامه را قطع کن، و بگو که جواب شدنی پیدا نشد.
تابع هدف دقیقا این شکلیه:
لطفا به گفتگویی که داریم ریپلای کنین که خواننده ها بحث رو گم نکنن.
اول یه اندیس دیگه به hr آلیاس کنین. بعد با یه loop میشه به تعداد hr مدل رو حل کرد.
ممنون از لطفتون
خیلی مفید واقع شد.
ممنون از توجه شما
تابع هدف تغییری نمیکنه ولی مقادیری که در آن قرار میگیرن با زمان تغییر میکنه یعنی هر ساعت یک مقدار (بار الکتریکی شبکه به صورت ساعتی تغییر داده میشه و بضورت یک table تعریف شده) بهش داده میشه.
نه متوجه سوال بنده نشدین.
تابع هدف به کدام صورت زیر هست؟
سلام
خسته نباشید
اگر بخواهیم مقدار بهینه یک تابع هدف که مثلا با تغییر ساعت مقدارش عوض میشه برای هر کدوم از این ساعتها پیدا کنیم چطوری باید دستور solve براش بنویسیم؟
ممنون از راهنماییتون
سلام
تشکر و خواهش میکنم.
این سوال جوابای زیادی میتونه داشته باشه. که بستگی به جواب شما به سوال بنده داره: تابع هدف برای هر ساعت قراره حساب بشه و باید جدا جدا حل بشه؟
سلام مهندس این کد خطای ۵۱ میدهد برای رفع آن چه باید کرد؟
سلام
تایپ مدل رو یه جای lp بزنین رو dnlp
سلام مهندس
لطفا راهنمایی کنید
یک ماتریس سطری دارم بنام a که j عضو دارد میخواهم مشخص کنم هر عضو در چه روزی تولید شدند بنابراین باید بر 24 تقسیم کنم جواب بدست آمده اگر کوچکتر از یک شد یعنی روز اول بین یک تادو بشود یعنی روز دوم و همینطور مثلا تا شش روز
در ادامه اگر روز اول بود بازه زیر مقدار را محاسبه کند
…..
مثلا اگر در ماتریس j درایه اول پانزده باشد مقدار آن 7 * 5 + 6 * 8 + 2 * 10 = 103
همینطور برای مابقی درایه ها محاسبه کند و جمع آن در خروجی بیاید.
سلام
متاسفانه متوجه سوالتون نشدم.
سلام . من بايد تو گمز يه كد پياده كنم كه انتگرال داراه ممكنه راهنمايي كنيد؟؟؟؟؟
سلام
تو گمز انتگرال نداریم.
دو تا راه دارین.
اگه فقط انتگرال محاسباتیه و تو معادلات نیست، میتونین به صورت دستی انتگرال رو بسط بدین و فرمول نهاییش رو بذارین تو گمز و اون بقیه محاسبات رو انجام بده. این برای بخش معادلات هم صادق هست.
اگر امکان انتگرال دستی ندارین، باید از اینترفیس بین گمز و متلب استفاده کنین و انتگرال روبه متلب معرفی کنین و اون بدستش بیاره و جواب رو بفرسته به گمز. اگه تو بخش معادلات باشه معادله شما، نمیتونین از متلب استفاده کنین. و باید دستی انتگرال گیری کنین و فرمول معادلش رو بذارین تو گمز.
با عرض سلام و خسته نباشید
من یک مجموعه t دارم که بصورت /t1*t24/ تعریف کردم و همچنین alias(t,h) رو تعریف کردم. میخوام یه زیگما بنویسم از h=t تا t+x ( x یک عدد است) . میشه نحوه نوشتن کد راهنمایی کنید
با تشکر
سلام
sum(h$(ord(h) >= ord(t) and ord(h) <= ord(t)+x),...
سلام
من توی مدلم دستور شرطی if دارم وهمینطور سینوس وکسینوس، ممنون میشم راهنماییم کنید که چجوری کد نویسی کنم
متشکرم
سلام
توابع سینوس و کسینوس دستورات مشخصی دارن که میتونین به راحتی پیداشون کنین.
برا دستور if، بستگی به شرط شما داره. در مورد شرط بیشتر و با جزئیات مربوطه توضیح بدین. مثلا بگین در صورتی که متغیر فلان از پارامتر فلان بزرگتر باشه، آنگاه…
متشکرم
سلام خسته نباشید
منظور از توقف برنامه از نظر gap چیست .و اصلا مفهومش چیه . خود gap که یعنی فاصله .
ممنون میشم که با مثال توضیح بدین و مثلا ما با optcr اومدیم gap رو 0 گذاشتیم چی میشه .
سلام
ببینین، فرض کنیم مسئله شما کمینه سازی هست. گمز یه بار میاد از روشهای مختلف نظیر دوگان و الگوریتم های خاص و آزادسازی متغیرهای گسسته، برای مدل شما یه bound محاسبه میکنه. بعد به طریق معمول مدل رو حل میکنه. هر بار که برای مدل یه جواب بدست میاره، فاصله ی بین lower bound (که در بالا محاسبه شد) و جواب تابع هدفی که به دست اومده رو با هم مقایسه میکنه و طبق فرمول زیر مقدار گپ یا خطا رو محاسبه میکنه. این میشه فاصله جوابی که تابع هدف محاسبه شده توسط گمز با مقدار احتمالی جواب بهینه مدل. فرض کنین حل مدل ما وقت گیر هست و اگه گمز بخواد دقیق حلش کنه 10 ساعت زمان میبره ولی شما محدودیت زمانی براش میذارین، مثلا میگین یه ساعت مدل رو حل کن، به هر جوابی که رسیدی گزارش کن. اونم به این زمان که رسید توقف میکنه و مقدار lower bound و مقدار objective function و مقدار فاصله ی درصدی این دو تا رو به صورت relative gap و absolute gap گزارش میکنه. relative به صورت درصدی هست و absolute به صورت مقدار عددی فاصله دو مقدار فوق.
ناگفته نماند که:
در هر تکرار که گمز داره مدل رو حل میکنه، سعی میکنه که همزمان که داره مدل رو حل میکنه، برای مدل مقدار Lower Bound بهتری هم پیدا کنه.
دارم کدی مینویسم که توش معادلات پخش بار هست ونیاز به تابه sin و cos دارم.ولی هر solverاستفاده میکنم این توابع مثلثاتیرو نمیشناسه. چه باید بکنم؟
سلام
دقیقا خاطرم نیست کدوما ساپورت میکنن.
baron, lindo, knitro, minos, dicopt رو تست کنین.
تابع هدف مساله حداقل کردن زمان تکمیل هست که برای دستیابی به این مقدار y باید برابر با مینیمم مقادیر (x1,x2,x3,…) باشه. y به طور مستقیم در تابع هدف نیست اما مقدارش تعیین کننده اس
ببینین طبق ساختار مسئله باید تصمیم گرفت. طبق چیزی که شما فرمودین، فکر میکنم مدل دوس داره y رو صفر کنه. برا همین من یه راه ابتدایی اومد تو ذهنم. قطعا راه های بهتری هم هستن که باید مطالعه کنین و سرچ بزنین. اونم فقط انگلیسی!
سه متغیر باینری که حاصلشون برابر با 1 هست رو تعریف کنین.
و دو معادله زیر رو تشکیل بدین.
[css]
y1+y2+y3=e=1;
y=y1*x1+y2*x2+y3*x3;
حالا min حذف شده. میمونه خطی سازی yx که باید مطالعه کنین اونا رو خطی کنین.
بازم میگم چون الان من چیزی به ذهنم نمیرسه دلیل نمیشه که راه های ساده تر و بهینه تری وجود نداره. هست. به ذهن من نمیاد الان
سلام و خسته نباشید
ببخشید من میخوام کران سیگمایی که مینویسم از t=1 تا 12 باشه. میشه راهنمایی کنید
باتشکر
سلام
ord(t)<=12
با سلام و وقت بخیر و ممنون بابت پاسخ گوییتون.
بله ولی در این حالت با درنظر گرفتن xهایی با مقادیر مثبت y برابر با صفر میشه. به عنوان مثال (min(5,7,4 با این روش برابر با 0 میشود.
خواهش میکنم. خب این دیگه بستگی به تابع هدف شما داره. هدفتون چی هست؟ مخصوصا اون بخشی از هدف که y توش هست.
سلام
من یک مسئله با حل لاگرانژ دارم ولی ضرایب لاگرانژم بدین صورته: u1(q,j,t) و u2(q,t)
این دوتا رو چطور تعریف کنم بصورت table؟؟؟؟
اعداد درون table چطور بزارم؟؟
و اینکه چطور مشخص کنم ضرائب از کدام اعداد شروع شود؟؟؟
باتشکر
سلام
دستور table رو اول مطالعه کنین. تو سایت گذاشتیم. مشکلی داشتین بعدش بپرسین.
با سلام و عرض ادب
آقای محمودی یه سوال داشتم از خدمتتون
من در مدلم یک محدودیت دارم به شکل زیر
ممنون میشم اگر راهنماییم کنید که چطور میتونم این محدودیت رو خطی کنم
سلام
وقتی مینیمم این سه متغیر برابر با y هست، پس هر سه بزرگتر مساوی اون y هستن.، پس میتونین عبارت معادلش رو به عنوان معادله تعریف کنین. یعنی این Min رو کلا حذف کنین وبنویسین x1>=y و x2>=y و…
با عرض سلام. یک سوال داشتم. دسته محدودیت زیر به چه صورت در گمز کد می شود:
جایی که A و Z هر دو متغیر بوده و j و k اندیس هستند. همچنین، E نماد عضویت و M مجموعه است. شایان ذکر است، دو محدودیت فوق بایستی برای تمامی j,k E M & j<k نوشته شوند.
با سپاس فراوان
سلام
شما اول باید m رو تعریف کنین. و j,k رو آلیاس m کنین.
بعد دو محدودیت بالا رو تعریف کنین. و برای هر کدوم صور عمومی رو به شکل زیر تعریف کنین.
[css]
const1(j,k)$(ord(j) < ord(k))..
سلام
ببخشید سوالی از خدمتتون داشتم
در برنامم یک پارامتر تعریف کردم ، و پس از اون اعداد این پارامتر رو بر عددی تقسیم میکنم
جالبه برام که کل این پرانتز رو در یک ضرب میکنم و یا در 1.001 ، جواب های مسالم تغییر میکنه، میشه راهنماییم بفرمایید مشکل کار کجاست
سلام
سوالتون واضح نیست.
ولی خب وقتی شما در دو عدد متفاوت ضرب کنین ممکنه تغییر کنه مشکلش چیه؟
سلام جناب محمودي
در خصوص مسئله زمانبندي و توالي عمليات سوالي داشتم.
چند دسته كار وجود داره كه بايستي به طور متوالي پردازش بشه. فرض كنيد دسته كارهاي 1 و 2 و 3 با توالي زير بايد پردازش بشوند:
3-2-1
يعني اول دسته سه و بعد دسته دو و در اخر دسته يك.
هر دسته شامل تعداد مشخصي از همان كاره. مثلا دسته 1 شامل 5 كار نوع 1 و دسته دو شامل 10 كار از نوع 2 و …
وقتي اين مسئله را حل ميكنم كارها به ترتيب پردازش نميشوند. مثلا اول كار 3 از دسته 2 پردازش شده و بعد كار 2 از دسته 1 و به طور غير مرتب. ايا راهي وجود داره كه بشه به مدل فهماند كه كارها را به ترتيب توالي و تعداد كارهاي هر دسته انجام بده. منظورم اينه كه اگر در توالي دسته 3 اول هست، همه كارهاي دسته 3 پردازش بشوند و بعد دسته هاي ديگه. يا حداقل چيزي شبيه به رول (FCFS (first come-first serve در تئوري توالي كه البته ديگه الزاما منجر به جواب بهينه global نميشه.
ممنونم
سلام
یه جدول با سه اندیس (کارi) – (دستهj) -(اولویتk) تعریف کنین. مثلا seq(i,j,k) که k=1*3
تو جدول جلو هر کار از هر دسته و زیر k=1 اگه یک قرار دادین، یعنی اولویتش یک هست و بقیه اون سطر رو صفر یا خالی بذارین. یا مثلا اونایی که اولویت 3 دارن (مثلا دسته ی 1 شما) جلوشون تو سطون k=3 یک بذارین.
از همین جدول برای شرط بندی تو محدودیت ها استفاده کنین.
سلام مجدد.
در مسئله من متغيرهاي تصميم و محدوديتها به فرم ذيل هستند.
من انديسهاي دسته و توالي را ندارم. با تعريف اين انديس ها ظاهرا بايستي تغييراتي را به محدوديتها بدم كه با اعمال اين تغييرات مسئله جواب نداره و بعضا حل نميشه.
اگر چيزي باشه كه بدون تغيير خاصي در مسئله و محدوديتها بشه جواب را ايجاد كرد، ممنون ميشم راهنمايي كنيد.
با تشكر
من یه مثال براتون ایمیل کردم. ازش استفاده کنین. بیشتر از این دیگه رو دوش خودتونه و ایشالا موفق میشین.
سلام جناب محمودي
ممنونم و لطف كرديد بابت فايلي كه ارسال كرديد.
فكر كنم مدل مربوط به كار كارگاهي منعطف باشه.
فقط اگر امكانش هست آيا فايلي در خصوص تعاريف پارامترها و متغييرهاي مدل هم وجود داره؟ بعضي از پارامترها خيلي شبيه به هم هستند و دركشون كمي مشكله.
محبت ميفرماييد.
خواهش میکنم.
یه ایمیل به سایت بزنین و یادم بندازین. مرسی
سلام جناب محمودي
مدلي دارم كه در يكي از محدوديتها بايستي به جاي يكي از انديسها در سمت راست محدوديت عدد CARD يك مجموعه قرار داده بشه. من پارامتري را تعريف كردم و كارد را به اون تخصيص دادم. اما زماني كه اين پارامتر را به جاي انديس در محدوديت قرار ميدم اشكال ميگيره.
كه N درمحدوديت بالا همون كارد مجموعه مورد نياز هست.
لطفا راهنمايي بفرماييد.
ممنونم
سلام
لزومی نداره پارامتری براش تعریف کنین. فرض کنیم N برابر با 10 هست که اندیس به شکل /n1*n10/ تعریف شده باشه.
با بنویسین مثلا x(j,”n10′,I)
یا تو محدودیت شرط بذارین:
با تشكر فراوان
مشكل حل شد عزيز
سلام. سایتتون عااااالیه خسته نباشید و ممنونم.
یه سوال داشتم از خدمتتون
من توی مدلم یه محدودیت دارم به شکل زیر:
U متغیر صفر و یک هست
و N=O/t بطوریکه O و t هردو پارامتر و معلوم هستند
برای این سیگما بازه ای وجود داره: (t,t+N)
من میخوام اگر N عدد صحیح شد عدد بالای سیگما t+N-1 بشه ولی اگر عدد صحیح نشد عدد بالای سیگما t+[N] بشه
اینو چطور میتونم در گمز مدل کنم؟
سپاس
سلام
ظاهرا شما در هر صورت یک عدد کوچکتر از t+N رو میخواین.
ممنون از پاسختون. من یه محدودیت رو هم اینطوری توی گمز نوشتم که ارور میده:
cons29(i,t)$(u(i,t) gt u(i,t-1) and Ton(i)/TH eq floor(Ton(i)/TH)).. sum(t$(ord(t) ge t and ord(t) lt Ton(i)+t),u(i,t))=g=(Ton(i)/TH);
u متغیر صفر و یک
i و t اندیس
بقیه پارامتر هستند
ارور 125 و 135 و133و 148 و 141و 257
مشکل کجاست … 🙁
سلام
متن ارورها رو بذارین. حفظ نیستم. تو بخش خطاهای گمز تعدادی از این ارورها رو گذاشتیم آموزششو.
متن خطاها:
من شرطی که روی متغیر داشتم رو توی محدودیت آوردم به این شکل:
و با دستور alias اندیس s رو به جای t گذاشتم
اما ارور الکی میده میگه ; رو نذاشتین و =g= ررو درست کنید! همین دو تا ارور روی این محدودیت
نمیدونم مشکل شاید اینه که t هم ایجاست cons(i,t) و هم توی سامیشن
ممنون میشم راهنماییم کنید
سلام
خسته نباشید
ببخشید من یک شبکه دارم که توش 5 تا پارامتر غیرقطعی دارم. هرکدوم از این پارامتر ها تعدادی سناریو مختلف دارند که تعداد کل سناریو های من رو در هر ساعت 500 میشه که حاصل ضرب سناریو های مختلف متغیرهای منه. میخاستم یک الگوریتم کاهش سناریو یا همون scenario reduction رو این مدل پیاده کنم چون تعداد سناریو ها خیلی زیاده زمان اجرای برنامه خیلی طولانی میشه.
خاستم ببینم در این زمینه میتونین بهم کمکی بکنین؟ راهنمای خود نرم افزار رو هم خوندم برا scenred ولی نتونستم کاری بکنم
ممنون
سلام
مرسی و خواهش میکنم.
مقداری تخصصی هست. کار رو ایمیل کنین بفرستم برای دوستان ببینم وقت دارن کمکتون کنن.
سلام آقای محمودی
چگونه می توان مدل دوسطحی را در گمس فرمول نویسی کرد؟
منظورم اینه مثلا در سطح پایین یک تابع هدف و چند محدودیت داریم که می بایست جوابش پس از محاسبه داخل تابع هدف و محدودیت های سطح بالا هم چک شده و نهایتا جواب بهینه نهایی حاصل بشه… ممنون میشم کمک نمایید.
سلام
یه بار مدل با هدف اول obj1 حل میشه. بعد اون متغیری که جوابش قراره به عنوان یه پارامتر (همون متغیر ثابت شده) بره به سطح دوم رو مشخص کرده و مقدارش رو فیکس میکنین. و دوباره با یه دستور solve دیگه به گمز میگین که هدف دوم رو بهینه کنه. فیکس کردن اینجوریه (فرض کنیم که قراره مقدار هدف اول به عنوان ورودی به مرحله بعد بره):
با سلام و وقت بخیر و ممنون بابت سایت خوب و پاسخ گوییتون.
یک سوالی داشتم. من یک بهینه سازی دارم که در اون اندیس پارامترم تابعی از یک متغیر هستش. مثلا:
f=b(g(x(i)))*x(i)…
b یک بردار پارامتری و x متغیر است.
چطور میتونم این رو در داخل بهینه سازی وارد کنم.
ممنون.
سلام
مرسی و خواهش میکنم.
b و g چی هستن. فرمولا رو کامل بنویسین.
سلام من دوتا محدودیت دارم به شرح زیر
PD یک متغیر صفر و یک هست که اگر p1<D باشد مساوی یک و در غیر اینصورت صفر میشه.
چطور میتونم این شرط رو به گمز بگم؟
مرسی از راهنماییتون
سلام
p1, D چی هستن. متغیر؟ از چه نوع؟ پارامتر؟
P1 و D و LocSup متغیر مثبت هستند. LimP و LimD پارامتر هستند. PD هم که متغیر صفر و یک
شما از ifthen میتونین استفاده کنین. تو کامنتای بالا سرچ کنین مثالاش هست.
میتونین دو محدودیت زیر رو به مدل اضافه کنین. این روش بهتر هست:
که M یه عدد بزرگه.
متشکرم از پاسخ شما.
سلام
وقت شما بخیر
بسیار ممنون میشم اگر برای سوال من راه حلی پیشنهاد بدید.
یک معادله تابع هدف در گمز مانند ax+by=f را در نظر بگیرید. ضرایب a و b اعداد بزرگتر از یک هستند که از داده های ورودی به دست آمده اند. اگر بخوام ضرایب f را از (a,b) به (1,1) تغییر بدهم یعنی f=x+y چکاری میتونم انجام بدم؟
سپاس فراوان
سلام
من متوجه منظور شما نشدم.
ولی ظاهرا شما میخواین تابع هدف f رو داشته باشین و a,b هم به شکل پارامتر تعریف بشن. درسته؟
اگه منظورتون اینه، شما a,b رو به شکل زیر قبل از معادلات تعریف کنین.
سلام؛ در محدودیت ها زیر سامیشن وقتی شرط کوچکتر مساوی دارم چجوری باید بنویسم؟
[sum(k $ (ord(k)T-1), x(n,n1,k) + x(n1,n,,k))=e=1[
اینو خودم نوشتم واسه این محدودیت که میگه تیم n و تیم n1 در مرحله k حتما باید با هم بازی کنند(میزبان یا میهمان) به شرط اینکه مرحله k از تعداد تیم ها کمتر باشه.
شرط زیر سامیشن رو درست نوشتم؟
ممنون
سلام
فرضا تعداد تیم ها 2 تا باشه:
با سلام . من در مدلسازی mip نوشتم و دو خطا میدهد
endogenous operands for * not allowed و دیگری erorr in analysing solve statement more detals appear below the solve statement above. و وقتی min lp نوشتم فقط مساله را میسازد وجوابی نمیدهد. و چیزهای دیگر هم که مینویسم اصلا حل نمیکند و میگوید این متغیرها برای این مدل وجود ندارد . ممنون میشم که من رو راهنمایی کنین که باید چه تغییری در برنامه بدم ویا اینکه مدل رو چطوری بنویسم.
سلام
مدل شما minlp هست و نباید mip بزنین.
از طرفی هم شما باید لایسنس داشته باشین.
دانلود لایسنس گمز
سلام جناب محمودي
سوالي در خصوص استفاده از براكت در نرم افزار داشتم.
اگر به جاي استفاده از پرانتز در نمايش انديسها در نرم افزار از براكت براي اين كار استفاده بشه، مشكلي در روند حل ايجاد ميكنه؟
با تشكر
سلام
خیر مشکلی نیست.
بی نهایت ممنونم از پاسختون. پس رابطه تابع هدف میشه:
Z = MAX ((z1-z1min)/(z1max-z1min)) + ((z2max-z2)/(z2max-z2min)) 0
یا
Z = MAX ((z1-z1min)/(z1max-z1min)) – ((z2-z2min)/(z2max-z2min)) 0
درست متوجه شدم؟
سلام
خیر.
اولی درسته. همون رو استفاده کنین.
خیلی ممنونم از لطفتون. پس برای هر دو هدف ماکسیمم سازی و مینیمم سازی از یک فرمول استفاده میشه درسته؟
ولی یکی از توابع باید منفی باشه چون با هم فرق دارن. من z رو ماکسیمم سازی در نظر گرفتم، z1 هم ماکسیمم سازیه، ولی z2 مینیمم سازی. میشه همین کد رو که لطف کردین نوشتین با در نظر گرفتن این ها بنویسین؟ چون من هم تو علامت +/- شک دارم هم تو روش نرمال سازی برای هرکدوم.
سلام
بازم رویه همینه. صورت مثبت میشه، مخرجم مثبته. حاصلشم مثبت میشه. z رو یه عده ماکسیمم میگیرن. یه عده هم مینیمم. جفتشم مرسومه و درست.
حتی میتونین صورت اون بخش منفی رو بزنین z2max-z2 و حاصل کل رو که z هست ماکسیمم کنین. اینجوری به نظر منطقی تر هم میاد.
خیلی ممنونم از لطفتون. پس برای هر دو هدف ماکسیمم سازی و مینیمم سازی از یک فرمول استفاده میشه درسته؟
بله. خواهش میکنم.
با سلام
میخواستم رابطه ایی را در گمز بنویسم. که در یکی از معادلات متغیر (t-1) در اندیس وجود دارد. در صورتی که در قسمت متغیرها، متغیر t را تعریف کردم. نحوه وارد کردن ان در معادله محدودیت به چه شکل است؟
سلام
منظورتون از متغیر اندیسه؟
با سلام. مدل موجودی داشتم. در این مدل t به معنای دوره می باشد و t-1 یک دوره ماقبل را نشان می دهد. برای نشان دادن ارتباط بین موجودی دو دوره باید در یک معادله هم t و هم t-1 در اندیس قرار گیرد. توضیح این که من t را در اندیس ها تعریف کردم. میخواهم چنین محدودیتی در گمز داشته باشم.
I(k,j,t)=I(k,j,t-1)+sum((j),u(k,j,t))-sum((j),x(k,i,j,t))
سلام
به همین شکلی که نوشتین درسته. یعنی t-1 هم همینجوری بنویسینش. فقط اندیس t رو حواستون باشه که با اعداد طبیعی تعریفش کنین. مثلا 1 تا 20
فقط نکته ای که این محدودیت داره اینه که وقتی t=1 باشه، شما باید موجودی اولیه داشته باشین. پس یه پارامتر به اسم I0(k,j) تعریف کنین و بهش به عنوان موجودی اولیه عدد بدین. بعد محدودیت به شکل زیر در میاد:
سلام،
من یک مسئله دوهدفه دارم که یکی از توابع هدف مینیمم و یکی ماکسیمم سازیه،
Z1 = max S, and
Z2 = min F,
من از جمع وزنی استفاده کردم، تابع هدف مینیمم سازی رو با علامت منفی در نظر گرفتم و به این صورت نوشتم:
Z = MAX (w1*S – w2*F);
اما نیاز دارم که توابع S و F نرمال هم بشن. از این رابطه برای تابع مینیمم سازی استفاده کردم،
normF = (F-Fmin)/(Fmax-Fmin)
اما برای تابع ماکسیمم سازی نمیدونم همین رابطه صدق میکنه یا نه و علامت های +/- رو شک دارم. ممنون میشم کمکم کنین که رابطه تابع هدف نهایی رو بدست بیارم.
سلام
رویه به این شکله:
1- مدل رو با در نظر گرفتن اینکه هدف z1 هست حل میکنین z1max و z2max به دست میان.
2- همین کار برای z2 انجام میشه.
3- فرمول تجمیعی برای نرمال سازی رو بنویسین. یه قسمتیش شبیه اینه
البته اینم دقت داشته باشین که بعضی محققا روشای دیگه ایی برا نرمالسازی (خیلی شبیه اینا) به کار میبرن. همه هم درست هستن.
خیلی ممنون از پاسختون من نحوه ی نوشتن این عبارت ها و تابع هدف تو گمز با هم رو نمیدونم.برای یک قسمت پروژم نیاز دارم.نه اون قسمت رو مشکلی ندارم و با (ord(i) ne ord(m))$ نمایش دادم.
ممنون از پاسختون.
سلام
این شرط رو که نوشتین درسته. ولی این کامنت دوم شما مشخص نیست چی به چیه دقیقا. واضح نیست. سوال رو واضح بپرسین در خدمتم. ضمنا لطفا ریپلای بزنین تو کامنت که گفتگو یکپارچه بمونه و بقیه دوستان استفاده کنن از گفتگو
با سلام و خسته نباشید
در این تاپیک شما در تابع نویسی از قواعدی پیروی کردین ودر فرم خاصی نوشتین و از خواننده ها این درخواست را کردین :
در فرمول های بالا قواعد و قوانینی در فرمول نویسی استفاده شده اند که در بخش تابع نویسی توضیح داده خواهند شد. در صورت نیاز به این بخش ها مراجعه نمایید. در اینجا صرفاً مهارتی که در تعریف محدودیت ها کسب می کنید مدل نظر می باشد.
اما در لیست شما عنوانی با اسم تابع نویسی وجود ندارد.اگر این مطلب پاک شده است خواهشمندم اضافه کنید
با تشکر
سلام
بله ظاهرا وقت نکردیم تاپیکی بذاریم. پس بهتره از کتاب های گمز استفاده کنین.
این لینک براتون مفیده
با سلام و وقت بخیر.ببخشید من چطور این تابع هدفو میتونم تو گمز کد کنم؟ممنون میشم راهنمایی کنید
سلام
مشکل شما با کدوم بخششه؟ اگه مشکل با m نا مساوی i هست که تو کامنتهای بالا دنبال عبارت ord باشین. متوجهش میشین.
سلام وعرض ادب
سوال من در خصوص تعریف محدودیت می باشد.
فرش شود که اندیس j رو تعریف کرده ایم که تعداد اعضای آن 20 تا می باشد (1 و2و3 …. 20)
حال می خواهم به تعداد اندیس های j محدودیت تعریف کنم با عناوین زیر
Const 01
Const 02
.
.
.
Const 20;
چطور میشه این کار را انجام داد
سلام
بزنین const(j)
ببخشید منظور من رو درست متوجه نشدید. منظورم ققسمتی است که Equations تعریف می کنیم . در واقع قبل از تعریف محدودیتها باید اونها رو نام گذاری کنیم. دقیقا منظور در قسمت نامگذاری ها هست که چطور میشه به طور مثال 20 محدودیت به صورت بالا نام گذاری کرد.
Equations
const_1
const_2
.
.
.
const_20
;
بعد برسیم به تعریف هر کدام از محدودیت های فوق
const_1 ..
سلام
اگه فرمولشون با هم متفاوته، (یعنی فرمول و صور عمومی متفاوتی دارند) چاره ای ندارین جز اینکه یکی یکی اسمشون رو بنویسین. اگه فرمولشون ثابته و سور عمومی اونها هم یکیه، میشه با یه اسم تعریف کرد. مثلا اسم یه محدودیت مثل فرمول زیر رو میشه c1(i گذاشت:
ممنون.
یه سوال دیگه هم دارم. فرض کنیم که دو اندیس مشابه داریم یعنی j , r. بدیهی است که با دستور alias تعریف شده است. به طوری که j مقادیر 1و2 و3و4و5 رو می گیره
j /1*5/
می خوام قید زیر رو تعریف کنم.
به طوریکه محدودیت به تعداد r تکرار شود. ( L یک متغیر دو اندیسه بر حسب j و r است.) به عبارت دیگر یک بار r=1 شود و قید اول روی j جمع بسته بشه. بار دوم r=2 و …
دستی تونستم این کار رو انجام بدم به صورت زیر
ولی وقتی تعداد اعضای j (و به طبع r ، چون alias (j ,r) هست) این کار مشکل میشه
سلام
هر دو روشی که نوشتین درسته. اینکه میگین مشکل ایجاد کرده، دقیقا چه مشکلی؟
مشکل وقتی پیش می آد که تعداد اعضای j زیاد میشه . مثلا 100. اونوقت باید 100 تا محدودیت به صورتدستی تعریف کنمو بعد یکی یکی برم اندیس r رو برابر عدهای ثابت قرار بدم. من می خوام این r رو برابر ثابت قرار دادن رو سیستمی انجام بشه.
گفتم که جفتش درسته تو کامنت قبلیتون. اولیه چون از سور عمومی r استفاده کردین خیلی بهتر و منطقی تره. فقط یادتون نره که r,j آلیاس هم هستن.
سلام
لطف میکنید بفرمائید که من این محدودیت ها رو چجوری بنویسم؟
هم x و هم u , اندیس های ijkt دارند ولی در مورد x ، سیگما فقط روی j هاست.
سلام
یه jp تعریف کنین که آلیاس باشه با j . بعد تو x به جای j بنویسین jp و روی jp سیگما بزنین
باسلام :
معادله ای به صورت زیر داریم :
=a×(b+c+d+e)+f1×f2×f3×(g-n)+l+f1×(m×(f2+i)-i×j×k-h-p×q- -t)
a در این معادله زمان 24 ساعت است و e ثابت است اما b,c,d به صورت زیر تعریف میشود :
b در 8 ساعت اول برابر 500 وc,d برابر صفر و e ثابت است(50).
c در 8 ساعت دوم برابر 700وb,d برابر صفر و e ثابت است(50).
d در 8 ساعت سوم برابر 1000وb,c برابر صفر و e ثابت است(50).
نحوه نوشتن آن چگونه است.
سلام
شما باید این پارامترا رو به زمان ربط بدین. من نمیدونم زمان شما چی هست و چحوری مشخص میشه. ولی در کل میتونین این معادله رو به مدل اضافه کنین.
که y ها متغیر صفر و یک هستن.
بعد عبارت بالا رو به شکل زیر باز نویسی کنین.
سلام جناب محمودي
در خصوص بهتر نوشته شدن مقدار تابع هدف پس از حل، ايا راهي براي اين مورد وجود داره؟
مثلا تابع هدف به فرم علمي نمايش داده ميشه و ميخوام كامل نمايش داده بشه.
نمونه علمي:
1.098520E+9
با تشكر
سلام
از آپشن decimals استفاده کنین.
ممنونم. فرمتش درست شد.
محبت كرديد
سلام. روز شما بخیر.
از پاسخ شما بسیار متشکرم.
در رابطه با سوال سوم، گفته شده که k و k’ اندیس دستگاه ها هستن که k عضو m(i,j) هستند و خود m(i,j) زیر مجموعه m(مجموعه کل دستگاه ها) می باشد.
این اگر به صورت شرط در محدودیت بخواهد نوشته شود، جهت نوشتن کد لطفا راهنمایی بفرمایید.
سپاس فراوان.
لطفا به همون گفتگویی که داشتیم ریپلای کنین. اینجوری گم میشه بحثمون. فقط پاسخ دادن رو بزنین تو اون گفتگو
سلام با تشکر فراوان از سایت عالیتون
یه سوال داشتم: وقتی که یک set از i تعریف میکنیم i رشته است . چطوری میتونیم به عدد تبدیلش کنیم تا برای a(i-1) مشکلی پیش نیاد؟
و اینکه از یه درایه یک ماتریس مثل m(i,j) چطوری میشه در عملگرهای منطقی استفاده کرد؟ منظورم از عملگرهای منطقی : $(m(i,j) eq2 (
سلام
مچکرم.
سوال اول: نمیخواد تبدیل به رشته کنین. یه ip تعریف کنین، که آلیاس باشه با i. بعد تو عبارت بالا به جای i-1 بنویسین ip و شرط بنویسین که به شرطی که ord(ip)=ord(i)-1
سوال دوم که خودتون جواب دادین.
سلام ببخشید یه محدودیت دارم که میخواد ماکزیمم یه عبارت و صفر رو محاسبه کنه. کد اینو توی گمز چجوری باید بنویسم؟
مثلا:
ببخشید محدودیتم خیلی اندیس داشت نمیشد بنویسمش اینجا. ممنون میشم راهنماییم کنین.
سلام
کافیه متغیر L رو بزرگتر مساوی صفر تعریف کنین. و محدودیت رو به شکل زیر بازنویسی کنین:
متشکرم.
من تاپیک مجموعه را هم مطالعه کردم ولی اکثرا مطالب این سبکی(حتی در این صفحه هم بوده و ارجاع دادید) به موضوعات دیگه ارجاع داده شده که مطالعه شود. و اکثر گفتید که قبلا بیان شده ولی من پیدا نکردم. و جواب قطعی سوالاتم را نگرفتم.
ای کاش در همین جا در یک مثال کد کوچک توضیح می دادید تا سوالاتم پاسخ داده شود.
سلام
سوال اول:
سوال دوم:
اگه تولی در کار مهم نیست یه nij تعریف کنین به شکل زیر:
یعنی یه جدول تولید کنین که هر کار به هر عملیاتی که ربط داشته باشه تو جدول 1 و هر جا ارتباط نداشته باشه هیچی نمیذارین (یا صفر میذارین)
سوال سوم مجهول است.
سوال چهارم: یه شرط باید بنویسین
سلام. روز شما بخیر.
در رابطه با سوال سوم، گفته شده که k و k’ اندیس دستگاه ها هستن که k عضو m(i,j) هستند و خود m(i,j) زیر مجموعه m(مجموعه کل دستگاه ها) می باشد.
این اگر به صورت شرط در محدودیت بخواهد نوشته شود، جهت نوشتن کد لطفا راهنمایی بفرمایید.
سپاس فراوان.
همچنین این شرط هم بیان شده است که k عضو اشتراک m(i.j) و m(ip,jp) هست. برای نمایش این شرط آیا به این شکل صحیح است که یک mk(i,j) در set تعریف کنم , (i,ip( و (j,jp) هم با هم آلیاس هستن و در محدودیت برای بیان شرط از این استفاده کنم؟
اگر ممکنه برای نمایش کد این هم یک مثال بزنید.
متشکرم
سلام. وقت شما بخیر.
آیا می توان آن را به صورت یک مجموعه دو یا سه بعدی نیز تعریف کرد و در شرط ها از آن استفاده کرد؟ این شرط که k عضو m(i,j) باشد را برای مثال تعریف کنیم m(i,j,k)؟
بله حتما
ببخشید که سوالات زیاد شد…
اگر O(i,j) داشته باشیم که عملیات j روی کار i هست به صورت تیبل تعریف می شود. برای بیان این شرط که در محدودیت o(i,j) مخالف با o(ip,jp) هست از چه دستوری میشه استفاده کرد؟
از پاسخگویی شما متشکرم.
دارین حساسترین قسمت کارتون (که احتمالی دارین رو توالی و زمانبندی کار میکنین) رو انجام میدین. بسیار رو جاهایی که o استفاده شده و یا j-1 و… فکر کنین.
برای این سوالتون تو شرط ها کافیه بگین که این دو تا برابر نیستن. خودش اعمال میکنه.
بسیار ممنونم.
یعنی اگر تنها در شرط بنویسم که (ord( i,j) ne ord(ip,jp $ این خودش برای o اعمال می کنه؟
و اینکه همراه این شرط، شرطهای دیگه هم مطرحه. که مخالف بودن اینا برای اونا صدق نمی کنه. در این شرایط چطور میشه نوشت؟
شما چند تا شرط باید داشته باشین. چند شرط زیر احتمالا همزمان برا شما نیاز باشن. هر چقدر دیگه هم لازم بود اضافه کنین.
سلام. وقت شما بخیر
ممنون از راهنمایی های شما.
یک قسمت در توضیحات فرمودید که روی j-1 دقت کنم. آیا در جاهایی که اندیس j-1 به کار رفته، آن را باید به شکل دیگری به کار ببرم؟
چون نرم افزار در قسمتهایی که اندیس را به صورت j-1 نوشتم ارور می دهد.
لطفا بفرمایید چطور باید این ارور را برطرف کنم و به چه شکل بنویسم؟
سپاس فراوان.
سلام
نه مشکلی نداره اینجوری بنویسین. مسئله اینه که از لحاظ مفهومی حواستون باشه.
متن ارور رو بذارین.
سلام.
چندین ارور هست که فقط به j-1 اشاره داره.
identifier expected
set identifier or ‘*’ expecte
یا برای j در همین قسمتی که به شکل M(i,j-1,j) نوشته شده ارور زیر را می دهد.
symbol redefined with a different type
ظاهرا بد استفاده کردین. این M برای شرطه؟
میتونین یه jp یا jpp تعریف کنین که الیاس j باشه. بعد بگین ord(jpp) مساوی با ord(j(-1
سلام. ممنون بابت راهنمایی های خوبتون
یه سوالی داشتم. من دو تا متغیر تابع زمان دارم که نمیخام همزمان رخ دهند. برای این کار چه شرطی یا چه قیدی میتونم بزارم که این دو متغیر در زمان های مشابه مقدار نداشته باشند؟
ممنون میشم اگر دو سوال اخیر مرا پاسخ دهید
سلام
نوع متغیر ها رو چجوری تعریف کردین؟ و شرایط رو دقیق تر بگین.
سلام
min(sum(t,(PDA(t)*landaDA(t))+(ppos(t)*landapos(t))-(Pneg(t)*landaneg(t)))-sum((drp,t,j),PF(t)*Pp(drp,j)*landa(drp,t)))=g=Bc
سلام
این سوالش چیه؟
سلام. وقت شما بخیر.
من چند سوال از خدمت شما دارم. تمام کامنت ها را هم بررسی کردم ولی متوجه نشدم. خواهشا لطف بفرمایید مثالی در این زمینه توضیح بدید یا پیامی مشابه در این زمینه را لینک دهید. متشکرم.
1- مسئله ای را می خواهم کدنویسی کنم که i و i’ اندیس کارها هستند و عضو مجموعه کلی کارها به نام I می باشند. لطفا بفرمایید این در قسمت set چطور نوشته می شود و این شرط در محدودیت چطور بیان می شود؟
2- مقدار j اندیس عملیات است که مقدار آن از 1 تا n(i) تعریف شده نمایش آن به چه شکل است؟
3- اگر موردی باشد که اندیس ما عضو یک مجموعه پارامتر یا تیبل باشد مثلا k عضو m(i,j) , و همچنین m(i,j) خودش زیرمجموعه یک مجموعه بزرگتر مثل m باشد این چطور در set و به عنوان شرط در محدودیت بیان می شود؟
4- و همچنین اگر در محدودیت ذکر شود که فرض مقدار j از 2 تا n(i) باشد به عنوان شرط در محدودیت چطور ذکر می شود؟
لطفا نمونه کد و توضیح کوتاه در صورت امکان بفرمایید.
سپاس فراوان
سلام
کل تاپیک هایی که تو لینک زیر هستن رو بخونین.
مجموعه ها
با سلام
من یک قیدی تعریف کردم به شکل زیر، ولی با ارور 203 مواجه شدم.
چجوری باید این قید رو تعریف کنم که خطا رفع بشه؟
سلام
ببخشید معادله تون حذف شد داشتم دستکاریش میکردم. لطفا مجددا معادله رو ریپلای کنین.
N: تعداد کل گره ها شامل گره انبار و مشتریان است که 0 تا Nانبار و اندیس 1 تا Nمشتریان را نشان می-دهند.
i و j اندیس های گره انباره و مشتریان که شامل مقادیر 0 تا N+K’ هستند.
اندیس 1 تا N معرف مشتریان هستند و اندیس 0 و N+1 تا N+K’ گره مبدأ یا انبار را نشان می دهند. گره¬های N+1 تا N+K’ گره¬های مجازی و کپی شده از گره انبار می¬باشند.
(من خودم بصورت فرضی تعداد مشتری رو 1 تا 4 و تعداد انبار رو0 تا 3 در نظر گرفتم)
K: تعدا وسایل نقلیه متفاوت در دسترس(اینو من مقدار دادم از خودم به ازای هر وسیله)
Qk: ظرفیت هر وسیله نقلیه k(اینو من مقدار دادم از خودم به ازای هر وسیله)
Pi: ضریب اولویت مشتری iام(اینو من مقدار دادم از خودم به ازای هر مشتری)
Si: زمان خدمت دهی به مشتری iام(اینو من مقدار دادم از خودم به ازای هر مشتری)
Mij: تعداد یالهای موازی بین گره i و گرهj(اینو من مقدار دادم از خودم به ازای هر گره)
Hmij: تعداد بازههای زمانی مربوط به mامین یال بین گره i و گره j(اینو من مقدار دادم از خودم به ازای هر گره)
Ek: هزینه ثابت وسیله نقلیه kام(اینو من مقدار دادم از خودم به ازای هر وسیله)
Ck: هزینه متغیر وسیله نقلیه kام(اینو من مقدار دادم از خودم به ازای هر وسیله)
qi: میزان تقاضای مشتری iام(اینو من مقدار دادم از خودم به ازای هر مشتری)
Yijm: مقدار کالایی که وسیله نقلیه kام هنگام سفر از گره i به j از کمان mام حمل می¬کند.(اینو من مقدار دادم از خودم به ازای هر وسیله)
و بر ای همه جدول هاشونو رسم کردم.
همچنین متغیرهای زیر در مدل محاسبه می¬شود:
X که یه متغیر باینری به ازای kijmhهستش .
اگر وسیله نقلیه kام از طریق mامین یال موازی از گره i جهت خدمت دهی به گره j در hامین بازه زمانی مرتبط با این یال حرکت کرد یک و در غیر این صورت صفر خروجی می¬شود.
ti : زمان خروج وسیله حمل و نقل از گره i
Wi: مقدار بزرگتر یا مساوی وزن (یا حجمی) که وسیله نقلیه هنگام خروج از گره i حمل می¬کند.
ri : میزان تأخیر از حد بالای پنجره زمانی مشتری iام
اگر ناوگانی از k نوع وسیله نقلیه متفاوت که در مبدأ قرار گرفته است و هر یک دارای ظرفیت Qk و هزینه ثابت Ek و متغیر Ck باشند و از هر نوع وسیله kام تعداد nk موجود باشد. هزینه متغیر از رابطه زیر بدست می¬آید:
Cijmijk=dijmij*Ck
بنابراین k ماتریس هزینه متقارن داریم مقدار کالای حمل شده توسط وسیله نقلیه kام هنگام سفر از گره i به j برابر با می¬باشد.
با توجه به موارد فوق مسئله مورد بررسی را می¬توان چنین فرمول¬بندی کرد
MIN Xkijmh*Ek+ti+pi*ri+Cijkm*Xkhijm که قبل هر متغیر به ازای هر اندیس یه سامیشن داره که من نتونستم اینجا نشونش بدم
که رابطه فوق تابع هدف را نشان می¬دهد. این تابع مجموع چهار عبارت است که به ترتیب هزینه¬ ثابت وسیله حمل و نقل به کار گرفته شده، جمع زمان¬های کل سفر و هزینه¬های ناشی از دیر کرد در خدمت رسانی به مشتریان و هزینه¬های متغیر وسیله حمل و نقل می¬باشند. در این مسئله، با یک تابع سلسله مراتبی رو به رو هستیم، که در آن ابتدا حداقل تعداد وسایل حمل و نقل مورد نیاز جستجو می¬شود و سپس حداقل هزینه¬های کل مسیریابی بر اساس تعداد وسایل حمل و نقل انتخاب شده محاسبه می¬شود.
بعد این هم محدودیت ها شروع میشه
ممنون میشم راهنماییم کنید خیلی کارم ضروریه
سلام
کل مدلتون رو اینجا گذاشتین. این شیوه صحیح سوال پرسیدن نیست. سوالی نپرسیدین.
سلام
من می خوام یک مجموع بنویسم منتها اندیس i که به صورت سور عمومی نوشته می شه از یک مجوعه خاصیه مثلا تفاضل دو مجموعه که قبلا تعریف شده
چظور این کارروبکنم؟
سلام
از دستورات شرطی دلار استفاده کنین. در کامنت های همین تاپیک به دنبال علامت دلار $ و ord باشین.
توکامنت قبلیم تابع هدفم ثبت نشد تابع هدف من از بنج شیشتا سامیشن تشکیل شده که نمیدونم اینارو چجوری تو گمز نمایش بدم
سلام
به هر شکلی که بلدین اینجا بنویسینش. در خدمتیم.
سلام وقتتون بخیر من برا پایان نامم یه مدل VRPرو باید runکنم و خیلی مبتدی هستم ممنون میشم کمکم کنید.مسئله من خیلی متغیر داره
این تابع هدف رو چجوری میتونم بنویسم؟
سلام در گمز چجوری میتونن تابع چند هدفه را حل کنند؟
تابع هدفهای من به این صورت می باشد
minz1= ∑xi
maxz2 =∑ti*xi
سلام
ببینید تو گمز با تابع solve مرسوم نمیشه چند هدفه رو حل کرد. مث خیلی از نرم افزارهای دیگه. چاره اینه که از یه رویکرد استفاده بشه.
مثلا یه رویکرد میگه که اهداف رو جمع وزنی بکنیم. مثل w1z1+w2z2 و با یه دستور solve حلش کنیم.
رویکرد های زیادی برای برنامه ریزی چندهدفه معرفی شده که شما باید یک یا چندتاش رو انتخاب و استفاده کنین.
اینا یه تعدایشونه:
1- رویکرد های وزنی+وزنی نرمال سازی شده+روش معیار جامع
2- رویکرد لکسیکو گراف
3- برنامه ریزی آرمانی
4- روش اپسیلون محدودیت
6- روشهای فازی چندهدفه
….
در موردشون مطالعه کنین، فقط یادتون باشه یه سری از این روش ها جواب تکی ارائه میدن. مثلا میگن هدف اول شما انقد میشه و هدف دوم اونقد. یه سری هم یه مجموعه جواب ارائه میدن.
با مشورت استادتون روش مناسب رو انتخاب کنین.
با سلام
برای نوشتن یکی از محدودیت ها مدلم سوال داشتم اگر راهنمایی نمایید ممنون می شوم.
این رابطه قید است مشکلی که من دارم با dt است نمی دانم که این عبارت را چطور در گمز بنویسم.
کارم عقب مونده اگه راهنمایی کنید ممنون میشم
سلام
مشکل با dt جیه؟
سلام
نمیدونم باید این معادله رو توی گمز چطور بنویسم . dt رو باید متغیر تعریف کنم؟؟
ممنون
متوجه شدم سوال رو. من میگم خود dt چی هست؟ مشتقه؟ یه پارامتره؟ متغیره یا چیه؟ چرا روش سوال دارین.
سلام
dt مشتقه، که مطابق با فرمول بالا در متغیر ضرب شده
این عمل تو گمز انجام نمیشه.
برا انتگرال و مشتق، شما باید دستی مشتق یا انتگرال رو بگیرین، فرمولش نهایی و معادلش رو تو گمز بذارین و استفاده کنین.
ممنون از راهنماییتون
سلام آقای محمودی عزیز و بزرگوار
من تو نتایجم اگه مقدار صفر باشه نشون نمیده. گمز من این مشکلو داره یا کلا همین جوری هست؟؟
اگه میشد ی عکس بفرستم قشنگ مشخص میشد.
سلام
آقایین شما دوست عزیز.
تو قسمت display همیشه اینجوریه. اگه میخواین کاملش رو ببینید، قسمت solvar رو که یکم بالاتر از display هست تو فایل lst چک کنین.
جتاب محمودی
سلام
ضمن تشکر و آرزوی توفیق در راهی که در پیش دارید.
سوالی دارم که ممکن است برای سایر دوستان پیش آمده باشد. چنانچه مقدورباشد و پاسخ بفرمائید سپاسگذار خواهم بود.
سوال:
من یک سری داده دارم که تحت عنوان جدول
SAM
شناخته می شود. این جدول را با توابعی شناسایی کرده و با کالیبره کردن پارامترها، اقدام به باز تولید این جدول می کنیم که با جدول اولیه با تقریب دلخواه برابر می شود. حال با تغییر در برخی پارامترها می توان برخی اثرات در داده ها را بررسی کرد
حال در نظر داریم بعد از کالیبره کردن مدل یکی از توابع را اساسا تغییر دهیم و اثر آن را در داده ها بررسی کنیم.
آیا اساسا امکان چنین عملی وجود دارد؟
آیا در جایی از این سیستم امکان تعریف توابع جدید در حین اجرای برنامه وجود دارد؟
سلام
در حین اجرای برنامه یعنی چی؟
شما بعد کالیبره کردن میتونین تحلیل حساسیت انجام بدین همونطوری که فرمودین.
حالا اگه بخواین یه معادله رو تغییر بدین، کافیه یه اسم جدید برا معادله تعریف کنین، و به دستور model بفهمونینش
با سلام
چرا وقتی در مدل معادله ای به شکل
constraint(i.j.t) .. U(i.j.”period6″) = 0
می نویسم با تعیین متغیر بعد از دستور model و پیش از دستور solve به شکل
U.fx(i.j.”period6′)=0
جواب مساله با هم فرق می کند؟؟؟
مگر هر دو حالت یک معنی ندارد؟
سلام
مقدار تابع هدف با هم فرق میکنه یا سایر متغیرها؟ چقدر طول میکشه؟ مدل از چه نوعی هست؟ و مقدار گپی که میده چنده؟
اینم فک کنم متوجه شدم. کاردینالیتی بر یک مجموعه نوشته میشود. این در حالی بود که من کاردینالیتی را بر یک پارامتر مینوشتم.
بسیار عالی
سلامی دوباره به آقای محمودی بزرگوار
آقای محمودی مشورت با شما بسیار باعث پیشرفت من میشه. بابت لطف شما متشکرم.
یه سوال دیگه دارم اینکه مثلن همون متغییر y اگه دارای مقدار صفر باشه کامپایلر گمز اونو نمایش نمیده. حتی اگه این متغییر یک مجموعه پاسخ با ده عضو باشد و اگر یکی از این پاسخها صفر باشد و ما تعداد اعضای این مجموعه را از گمز بخواهیم (کاردینالیتی مجموعه) ، کامپایلر گمز مقدار 9 را نشان میدهد. در حالیکه در واقع 10 عضو دارد ک یکی از عضوهایش مقدار صفر دارد. این مشکل را چگونه میشود برطرف کرد.
با تشکر
سلام
مچکرم موفق باشید.
مشخص نیست چیکار میخواین بکنین با این کاردینالیتی. هم توضیح بدین، هم اون قسمت کد رو بذارین لطفا.
سلام
چجوری میشه مقدار ی متغییر را در گمز بررسی کرد؟؟ ینی بعد از حل یک سری از معادلات و بدست آوردن جوابهای متغییر مثلا y ک به مجموعه مثلا i وابسته هستند، حالا بصورت اتوماتیک مثلا در یک loop تمام جوابهای y بررسی شود و متناسب با پاسخهای y اعمال جدید را انجام دهیم. ب عنوان یک مثال ساده:
loop(i,
دستور مورد نیاز برای بررسی پاسخهای y؛
اگر پاسخ y برابر با یک نبود؛
یکی به مقدار اسکالر l اضافه شود.
سلام
کافیه تو لوپی که می نویسین، به جای y بنویسین y.L
بله محدود کردم که 3 تا تسهیل استقرار پیدا کنه
باشه پس سعی میکنم تحلیل کنم که مشکل از کجاس
خیلی ممنونم.
با سلام و خسته نباشید
در مدل من دو عدد متغیر هست که متغیر x(i,j,m) باینری است و اگر تقاضای i به تسهیل j در مرحله ی m تخصیص یابد مقدارش برابر یک بوده و در غیر اینصورت برابر صفر است. یک متغیر دیگر هم y(j) است که باینری بوده و در صورت باز بودن تسهیل j برابر با 1 و در غیر اینصورت برابر با صفر می باشد. محدودیت هایی در مدل به صورت زیر تعریف کردم:
محدودیت 1 : هر تقاضا در هر مرحله از تخصیص تنها توسط یک تسهیل برآورده می شود
محدودیت2: هیچ تقاضایی نمی تواند به همان تسهیل طی دو مرحله و یا بیشتر تخصیص یابد.
محدودیت3: تسهیل j باید باز باشد تا تقاضا به ان تخصیص یابد ( این محدودیت برای j های بزرگتر مساوی 4 هستش)
محدودیت4: برای j های بزرگتر از 4، حداکثر سه تا از تسهیلات میتوانند باز باشند
محدودیت 5: حداقل سهم بازاری که j های بزرگتر از 4 باید کسب کنند.
محدودیت ها رو که یکی یکی اضافه کردم متوجه شدم که محدودیت 1 همه x ها رو در همه مراحل تخصیص1 میکنه و وقتی که حذفش می کنم همه x ها صفر می شوند. محدودیت 2 هم باعث میشه که هزینه کل صفر بشه. میخواستم ببینم این کدهایی که نوشتم درسته؟ چون محدودیت ها کاری که باید اعمال کنند رو نمی کنند.
خیلی ممنون از سایت خوبتون
سلام
شما اگه تعداد تسهیلات رو محدود کنین، مثلا بگین که 5 تا تسهیل احداث میکنم. و تابع هدفتون رو درست تعریف کنین این مشکل پیش نمیاد. این چیزا به همه محدودیت ها و تابع هدف ربط داره. ببینید و تحلیل کنید که چرا x دوست داره اینجوری باشه و چجوری میشه جلوشو گرفت.
خواهش میکنم.
موفق باشید
عبارات داخل پرانتز هم متغیر هستن و نه پارامتر
فکر کنم 2 راه برای کد کردن داره :
1- خطیش کنم2- عین همون عبارت رو بنویسم چون چنین دستوری در گمز داریم :
max(x,y,..) =Largest value among all arguments.
درسته؟
سلام.
بخشی از تابع هدفم بدین صورت هست:
این عبارت رو به چ صورت در گمز کد کنم؟ ممنون
سلام
هدف ماکسیمم سازیه یا مینیمم سازی؟
هدف مینیمم سازیه. البته عبارت فوق بخشی از تابع هدف هستش
کافیه دو تا متغیر مثبت تعریف کنین. مثلا t1,t2
بعد دو محدودیت زیر رو به مدل اضافه کنین:
سلام و ممنون بابت سایت و پاسخگویی خوبتون.
لطفا در نوشتن کد زیر راهنمایی کنید
مجموع رو چه جوری بنویسم که i وh بسته به mو n از ماتریس انتخاب شوند مثلا اگر m=5 و n=4
(c(3,2 در y )متغیر باینری (ضرب بشه؟
سلام
شرط رو به شکل زیر بنویسین:
برای مطالعه بیشتر تاپیک مجموعه های چند بعدی را مطالعه کنید.
سلام..ممنون از سایت خوبتون
من یک متغیر دارم به عنوان مثال x که اگر y مثبت بود مقدار آن صفر می شود و اگر y منفی باشد هر مقداری می تواند داشته باشد…حالا میخواهم طبق آنچه در کامنتا راهنمایی کرده بودید از دستور ifthen در قیدها استفاده کنم…
x=e=ifthen(y>0,0,..) اما قسمت سوم دستور را (که با نقطه چین مشخص کردم) نمیدانم چگونه بنویسم…ممنون میشم اگر منو راهنمایی کنید.
سلام
خواهش میکنم.
برا قسمت سوم کافیه بذارین x، یا مثلا یه متغیر دیگه مثل z تعریف کنین، که برابر با x باشه تو یه محدودیت دیگه. و اینجا تو قسمت سوم بنویسین z.
اگه بتونین خطی کنین این گزاره ها رو بهتر حل میشه مدل.
ممنون از شما
سلام ، با سپاس از سایت مفیدتون ببخشید من میخاستم محدودیت زیر که به دلیل داشتن “قدر مطلق” غیر خطی هست رو خطی کنم اما بلد نیستم میشه کمک کنید :
T (i,j,k) + |St(i,k) – St(i,j)| ≥ 1
متغییر T یک متغیر باینری یا صفر و یک هستش و متغیر St هم عدد صحیح، نمادهای داخل پارانتز هم اندیسها هستند.
البته تفاضل داخل قدر مطلق کار رو سخت کرده در واقع مهم خطی کردن خود قدر مطلق هستش یعنی این : | (St(i,k) – St(i,j) |
با سپاس
سلام
این گفتگویی که بین دوستان انجام شده رو مطالعه کنید. اینجا کلیک کنید.
ممنونم…کمک بزرگی به من کردید
خواهش میکنم.
سلام …ممنون از سایت عالیتون که واقعا بهترین مرجع برای یادگیری گمز هست
فرض کنید یک تابع هدف دارم به صورت: . c= f(x)g(y)
حال می خواهم کل تابع هدف ماکزیمم شود اما f(x) مینیمم شود.خوشحال می شوم اگر منو راهنمایی کنید
آیا می شود در قسمت constraintها قیدی لحاظ کرد که f(x) برابر مقدار مینیمم خود باشد؟
سلام
مچکرم. این حرف شما برا ما قوت قلبه.
چرا میخواین همچین کاری بکنین؟ مقاهیم هر تابع هدف رو بگین لطفا. خیلی مختصر
ممنون از شما…امیدوارم همیشه موفق باشید
راستش تابع f(x) تابع قیمت بازار هست که بایستی با درنظر گرفتن یک سری قیدها مینیمم قیمت بازار انتخاب شود، پس در حالت کلی f(x) مینیمم می شود. تابع g(y) تابع تولید ژنراتور هست…پس به طور کلی بایستی سود ژنراتور یعنی f(x)*g(y) ماکزیمم شود، اما قیمتی انتخاب شود که مینیمم قیمت انتخاب شده توسط اپراتور بازار باشد…نمیدونم تونستم مفهوم و برسونم یا خیر
مچکرم شمام همینطور.
به طور همزمان این کار ممکن نیست تو یک هدف نشون داده بشه.
برای اینکار میان مدل رو دو هدفه میکنن. یه هدف ماکس سود و یک هدف مین قیمت. بعد که این کار رو کردین باید با روش های مخصوصی مدل رو حل کنین. این روش ها خیلی زیاد و متنوع هستن. اگه دارین دقیق حلش میکنین، مثلا دارین با گمز حل میکنین، وقتی دو هدفه میشه با روش وزنی، لکسیکو گرافیک و محدودیت اپسیلون eps-constraint میتونین حلش کنین. که لازمه ش اینه که اول این روش ها رو یاد بگیرین، بعد نوبت به کد میرسه. پیشنهادم اینه که مطالب با کلمه ی کلیدی multi-objective optimization methods رو بخونین و روش مناسب رو انتخاب کنین برای کارتون. اگرم با الگوریتم فرا ابتکاری قصد دارین مدل رو حل کنین، میتونین با nsga2, mopso و … این کار رو انجام بدین. پس شد: دو هدفه کردن مدل، مطالعه در مورد روش ها و انتخاب روش بهتر، حل با سالور یا الگوریتم مناسب. انتخاب که کردین رو همین مطلب باز کامنت بزنین که مشورت کنیم با هم. موفق باشید
سلام
ممنون میشم اگه در خصوص موضوع ذیل راهنماییم کنید:
چجوری میشه در معادلات، دو معاده رو در Time step های مختلف به هم مرتبط نمود.
به عنوان مثال من یه معادله تولید از مخزن دارم که تابع فشاره و فشار اولیه هم مشخصه. در این حالت تولید t0 بدست میاد.
حالا برای تخمین تولید t1 باید از یه معادله فشار p1 رو تخمین بزنم و این p1 بشینه تو معادله تولید q1 که مقدارش بدست بیاد و الی آخر.
با توجه به اینکه نمیشه حلقه های loop و for رو در خصوص متغییرها اعمال کرد، چجوری میتونم این مدل رو بنویسم.
با سپاس
سلام
تو اینجور مواقع باید معدله ش رو به عنوان محدودیت بنویسین. مثلا (این یه مثاله ها و اون چیزی نیس که شما دقیقش رو میخواین. ازش ایده بگیرین):
سلام
من تو تابع هدفمم میخوام هزینه ها دو مینیمم کنم و یکی از عبارتهای تابع هدفم هم مینیمم کردن منفی سود هست. وقتی این عبارت رو وارد تابع هدفمم میکنم. infeasible میشه باید چه کرد؟
سلام
ظاهرا نشدنی نشده، بی کران شده. سود رو انقد زیاد میکنه که به بینهایت برسه. این مشکل وقتی پیش میاد که هدف چند بخش داره و علامت یکی از بخش ها مخالف بخش های دیگه هست. شما برای تابع هدفتون میتونین یه حد پایین یا بالا در نظر بگیرین. معمولا با صفر این کار انجام میشه.
سلام
بنده سوالی در مورد برنامه ام داشتم که متاسفانه هر چه تلاش کردم نتونستم اینجا ارسال کنم و براتون ایمیل کردم. لطفا ایمیل بنده رو چک بفرمایید
سپاسگزارم
ممنون
من چندتا مقاله خوندم در این زمینه
ولی متاسفانه نتونستم جواب رو پیدا کنم
شما تا به حال با چنین مساله ای مواجه نشدید که بدونید معمولا از چه روشی برای این دسته از مسائل استفاده میشه؟
برا مسائل مختلف فرق میکنه رویه ها.
باید بگردین خب. معادله رو خودتون نوشتین یا از جایی هست؟ اگه از مقاله ای گرفتین اون مقاله و ریفرنس هاش رو چک کنین
این کار برای پایان نامه ام هستش
مدل رو با استفاده از یک مقاله نوشتم
ولی در مقاله و رفرنس هاش هم که نگاه کردم توضیح نداده بود که به چه صورت کدنویسی گمز رو نوشته بود
و فقط گفته بود که از نرم افزار گمز برای حل این مدل استفاده کرده بود
مقاله رو بفرستین ببینم چجوریه. وقت داشته باشم چک میکنم. شمام بیشتر سرچ بزنین.
با سلام
من میخوام که یک مدل مکانیابی چندهدفه رو با گمز حل کنم
مدل من دارای محدودیتهایی در حالت احتمالی هستش
میخواستم بپرسم که برای مثال رابطه ی P(0<x<1) رو که به معنای (احتمال اینکه x بین 0 و 1 باشه) هستش رو در بخش معادلات گمز چطور باید بنویسم؟
پیشاپیش بابت پاسخگویی ازتون ممنونم
سلام
همینجوری نمیشه کد نویسیش کرد. باید عبارت معادلش رو تو گمز بنویسین. بگردین تو مقالات مشابه، معمولا بعد از مدل سازی، یه قسمت هم میذارین که عبارات معادل این معادله های احتمالی رو میذارن. و اونو باید کد کنین شما.
با سلام
جناب اقای مهندس محمودی بنده در نوشتن کد برنامه ام دچار مشکلی شدم که ممنون میشم در صورت امکان راهنماییم بفرمایید.
هدف بنده نوشتن بیلان مخزن به عنوان یکی از قیود مساله هست، در معادله اول همه پارامترها به استثنا ad(t) که با متغیر اصلی مساله قابل تغییره معلوم هستن و t معرف ماه های سال هست که از 1 تا 12 تعریف شده برنامه به این صورت هست باید به صورت لوپ عمل بشه و v از ماه قبل به این ماه منتقل بشه که با ران هایی که گرفتم درست عمل میشه مشکل اینجاست که چون معادله اول حجم مخزن در ابتدای ماه رو محاسبه میکنه لذا برای ماه آخر(12) از قیود مساله (min volume, max volume, end of year , last month)پیروی نمی کنه و عملا با تخصیص مقدار بالا به ad حجم مخزن رو در انتهای سال صفر می کنه. بنده برای حل مشکل معادلات دوم و سوم رو بطور مجزا اعمال کردم ولی متاسفانه حل با یک مقدار infeasile انجام میشه(لازم به ذکره که بین معادلات end_of_year و last month تفاوتی نیست و هر کدوم که محقق بشن از نظر بنده درسته
reservoir_bilan(t)..V(t+1)=e=V(t)+id(t)-sum(c,Dr(c,t))-sum(c,Ind(c,t))-sum(c,Od(c,t))-L(t)-E(t)-O(t)-ad(t);
*unit:MCM *V(t):volume of the reservoir at the begenning of the month
end_of_year..sum(t,id(t)-sum(c,Dr(c,t))-sum(c,Ind(c,t))-sum(c,Od(c,t))-L(t)-E(t)-O(t)-ad(t))=g=0;
last_month..(V(’12’)+id(’12’)-sum(c,Dr(c,’12’))-sum(c,Ind(c,’12’))-sum(c,Od(c,’12’))-L(’12’)-E(’12’)-O(’12’)-ad(’12’))=g=V(‘1’);
min_volume(t)..V(t)=g=100;
*minimum volume of the reservoir
max_volume(t)..V(t)=l=420;
*maximum volume of the reservoir
سلام
ببخشید من خیلی نتونستم مطالعه کنم و دقت کنم. ولی به عنوان پاسخ اولیه به شما:
شما برای v(t) مقداری باید حساسیت به خرج بدین. معمولا میان براش یه مقدار اولیه در نظر میگیرن. یعنی وقتی t=1 هست، چه بلایی سر معادله میاد؟
برای قید آخر سال شما میخواین که مثلا محدودیت minVolume برای اخر سال باشه یا برای فقط t=12?
سلام
بله درست می فرمایید کل برنامه رو خدمت تون ایمیل کردم. مقدار اولیه v(1) در برنامه مشخصه و min ,maxvolume باید هر ماه اعمال بشه برای پایان سال هم قیدی برای حجم مخزن دارم منتها مشکل اینجاست که قید پایان سال رو ظاهرا نمی تونم درست برای برنامه تعریف کنم یعنی ظاهرا معادلات با هم تداخل مفهومی پیدا می کنن چون عملا قید پایان سال v(13) میشه ولی چونt تا 12 تعریف شده ظاهرا به مشکل میخوره(من به جای v(13) دو معادله end of year , last month رو بطور مجزا اعمال کردم ولی مشکل اون مقدار infeasible هست) میخوام بدونم چطور می تونم این قید پایان سال رو تعریف کنم چون اگر این قید تامین بشه عملا قید max , min هم تامین میشن
سلام
یک سطر از مدلی که نوشتم دستورord(m)ord(k) دارد
براساس این دستور باید مقدار سطر برابر با صفر بشه
اما این طور نمیشه
دلیلیش چی میتونه باشه؟
سلام
لطفا واضح تر سوال بپرسید. تشکر
این سطر از تابع هدف باید زمانی که m و k مخالف هستند، مقدار بگیره
بعد از ران برای مسیر از 7 به 2 مقدار m=k شد. پس این برای این مسیر نباید سطر بالا مقدار بگیره
با نوشتن دستور بالا بعد از دستور سالو متوجه شدم که مقدار گرفته و هم چنین جواب فراابتکاری و گمز متفاوت می شوند
سلام
الان عبارت ord(m)ord(k) یعنی چی؟ همونجوری که تو دستور ذوم هم نوشتین، دقیق باید بنویسین ord(k) ne ord(m) و… چیزی که الان تو هدف نوشتین معنی مورد نظر شما رو به گمز نمی رسونه.
C00(n,s) $ (D(s,j,n) < 5000).. sum(j,Alpha(s,j,n)*S2(j,n))=l=Kmax*CS(s,n);
سلام. ببخشید عبارت بالا که مربوط به محدودیت است چه اشکالی داره که گمز خطا میگیره؟
سلام
شرط دلار باید بره بعد از اندیس j توی دستور sum، یعنی sum(j$(…..),alpha
سلام..خسته نباشید…ممنون از سایت خوبتون
من را ستش objective function بر حسب زمان دارم و با تغییرات زمان تغییر می کند…اما گمز ارور می دهد وقتی متغیر OF را بر حسب پارامتر می نویسم…همچین وقتی برای آن loop تعریف می کنم باز هم ارور می دهد…ازتون خواهش می کنم مرا راهنمایی کنید..ممنون
سلام
یعنی چه بر حسب پارامتر می نویسین؟
بله…یعنی اول تابع ماکزیمم می شود و مقدار x فیکس می شود…در مرحله دوم تابع با مقدار x بدست آمده مینیمم می شود تا مقدار y فیکس شود.
لطفا به همون گفتگویی که داشتیم ریپلای کنین. اینجوری بحث بالا ناتموم می مونه و کاربرای دیگه نمیتونن استفاده کنن. مرسی
رویه کلی به این شکل هست:
بسیار متشکر از پاسختون.
یک سوال دیگه داشتم از خدمتتون که در قسمتی از کد به مشکل خوردم.
فرض بفرمایید چندتا پروژه داریم که در هر واحد زمانی(t) نیاز به منبع دارند و در هر واحد زمانی(t) هم مقدار محدودی از هر منبع موجود است و فرض بر این است اگر در واحد زمانی قبل (t-1) منبعی اضافه باقی ماند با منبع موجود در واحد زمانی فعلی جمع گردد(به واحد زمانی بعدی منتقل گردد) ، من اون قسمت دوم که از زمان قبلی منتقل میشود متاسفانه نتونستم کد کنم به علت محدود کردن کران بالای سامیشن(t-1)
البته میدونم قسمت مربوط به دوره قبل اشتباه نوشته شده ولی به صورت نمادین با (t-1) نوشتم که متوجه شید.
خیلی ممنون میشم اگر راهنمایی بفرمایید.
سلام
خواهش میکنم.
این دیگه اول باید مدلسازی بشه بعد کد نویسی. یه راست نباید برین سر کد نویسی. مقداری مقالاتی که این کارو انجام دادن مطالعه کنین دستتون میاد.
من قسمتی از یه مدل رو براتون میذارم اینجا. شاید به دردتون بخوره. مربوط به بودجه ای هست که تو دوره بعد استفاده میشه. فرمول شاید اشکالات جزئی داشته باشه، ولی شروع خوبیه برای شما.
کلیک کنید
خیلی ممنون.
حقیقتا من مدل کامل نوشتم اونم میخواستم بفرستم براتون که به علت عدم تطابق فونت نشد.
کدشم کردم اکثر جاها رو هرجا هم به مشکل خوردم سعی کردم خودم برطرف کنم.
ولی متاسفانه به علت پیدا نکردن مثال کافی نتونستم فعلا از پس این قسمت بودجه دوره قبل به خاطر (t-1)،
بربیام.
به هرحال مرسی از توجه و جوابتون.
خواهش میکنم.
اشکالی نداره. مثال رو دیدید؟
بله لطف فرمودید دیدم.
البته به نظرم ایراداتی داره و مضافا اینکه کمی مدل من با اینکه شما فرمودید متفاوته، اینجا شما اون قسمت مربوط به دوره قبل(t-1)، جدا کردین. ولی به نظر میرسه شما در این چیزی که من نوشتم ایراد پیدا کردین درسته؟ (اینو من از خودم ننوشتم روتینی که در مقالات وجود داره
((مقدار منبعی که پروژه ها در واحد زمانی قبل استفاده کردند-مقدار منبع در دسترس دوره قبل)+مقدار منبع در دسترس>مقدار منبعی که پروژه ها در یک واحد زمانی لازم دارند)
خواهش میکنم.
فک کنم این فرمول مشکلی نداره. حداقل نظر من اینه. تنها مشکلی که داره اینه که مقدار منابعی که از دو دوره قبل میمونه رو در نظر نمیگیره و اینکه باید شرط گذاشت که t>=2 باید باشه. پس باید به شکل زیر در بیاد.
ببخشید من یک مدت دسترسی به اینترنت نداشتم الان جواب دیدم.بسیار لطف کردید.
حالا تست میکنم امیدوارم جواب بده. بازم مممنونم.
سلام
ببخشید یک سوال داشتم از خدمتتون .
من یک برنامه نوشتم برای انتخاب پروژه، تا زمانیکه همه پارامترها (عدد های داده شده) محدودیت ها رو ارضا کنه جواب میده ولی به محض اینکه پارامتر مربوط به یک پروژه رو عوض میکنم که خارج از محدودیته به جای اینکه اون پروژه رو خارج کنه و (محاسبات با سایر پروژه ها انجام بده)، کل مسئله نشدنی میشه (Problem is integer infeasible.) دلیلش چی میتئنه باشه؟
با تشکر از لطف شما
سلام
کلا نشدنی بودن مسئله یعنی تضاد در محدودیت ها، که اون هم ریشه ش داده ها یا مدلسازی یا کد نویسی هست. اینا رو باید چک کنید.
سلام مهندس ممنونت میشم بگی کد که این دوتارو چطور میشه نوشت، من هرکاری میکنم گمز ارور میده.
مورد اول:
If (ord j>ord i) and bj bi-ui, then Vkij = 0
b، u و V هر سه متغیر هستند. K وسیله نقلیه و i,j مشتری هایی هستند که باید توسط وسایل نقلیه سرویس دهی شوند.
درواقع میخوام وقتی که دو تا شرط بطور همزمان برقرار شد Vkijبرابر صفر شود. و فقط و فقط در صورتی که bj مساوی bi-ui بود، مدل ارائه شده،Vkij را محاسبه و اعلام کند.
مورد دوم:
من توی تابع هدفم متغیر Vkij رو دارم که ممکنه صفر باشه، از طرفی این متغیر در مخرج کسر قرار گرفته. وقتی مخرج یه کسری هم صفر هستش گمز کلا ران نمیکنه.
چطور میتونم یه شرطی بگذارم که فقط زمانی تقسیم انجام بشود کهVkij صفر نیست. اصلا میشه جایی از تابع هدف هم شرط گذاشت؟
در مورد اول:
شرط دومش اینه که bj مخالف bi-ui باشه.
سلام
برای شرطی که گذاشتین، سه راه دارین راه اول اینه که یه جوری با خلاقیت مدلسازی رو تغییر بدین و این شرطا رو اونجا اعمال کنین که دیگه تجربه میخواد و ممکنه شدنی هم نباشه اصن.
راه دوم اینه که از دستور ifthen استفاده کنین. تو کامنتای همین تاپیک میتونین ببینین مثالاش رو. ولی مدل رو غیر خطی میکنه و هر سالوری هم حل نمیکنه. مثلا باید با sbb اینا حل کنین.
راه سوم اینه که همین شرط رو به عنوان یه محدودیت (بدون ifthen ) بنویسین. تو این روش معمولا به یه متغیر باینری و احتمالا یه عدد M بزرگ نیاز پیدا میکنیم. پیشنهاد من راه سوم هست، در صورتی که ایده ش به نظرتون نرسید، از راه دوم استفاده کنین.
سلام ، خسته نباشید جناب محمودی؛
محدودیتی دارم
Si<=X*t
X متغیر باینری هست
T پارامتر مربوط به همون متغیر
چون مساله مینیمم سازی هست همش xهارو صفر میده و کلا si صفر میشه ، میخوام یه کاری کنم یا یه شرطی بزارم که si به ازای مواقعی که x یک میشه مقدار بگیره. چطوری میتونم این محدودیت رو تعریف کنم که مدل رو اینفیزیبل نکنه ؟
سلام
با این شرایطی که فرمودین فک نکنم مشکل حل بشه!
چون مدل دوس داره x یا s صفر شه. ما اگه بهش بگیم اگه x یک شد s هم باید مقدار بگیره احتمالا باز هم شرایطش عوض نمیشه. چون میتونه باز همون صفر ها رو بهشون تخصیص بده و مشکلی هم پیش نیاد. مشکل از جای دیگه س چک کنین حتما. البته این حدس اولیه من هست.
برای این شرط جدیدی که فرمودین، قبلش نیاز داریم به اینکه چرا شما محدودیت s<=xt رو تعریف کردین. لطفا اینو بفرمایین چشم عرض میکنم.
imt)X )وقتی یک هست که فردm در زمان t روی فعالیت i مشغول به کار باشه . من با اون محدودیت خواستم زمان شروع فعالیت رو تعریف کنم، اولین زمانی که فردی به اون فعالیت تخصیص پیدا کرده .
اوکی.
این به نظرم مفید باشه برا کار شما. اگه مشکل داره ویرایشش کنین.
با سلام، آیا می شود تو گمز رو تابع هدف شرط گذاشت؟ من میخوام بگم اگه فلان پارامتر که وابسته به زمان هم هست، مثبت بشه تابع هدف اول را حل کن و اگه منفی بشه تابع هدف دوم. در صورت نشدن، چه راهی پیشنهاد می کنید؟؟ خیلی ممنونم
سلام
پارامتر یا متغیر؟ وابسته به چه زمانی؟ ما مقدارش رو به عنوان ورودی میدونیم یا مجهوله؟
سلام، نه پارامتر هست و در هر لحظه یک مقدار دارد که مقدارش را می دانیم.
شرط زیر رو ببینید:
با سلام و خسته نباشد از سایت بسیار خوب شماا
اگر بخواهم در گمز یک تابع هدف به صورت (min max f(x,y تعریف کنم به چه صورتی بنویسم؟
ممنون می شم اگر جواب بدید
سلام
مرسی
بستگی به کار شما داره.
برای بعضی از مسائل میشه max f رو یه اسم براش گذاشت مثلا q.
تو مرحله بعد گفت که q از همه f ها بزرگتره.
بعد تو دستور solve گفت که q رو مینیمم کن.
اگه متوجه نشدین بگین که بیشتر توضیح بدم.
خیلی ممنون از پاسخگوییتون
راستش یک تابع دارم که هم بر حسب x هست و هم بر حسب y. تابع در مرحله اول بایستی ماکزیمم شود و مقدار بهینه x محاسبه شود. در مرحله دوم همان تابع با توجه به مقدار بدست آمده x ماکزیمم شده تا مقدار بهینه x بدست آید…راستش تابع بسیار پیچیده و بزرگ و مساله بهینه سازی MINLP هست…اگر ممکن است بیشتر توضیح دهید
بسیار بسیار متشکرم
ببخشید اشتباه نوشتم…در مرحله دوم مینیمم می شود تا مقدار بهینه y بدست آید
سلام
یعنی چی؟
تو مرحله اول تابع بر حسب چی ماکس میشه و تو مرحله دوم بر حسب چی مینیمم میشه؟
یعنی اول کمینه میشه و مقدار x فیکس و ثابت میشه، و تو مرحله دوم مینیمم میشه و مقدار y نشون داده میشه؟
بله…یعنی اول تابع ماکزیمم می شود و مقدار x فیکس می شود…در مرحله دوم تابع با مقدار x بدست آمده مینیمم می شود تا مقدار y فیکس شود.
من قبلا به این سوالتون پاسخ دادم.
با سلام
یک متغییر گسسته رو میشه بصورت جدول تعریف کرد؟
اگر نه میشه راهنمایی کنید چطور متغییر گسسته تعریف کنم
مثلا
u متغییر منه که می تو نه اعداد 1، 6،66، 77، 865 رو داشته باشه
با تشکر
سلام
وقتی شما می فرمایید متغیر، پس باید یه خلاقیت براش به خرج بدین که معمولا موجب میشه یه متغیر جدید هم تعریف کنین و به کار ببرین. مثلا تو کد زیر y تعریف شده که این تعریف متغیر رو به شکل صحیح انجام بده. توجه کنین که این معادلاتی که در زیر تعریف شدن باید به همراه سایر معادلات شما در بخش equation بیان و نه جدا از اونها.
سلام می خواستم یک فرمول برگشتی تو GAMs بنویسم به شکل زیر :
که (CS(s,0 رو هم دارم. میشه راهنمایی کنید چطور باید بنویسم؟
سلام
به شکل زیر تعریف کنین معادله رو. و بدیهیه که قبلش هم باید CS0 رو تعریف بفرمایین.
خیلی ممنون از سایت و راهنمایی های موثرتون
یه سوالم داشتم، من یه متغیر دارم که میخوام اونو ماکزیمم کنم تو گمز، این متغیر وابسته به زمان و سناریوهای مختلف هست، یعنی دو بعدی می باشد. چطور باید دستور solve را برای این حالت نوشت؟؟
سلام
یعنی به ازای هر سناریو، و به ازای هر زمان باید یه جواب برای هدف به دست آورد؟
اگه آره که باید loop بنویسین و دستور solve رو بذارین تو اون لوپ و هر بار که جواب هدف به دست میاد تو یه پارامتر ذخیره ش کنین.
بله درست میفرمایین….ممنونم
ممنون
باسلام مجدد
یک سوال داشتم
آیا در گمز دستوری وجود دارد که از یک عبارت مشتق یا همون دیفرانسیل بگیرد؟
اگر راهنمایی بفرمایید ممنون میشم.
سلام
خیر امکانش نیست. جدا باید مشتق یا انتگرال رو بگیرین و بعد ببرین تو گمز. متغیر هست تو اون معادله ای باید مشتق بگیرین؟
بله عبارتی که میخوام دیفرانسیل بگیرم پیچیده است. نمیتونم دستی مشتق بگیرم.
پس به نظرتون باید تو متلب مشتق رو انجام بدم بعد وارد گمز کنم؟
بله باید با متلب یا میپل maple این کارو انجام بدین.
سلام
وقتتون بخیر
مدلی رو که تو گمز ران میکنم، تابع هدف که سود هست منفی میشه ( چون بعضی متغیرها مقدار صفر میگیرن)
ولی وقتی متغیر quantity رو بجای اینکه عدد صحیح باشه تو قسمت متغیرها ميذارم، جوابا قابل قبولن ولی بعضی از quantity ها مقدار اعشاری میگیرن
بنظرتون جوابا رو رند کنم یا اینکه راه حل ديگه ای داره؟
سلام
تابع هدف شما شامل چه اجزایی میشه منفی و مثبت توش هست؟ ماکسیمایز میکنین؟ امتحان کردین که براش با .LO حد پایین صفر بذارین؟
در مورد quantity خوب توضیح ندادین. منظورتون اینه که به جای integer variable با positive variable تعریفش کردین؟
با سلام، یک جدول دارم که از اکسل ،فراخوانی کردم تو گمز و به شکل یک ماتریس 10 در 10 هست، الان می خوام بگم که اگر درایه ایی از این جدول مثبت باشد، محدودیت اول را بگیر و اگر درایه ایی منفی باشد محدودیت دوم را بگیر. این شروط را چه جور باید نوشت؟ ممنون از راهنماییتون
سلام
فرض کنیم میخوایم بگیم که اگه درایه ی 11 مثبت باشه محدودیت اول باید برقرار باشه، ولی اگه منفی باشه محدودیت دوم:
c1$(c('1','1' >0).. equation1Formula
c2$(c('1','1' <0).. equation2Formula
ممنون، ولی یعنی اینجور باید برای تمام 100 درایه جدولم تک تک واسه هر کدوم این شر ط ها را بنویسم؟؟
نه دیگه.
برا ماتریس شما باید صورت اندیسی به شرطی که گذاشتم بدین. مثل این:
c1$(c(i,j)>0).. firstEqu
c1$(c(i,j)<=0).. secondEqu
این در صورتیه که دو تا محدودیت مورد بحث باشه و انتخاب هرکدوم به درایه های ماتریس ربط داشته باشه.
با سلام
مدل من احتمالی هست و از روش سناریو استفاده کردم ولی تو تابع هدف بعد هر sumارور میگیرم. باتوجه به اینکه پارامترp1(p) کهpتعداد سناریوها هست هم تعریف کردم. ارور بخاطر درست جمع نزدن این سناریو هست.ممنون میشم راهتمایی کنید.
+((sum(p,p1(p)*(sum((d,c1,t),Q1(d,c1,t,p)*A1(c1,t,p
-(( sum((d1,c2,t),Q2(d1,c2,t,p)*A2(c2,t,p
+( sum((s,f,t),Q3(s,f,t,p)*MC
+(sum((f,d,t),Q4(f,d,t,p)*FC)+sum((f1,d,t),Q5(f1,d,t,p)*FC
…. ))sum
سلام
وقتی دارین سامیشن میزنین، تو کد نویسی خیلی باید حواستون به باز و بسته کردن پرانتزا باشه. مشکل ظاهرا از همین پرانتزاست. چون کامل نذاشتین نمیشه بهتر نظر داد. متن ارور رو میذاشتین بهتر بود.
با عرض سلام و خسته نباشید خدمت شما عزیزان
یه محدودیت دارم، که اگه متغیر عدد صحیح(Y) برابر صفر باشد محدودیت دوم(x) می تواند هر مقداری بگیر(متغیر دوم هم عدد صحیح است).
و اگه متغیر y مخالف صفر باشد متغیر x حتما صفر خواهد بود
در گمز به غیر از دستور IFThen (که مدل رو غیر خطی میکنه)از چه محدودیت و روش دیگه ای می تونم استفاده کنم؟
پیشاپیش از راهنمائی تون سپاسگذارم
سلام
عددصحیح مثبت یا منفی هم میتونه باشه؟
هر دو متغیر فقط عدد صحیح مثبت هستند
با این اوصافی که فرمودین، فک میکنم این محدودیت رو اگه اضافه کنین کافیه برای لحاظ کردن مفاهیم:
Y<=MX که M یه عدد بزرگه
از راهنمائیتون واقعا سپاسگزارم آقای محمودی عزیز
محدودیتی که اشاره فرمودین(Y=0 (که این شرط در محدودیت مذکور برقراره )
و اگه y > 0 بود، x=0 (که این شرط برقرار نیست)
سلام
بله من اشتباه کردم. ببخشید.
راستش الان ایده ای به ذهنم نمیرسه برا این کار. ولی چون ذهنم درگیرش شده سعی میکنم در وقت مناسب روش فک کنم. ببخشید که پاسختون رو دریافت نکردید.
خیلی بزرگوارید آقای عزیزی
همیشه از راهنمائیهاتون استفاده کردم …
تشکر …
عزیزین. خواهش میکنم
ببخشید آقای محمودی 🙂
با سلام مجددا خدمت دوستان گرامی
جهت استفاده نکردن از دستور Ifthen به منظور بیان محدودیتهای شرطی از جمله محدودیت ،
(اگر y>0 باشد، x=0 است
و اگر Y=0 باشد، x>=0 خواهد بود.
که دو متغیر عدد صحیح مثبت هستند)
می توانداز 6 محدودیت ذیل استفاده نمود.(B متغیر کمکی باینری- M عدد بزرگ)
y>= x*M*B
B*M>=Y
Y>=B
تذکر:
عبارت x*B در معادله اول مدل را غیر خطی می کند. می توان با افزودن سه محدودیت دیگر به مدل این عامل غیر خطی را به خطی مبدل نمود.
فرض: x*B=XB و XB متغیر کمکی عدد صحیح مثبت
(محدودیت اول به y>= XB*M تبدیل می شود) و سه محدودیت دیگر نیز به مدل اضافه می شود.
XB<=X
XB=x+M*(B-1)
به احتمال زیاد درسته!
(احتمال دادم برای برخی دوستان مفید باشه، لذا پاسخش رو فرستادم)
سلام
مچکرم بابت بازخورد و شیر اطلاعات.
این غلطه مهندس. تو فرمولا به جای y صفر بذارین. نتیجه ش اینه که x=0 میشه حتما.
خلاصه 6 محدودیت:
y>= XB*M
B*M>=Y
Y>=B
XB<=x
XB=x+M*(B-1)
x,y,XB عدد صحیح مثبت
B باینری
M عدد بزرگ
خواهش میکنم
من این طور استنباط کردم
اگه y صفر باشه در محدودیت اول حتما باید یکی از متغیرهای B,X صفر باشه
اما این که کدوم حتما باید صفر باشه در دو محدودیت بعد مشخص میشه
در محدودیت سوم حتما متغیر باینری B برابر صفر خواهد بود
محدودیت دوم با صفر بودن B برقرار است
بنابراین در محدودیت اول با صفر بودن Yو B ، برقرار میشه و
X میتونه هر مقداری رو بگیره.
امیدوارم درست ?
با سلام و احترام
ممنون میشم درمورد سوالم راهنماییم کنید.
در مساله طراحی خانواده محصول در زنجیره تامین دوتا از متغیرام که بهم مربوطند مقدار نمیگیرن
Located
Quantity
سه تا محدودیت ارتباط این دوتارو بیان میکنه،یک میگه اگه خرده فروش k فعال بشه در این صورت میتونه به مشتری نوع ان محصول بده ، که quantity مقداره
محدودیت دوم داره میگه حجم محصولی که خرده فروش k به مشتری n عرضه میکنه باید کمتر از میزان تقاضای پیش بینی شده است
که سمت راست مربوط به تقاضاست
محدودیت 7 میگه حجم محصول بیشتر از دلتاست. دلتا حداقل سفارش پیش بینی شده مشتری هست
limit1(k,n)..quantity(k,n)=l= located(k)*bm;
limit2(k,n)..quantity(k,n)=l= b(k,n)*demand(k)+gamma(k,n)*(sum((i,j)$bx(i,j),qx(i,j)*o(i,j,n))
+sum((ii,jj)$by(ii,jj),qy(ii,jj)*v(ii,jj,n)))
-eta(k,n)*(sum((i,j)$bx(i,j),cx(i,j)*o(i,j,n)) +sum((ii,jj)$by(ii,jj),cy(ii,jj)*v(ii,jj,n))+scost(k,n)+mp(n))+bm*(1-located(k));
limit7(k,n) ..quantity(k,n)=g= delta(n)*located(k);
iماژول
J
آپشن که زیر مجموعه ماژول هست
K
خرده فروش
N
نوع مشتری
ii
همون تعریف i رو داره ولی ماژول اختیاری است
jj
هم اختیاری است با تعریف مشابه j
نمیدونم ایراد کار از کجاست.چکار کنم که متغیرا مقدار بگیرند
سلام
چون قصه ش درازه من خیلی وارد مفاهیمتون نشدم.
ولی معمولش اینه که فرض میکنن که عرضه بیشتر از تقاضا باشه. نه اینکه تقاضا بیشتر از عرضه باشه. از جواب دادن سایر متغیرهای مدل هم اطمینان حاصل کنین.
با سلام و تشکر از سایت بسیار کاربردی و مفیدتون من یک سوال دیگه داشتم قصد دارم یک معادله در گمز تعریف کنم که یک sum رو محاسبه کنه به صورتی که اگر یکی از جملات 1 شد بقیه صفر بشن یعنی از مجموع جملات تنها یکی از اون ها اجازه 1 شدن داشته باشه ممکنه همه صفر بشن اما اگر یکی از اونا 1 شد باید بقیه صفر بشن: تمام set ها و پارامترهای برنامه به درستی تعریف و مشخص شدن
h(i) .. sum(j,y(i,j))
معادله بالا رو چطوری باید توسعه بدم که توضیحاتی که در بالا دادم اتفاق بیفتن؟ ممنون می شم راهنمایی کنید
سلام
بخش متغیرها رو تو همین سایت بخونین.
شما باید از SOS variable استفاده کنین.
با سلام…در این سوالی که از خدمتتون پرسیدم متغیر من که y هست باید حتما باینری باشه و نمیتونه از نوع sos1 باشه…ممنون میشم اگه با فرض باینری بودن متغیر پیشنهادی برای حل سوالم بیان کنید
سلام
طبق چیزی که فرمودین، شما باید یه متغیر بایندری y تعریف کنین و یه محدودیت به مدل اضافه کنین، به این شکل که:
sum(i,y(i))=1
درست میفرمایید اما لزوما نباید مجموع y ها یک بشه….ممکنه مجموعشون صفر بشه…من میخوام اگه یکی از y ها برابر با یک شد اون وقت حتما بقیه صفر بشن…حالا ممکنه اصلا هیچ کدوم از y ها برابر یک نشن و مشکلی نیست
سلام
خب مجموعشون رو بزنین کوچکتر مساوی 1
اینجوری چیزی که شما فرمودین رو پوشش میده
بله درست می فرمایید i هم باید تعریف شود. ولی کلا من با کاربرد ifthen مشکل دارم و همیشه با اررور روبه رو می شم. بدون ifthen حلش کردم به این شکل:
f2 .. (sum(j,A(‘2’,j)*x(j))+sum(j,A(‘7’,j)*x(j)))=g=1+sum(j,((A(‘2’,j)*A(‘7’,j))*x(j)));
این طور جملات تکراری رو سمت راست نامعادله هم تولید می کنه در نتیجه جملات تکراری حذف خواهند شد. ولی دوست داشتم با ifthen حلش کنم.
به نظرم بهترین کار اینه که:
A1(i) رو که یه پارامتره به عنوان ضریب x(i در تابع هدف اول تعریف کنین. یه برداره قاعدتاً
A2(i رو که یه پارامتره به عنوان ضریب x(i در تابع هدف دوم تعریف کنین. یه برداره قاعدتاً
این دو تا A1,A2 یه بردار هستن که یا صفر و یا یک هستن.
برای نوشتن تابع هدف سوم کافیه بنویسین:
f3=Sum(A1*A2*xi
با سلام و وقت بخیر…میخوام یک معادله شرطی بنویسم اما با اررور روبهرو میشم…ممنون میشم راهنمایی کنید
J مجموعه از ۱ تا ۱۳
A پارامتر دوبعدی تعریف شده
X متغیر باینری
در واقع می خوام دو تابع رو با هم جمع کنم به طوری که جملات تکراری اون ها فقط یک بار نوشته بشه مثلا:
f2=x2+x3+x5+x7+x9
f7=x2+x7
می خوام جمعشون به این شکل بشه:
f=x2+x3+x5+x7+x9
F $ (A (‘2’,j) ne A (‘7’,j)) .. sum (j,A (‘2’,j)*x (j)+sum (j,A (‘7’,j)*x (j)=g=1
مساله رو به این شکل با ifthen هم بازنویسی کردم ام مجددا اررور دارم:
f2..(sum(j,A(‘2’,j)*x(j))+sum(j,A(‘7’,j)*x(j)))=g=ifthen((A(‘2’,j)*x(j)eq 1) and (A(‘7’,j)*x(j)eq 1),(1+x(j)),1);
ارور هم اینه: Uncontrolled set entered as constant
بهتره که واضح تر بگین که مشخص بشه مدل چی میخواد.
سلام
مقداری سوال شما گنگ هست. ولی به عنوان یه جواب اولیه اینو داشته باشین که یه اندیس کافی نیست برای کد نویسیش احتمالا. شما اندیس i هم که آلیاس j هست رو هم باید تعریف کنین.
چطور میشه فهمید که مساله جواب بهینه چندگانه داره؟
سلام
گمز خودش این رو نمیگه. ولی روش های خلاقانه ای هستن که بشه این رو فهمید. یکیش اینه که سالورها رو عوض کرد و نتایج رو مقایسه کرد. یه روش میتونه افزودن محدودیتی خلاف جهت تابع هدف اولیه و بهینه سازی هدف ثانویه باشه. یه روش اینه که تابع هدف رو ثابت میکنین و دوباره مدل رو حل میکنین و تغییرات متغیرها رو بررسی میکنین. اگه تغییر کردن چندگانه ست.
با سلام
دو محدودیت زیر
①A(i,k)+(∑(B(i,j,k).C(i,j,k)))–D(i,k)=A(i,k+1) for each i and K
② A(i,1)=0 for each i and k=1
رو در گمز بصورت زیر کد کردم:
Positive Variable
A(i,k)
A(i,k).fx(i,”1″)=0
Binary Variables
C(i,j,k)
Integer Variable
B(i,j,k)
equations
C(i,k)..loop(k, A(i,k+1)=e= A(i,k)+sum( B(i,j,k))* C(i,j,k)- D(i,k)));
ولی متوجه شدم هم اینکه گمز اجازه استفاده از دستور های loop و for رو در قسمت معادلات نمیده و اینکه حتی اگر هم این اجازه رو میداد معادله مذکور به درستی کار نمیکنه و با خطا مواجه میشه
ممنون میشم راهنمایی بفرمایید که این محدودیت رو چطوری کد کنم و اینکه از حلقه ها در کجا میتونم استفاده کنم
با تشکر از بذل توجه شما
سلام
متن بالا رو حداقل یه بار بخونین. شیوه معادله نویسی در گمز این شکلی نیست. لوپ نباید بیاد. همینکه بگین c(i,k) خودش به این معنی هست که محدودیت به ازای هر i,k باید صادق باشد و عمل خود لوپ رو هم انجام میده یه جورایی. پس بیخیال لوپ بشین
سلام
خسته نباشین
ببخشید به مشکلی برخوردم ممنون میشم راهنمایی بفرمایید
در معادلاتم یه تقسیم بر بک نتغیری دارم که ممکنه در ران برنامه صفر بشه و یه عبارت تقسیم بر صفر ایجاد کنه
که در اینصورت از برنامه خارج میشه
نمیتونم به عبارتی شرطی رو متعیر هم تعریف کنم
میخ ام در انتهای برنامه یه ایف تعریف کنم که وقتی این اتفاق افتاد کل جواب نعادله دو صفر کنه و دوباره برنانه رو ران کنه
میشه راهنمایی بفرمایید چطور این کار و بکنم
چطور این کد ارور رو بشناسونم به برنامه
ممنون میشم کمکم کنید
سلام
لازم نیست این کار رو بکنین. یه عدد خیلی کوچیک مث 0.00001 رو به مخرج اضافه کنین مشکل حل میشه.
سلام
من میخواستم کدی بنویسم که عدد تصادفی 1 یا -1 را برای من تولید کند، یعنی فقط همین دو عدد و نه عددی در بین آنها، برای اینکار از دستور if به شکل زیر استفاده کردم، ولی خطا داد. ممنون میشم راهنمایی کنید.
sets i /1*600/
sets j /1*3/
;
parameter R1(i,j);
execseed = 20000*(frac(jnow));
R1(i,j)=uniform(-1,1);
if (R1(i,j)>=0 ,
R1(i,j)=1;
else
R1(i,j)=-1;
);
سلام
اینشکلی بنویسین.
sets i /1*10/
sets j /1*3/
;
parameter R1(i,j);
execseed = 20000*(frac(jnow));
R1(i,j)=uniform(-1,1);
loop((i,j),
if (R1(i,j)>=0 ,
R1(i,j)=1;
else
R1(i,j)=-1;
);
);
display r1
سلام
خسته نباشین
یه سئال از خدمتتون داشتم ممنون میشم راهنمایی بفرمایید
من در معادلاتم میخوام یه شرطی رو وارد کنم که اون شرط تابع یک متغیره
cost=e=sum( NDG,DGData(NDG,’replacement-cost’)*sum( i $ (ord(i) le NrepDG(NDG)),1/((1+realrate)
NrepDG(NDG) خودش یک متغیره و اجازه نمیده همچین شرطی رو وارد کنم
ممنون میشم راهنمایی بفرمایید چیکار باید بکنم
سلام
مرسی.
بله همچین امکانی وجود نداره. در اینجورم مواقع باید یا از دستور ifthen استفاده کنین. یا اینکه تو اون دستور سیگما که متغیر تو حد بالاش هست مقداری تغییرات اعمال کنین. یکی از روش هاش اینه که یه حد بالا برای nrep در نظر گرفته میشه و برابر مجموع تعدادی متغیر صفر و یک قرار داده میشه و چندتا معادله به مدل اضافه میشه. قرار بود همچین پستی رو بذاریم تو سایت. هنوز وقت نشده. ایمیل بزنین که خدمتتون ارسال بشه نسخه اولیه متنی که نوشتم.
خیلی ممنون از لطفتون
سلام وقت بخیر…ببخشید میشه لطفا متن رو برای من هم بفرستید؟
سلام خسته نباشید
اگر قیدی به صورت زیر داشته باشیم
1<a<b<3
a کوچکتر از b و بزرگتر از یک و b بزرگتر از a و کوچکتر از 3.
اگر در معادلات سیگما روی a تا b تعریف شود در گمز به چه ثورت باید نوشت؟
با تشکر
سلام
اول بگین که a,b چی هستن چشم.
سلام و عرض ادب
درمقاله ای که من کد آن را نوشتم یک محدودیتی دارد که دو مجموعه روی یک سیگما نوشته شده است . در اینجا روی یک سیگما مجموعه i و j که مجموعه گره ها میباشند نوشته شده است. i, j هردو عضو مجموعه کمانها هستند. چطور این را وارد گمز کنم.ممنون از راهنماییتون
سلام
برا اینکه کمانها رو نشون بدین، باید زوج گره تعریف کنین. که این کارو میتونین با تعریف مجموعه دو بعدی انجام بدین.
به تاپیک مجموعه های چندبعدی مراجه کنین.
ممنون تو همون قسمتی که گفتید روش کار رو پیدا کردم
ولی الان برای محدودیت زیر خطای کمبود پرانتز (8) برای بعد از $ میده
co6(e) ..sum((j$(eq6(e,j)),t,m),x(j,m,t))=e=sum((j$(eq66(e,j)),t,m),x(j,m,t))
دستور سام رو خب اشتباه زدین دیگه.
sum((j,t,m)$(eq6(e,j)
ممنون
مشکل حل شد
با سلام
قصد دارم یک محدودیت برای کنترل رعایت پیشنیازی در مساله زمانبندی پروژه بنویسم که در آن اندیس j محدودیت روی تمام مقادری j هستش و اندیس jj آن روی اعضایی از j که در عنصر j ام از مجموعه p عضو باشد(عنصر j ام p پیشتیازهای فعالیت j را نشان میدهد) در واقع اعضای p میتوانند هر یک خودشان یک مجموعه باشند
این مورد چه طور باید انجام شود
co5(j,jj) ..sum((t,m),x(j,m,t))=l=sum((t.m),x(jj,m,t))
سلام
پاسختون رو تو بخش مجموه ها- مجموعه های چندبعدی میتونید دریابید. به نحوه ی تعریف پارامتر E دقت بفرمایین.
با سلام و احترام و ضمن سپاس از راهنمایی موثر شما
من در مدلسازی مساله ای با نرم افزار GAMS با مشکلی مواجه شده ام. توضیحات و کد را به ایمیلتان ارسال نموده ام. خواهشمندم در صورت امکان راهنمایی فرمایید.
سلام خسته نباشید
یه سوال داشتم : محدودیت به صورت زیر رو چه جوری باید کد نویسی کرد که اشتباه نباشه،گمز به p+1 که در اندیس u نوشتم ایراد میگیره
co14(o,oo,p,g) ..u(o,p,g)*u(oo,p+1,g)=e=eu(o,oo,p,g)
ممنون میشم کمکم کنید
سلام
اندیس p رو چجوری تعریف کردین؟ و اینکه متن خطا چی هست؟
ممنون
مشکل حل شد
ایراد از نحوه ی مدل سازی بود
سلام خسته نباشید
مرسی از کمکهای همیشگی شما
ببخشید من از داده های یه مقاله استفاده کردم اما یجا نوشته بود مقادر
پارامتر d(r)∈u[1,400] و df(r) =d(r)-q(r)∈ u[1,400] و w(r)-d(r)∈u[1,400]
مشکل من روی دوم وسومی هستش که چطور این مقدار رو وارد کنم چون وقتی df(r) =d(r)-q(r)= uniform[1,400] و w(r)-d(r)=uniform[1,400]
کد میکنم خطا میده .
باتشکر از سایت بسیار خوبتون
سلام
این فرمولا مفهومشون مشخص نیست. پس اول زاید بدونین که منظورشون چی هست، بعد کد کنین. حتما بعدش در خدمتم
با سلام محدوديت زير را چطور ميشه كد بندي كرد ممنون ميشم اگه راهنمايي كنيد
j ∑_q(QIJ)_ijp =∑_v ∑_e (QVI)_vie + ∑_k ∑_p (QKI)_kip ∀i ∈I_∑
من به صورت زيركد بندي كردم ولي ارور ميده
;((constrict4 .. sum((j,p),QIJ(i,j,p))=e= sum((v,e),QVI(v,i,e))+ sum((k,p),QKI(k,i,p
Uncontrolled set entered as constant
سلام
تاپیک معادلات و محدودیت ها رو بخونین. این محدودیت باید به ازای یه سری از اندیس ها برقرار باشه دیگه!
سلام و خسته نباشید
ببخشید من یه محدودیت دارم به صورت زیر هستش ایا این منطق برای مدل کردن درست هستش و اگه بله میشه کدشو بنویسین .
متغیر پیوسته I(r,k-1) : میزان موجودی مشتری r در دوره منهای 1 که وسیله نقلیه k زمانبندی می شود
متغیر پیوسته sp(r,k) : میزان تقاضای مشتری r که توسط وسیله نقلیه k در همان دوره تحویل داده می شود .
متغیر پیوسته I(r,k) : میزان موجودی مشتری r در همان دوره ای که وسیله نقلیه k زمانبندی می شود.
پارامتر t(k) : روزی که وسیله نقلیه k زمانبندی میشود
محدودیت
I(r,k-1) + ∑ w∈k ,sp(r,w) = q(r) + I(r,k) ∀K∈K│t(k)≥1,∀r∈R
فکر کنم با دستور ord , alias باید بنویسم ولی دقیق نمیدونم چجوری هستش یا اصلا منطق محدودیت درست هستش یا نه .
باتشکر از سایت بسیار خوبتون
سلام
دوست عزیز شما به سه تا اندیس احتیاج دارین! k,r,t
مدلهای موجودی رو حتما ببینید شما. حسی مدل ندین. اینجوری بیشتر وقتتونو میگیره. یه مدل پایه برای کارتون انتخاب کنین و همون رو توسعه بدین خیلی صرفه جویی میشه و سردرگمی هم از بین میره.
سلام خسته نباشید
ببخشید من اینو داخل یه مقاله دیدم فقط با این تفاوت که I(r,k) بجای متغیر پارامتر بود یعنی با حالت پارامتر هم این مدل بی معنی هستش
باتشکر
معمولا پارامتر نیست. ببینید اونجا احتمالا گفتن که پارامتر وابسته هست که از نظر ما باز هم متغیر میشه.
شما فقط باید برای I0 عدد و پارامتر در نظر بگیرین. بقیه ش باید متغیر باشه.
سلام خیلی ممنون بابات سایت خوبتان. من یک محدودیتی به شکل زیر تعریف کردم ولی ارور 96 رو گمز میده. مشکل چیه؟ ممنون میشم اگ جواب بدین
co2(drp,t)$(ord(t)>1)
سلام
شماره ارورها رو کسی حفظ نیست مهندس. شما باید متنش رو میذاشتین. به هر حال ارور معمولا وقتی پیش میاد که شما تو سطر قبلی سیمیکالون نذاشته باشین
با سلام
محدودیتی تو مدلم هست که متغیر تصمیمم بین دو مقدار قرار داره:( Qk min ≤ Qk ≤ Qk max)چه جوری میتونم تو گمز بنویسم؟
ممنون
سلام
میتونین اینو دو تا محدودتش کنین.
یا اینکه میتونین بعد از تعریف متغیرتون شرط کران بالا و پایین براش بذارین. مثلا اینجوری بنویسین.
Qk.lo=Qkmin
Qk.up=Qkmax
با عرض سلام و خسته نباشید
من یک متغیری دارم که در دو محدودیت دو اندیس متفاوت گرفت و نمی دونم اینو چطور کد کنم
متغیر پیوسته x(r,k,p) :مقدار محصول تحویل داده شده به مشتری r توسط مسیر k در دوره p
متغیر پیوسته y(c,k,p) :مقدار محصولی که توسط مسیر k در دوره p به انبار c وارد می شود.
پارامتر I(c,p) : مقدار محصول ذخیره شده در مرکز توزیع c در دوره p
اندیس p : مجموعه ای از دوره ها
پارامتر fmax : حداکثر مدت متوالی که محصول می تواند ذخیره شود
محدودیت 1
I(c,p-1)+sum(k,y(c,k,p)) =sum((r,k), x(r,k,p))+I(c,p) ∀ p∈P,c∈C
محدودیت 2
I(c,p) ≤ (∑ p-fmax-1 <f< p -1 ∑k x(r,k,f)) ∀ p∈P,c∈C,r∈R
p-fmax-1 <f< p -1 و k اندیس های زیر سیگما هستن
مشکل بنده روی اندیس متغیر x هستش .
با تشکر و مرسی از سایت بسیار خوبتون
سلام
تشکر و خواهش میکنم.
برای f از دستور alias استفاده کنین. بخش مجموعه ها رو ببینید.
برای اون شرطی هم که گفته شده، از دستورات شرطی نظیر دلار $ و ord استفاده کنین. مثالاش رو تو کامنتای بالا می بینید.
سلام. ببخشید این محدودیت رو چطوری میتونم توی گمز بنویسم؟y متغیر باینری و s هم متغیر هست.
s(i)+My(i,j)=<p(j)+s(j) ∀(i,j)| i<j
سلام
از عبارت شرطی دلار$ استفاده کنین. تو کامنتای همین تاپیک بگردین مثالاش رو پیدا میکنین.
با سلام
در تعریف متغیرها اگر بخواهیم روی اندیس متغیر شرط گذاشت به چه شکل باید نوشت؟
به طور مثال(X(i,n که /i/0*5 و i برای متغیر X حتما صفر باشد.
سلام
تو محدودیتا باید این رو لحاظ کنین. هر جا ایکس داشتین جلوش بزنین:
$(ord(i)=1)
این مساوی یک منظور همون صفر شماست (شماره نده ش یک باشه یعنی اولین عضوش)
ممنونم
ببخشید مسأله من دو هدفه و مدل به صورت MIP است وقتی به قسمت آخر میرسم و دستور SOLVE به ازای تابع هدف اول و محدودیت ها میدم خطای زیر را پیغام میده مفهومش چیه؟
51 Endogenous function argument(s) not allowed in linear models
256 Error(s) in analyzing solve statement. More detail appears
Below the solve statement above
سلام
مدل شما خطی نیست. و بخشی غیر خطی توی مدل شما هست. از عباراتی مانند minlp و nlp و dnlp استفاده کنین.
با سلام و خسته نباشید
مرسی از کمکتون RUN شد .
ببخشید من یه متغیر Boolean به نام Z(k) دارم که به معنی این است که Z(k) برابر 1 است اگر مسیر k جز راه حل باشد
v اندیس : مجموعه وسیله نقلیه V=(1,……,Vmax)
میخواستم بدونم Z(k-Vmax) یعنی اخرین ماشینی که به مسیر تخصیص داده شده است هستش یا نه و اینو چطور میتونم کد کنم
باتشکر
سلام
یه راهش اینه که یه اندیس به اسم مثلا kk تعریف کنین، بعد تو محدودیت به جای z(k-vmax بنویسین z(kk) به شرطی که kk=ord(k)-vmax)
سلام
ببخشید این بخشی از مدل من هستش
L(k,d)=I(k,d) ∀K∋K│t(k)=1,∀D∋D
k اندیس مسیر
D اندیس انبار
t(k) پارامتر : روزی که در ان مسیر k زمان بندی میشود
L(k,d) متغییر باینری : اگر مسیر k از انبار d شروع شود
I(k,d) متغییر باینری : اگروسیله نقلیه مربوط به k در ابتدا در انبار d باشد.
این محدودیت رو چطور میتونم کد کنم ( مشکل من روی t(k) هستش )
باتشکر از شما و سایت بسیار خوبتون
سلام
مچکرم و خواهش میکنم.
اگر اون t متغیر هست، پس میتونین از دستور ifthen استفاده کنین که مدل رو غیر خطی میکنه. در صورتی که میخواین غیر خطی نشه، باید با مقداری خلاقیت از M بزرگ یا متغیرهای صفر و یک کمکی یا ترکیب هر دوی اینها یا روشهای دیگه ی خلاقانه استفاده کنین که این مفهوم رو پیاده کنین.
اگر طبق اون چیزی که شما گفتین t پارامتره، که t رو اول تعریف و عدد دهی کنین، تو مرحله بعد تو محدودیت با استفاده از دستور دلار $(t(k)=1) شرط رو اعمال کنین. مثالاش تو کامنتای بالا هست.
مرسی از کمکتون
یعنی من میتونم یه متغیر پیوسته مثلا زمان رو در اندیس یه متغیر بیارم
مثلا T زمان اتمام مسیر که متغیر پیوسته هستش و S(T,c) موجودی در زمان T (که متغیر بود) در انبار c (اندیس)
ببخشید الان من یه محدودیت دارم
Y(i,k)≤ E(i,V(k)) ∀i∋I , ∀K∋K
Y(i,k) متغیر : اگر مشتری i توسط مسیر k خدمت ببیند .
E(i,k) متغیر : اگر مشتری i توسط وسیله نقلیه v خدمت ببیند .
V(k) پارامتر : وسیله نقلیه مربوط به k
چطور میتونم اینو کدکنم
خواهش میکنم.
این محدودیت بحث خواصی روش نیست. فقط قضیه روی E هست. درسته که باید توی فرمول ریاضی نوشت v(k) ولی باید سه تا اندیس براش گذاشت، به این اینصورت: E(i,v,k)
بسته به مدل شما ممکنه همین که هرجای مدل v(k) دیدین، باید دو اندیسه کنین و همین براش کافی باشه.
ببینید یه بحثی هست تو تعریف اندیس ها بهش میگن multi-dimensional sets که تو یه تاپیک جدا توضیحش دادیم. اونو بخونین ایده اینکه v(k) رو چجوری بیارین تو مدل رو یاد میگیرین. توصیه من اینه که یه متغیر چندبعدی به نام vk(v,k تعریف کنین و تو اون محدودیت (که E رو سه اندیسه کردین) یا محدودیت های مشابه که v(k استفاده شده توشون به عنوان شرط به کار ببرین.
این تاپیک رو بخونین
با سلام
آیا برای نوشتن !n دستور خاصی در گمز هست؟
و اینکه توابع هدفی به صورت (min(max چطور کد نویسی میشوند؟
سلام
برای فاکتوریل در گمز fact(n)
و برای سوال دومتون فرض کنیم اینجوری تابعه minMax x+2 حالا معمولا میان x+2 رو مساوی یه چیزی قرار میدن. مثلا A بعد میبرنش تو محدودیت ها و میگن که x+2>=A و تابع هدف رو اینجوری مینویسن. Min A
سلام و خسته نباشید
من یک مسئله زمانبندی رو میخوام در گمز کد کنم با هدف min کردن سیگما wj در Uj
و با استفاده از الگوریتم کوله پشتی
سه تا کار دارم میخوام بگم همه ترتیب های ممکن از هر سه تا کار رو که میشه 6 حالت حل کنه بعد کوچکترین مقدار حاصل رو نمایش بده.
این رو چطوری میتونم کدشو بنویسم توی گمز؟؟
سلام
سوالتون گنگ هسن. مقداری در مورد اندیس ها و کارها و پارامترها و متغیرهای مربوطه توضیح بدید.
سلام
اندیس i برای تعداد کارها هست که سه تا کار داریم.برای پارامترها هم (p(i زمان پردازش هر یک از کارها و (w(i مطلوبیت هر یک از کارها هست و یک پارامتر دیگه به نام maxw داریم که مقدارش 100 هست. و (u(i هم متغیر باینریه. و تابع هدف هم سیگماu(i)*(w(i هست.میخوام بگم تمام ترتیب های ممکن از این سه تا کار رو در نظر بگیره و مقدار تابع هدف رو برای هر کدوم به دست بیاره. یعنی مثلا یک بار u کار یک رو برابر یک قرار بده تابع هدف رو محاسبه کنه یک بار u کار یک و دو رو برابر یک قرار بده و به همین ترتیب که کلا 6 حالت میشه.بعد کوچکترین مقدار به دست اومده رو display کنه
منظورم این بود که این دستورها رو چطوری بنویسم توی گمز
خب ظاهرا شما تابع هدفتون سیگما u*w هست. پس من در این مورد نظری نمیدم.
ولی برای display کردن کمترین مقدار u*w بهتره شما یه پارامتر به اسم مثلا UW تعریف کنین. و بعد از دستور solve بیاین کد زیر رو قرار بدین:
UW=smin(i,u(i)*w(i));
display UW
خیلی ممنون از پاسخگوییتون
میشه این رو هم راهنمایی کنید من تابع هدف و محدودیتم به این صورت هس
(max z= ∑u(i)w(i
100=<(∑u(i)p(i
i=1,2,3
11=(p(3)=90 ,p(2)=9 ,p(1
1,0=(u(i
میخوام با در نظر گرفتن محدودیت بالا تمام جوابهای ممکن برای z به دست بیاد.این رو چطور میتونم کد کنم؟
معادله رو خوب ننوشتین، البته چاره ای هم نیست، مقداری کامنت گذاری اصول خودش رو داره برا فرمول نویسی.
یعنی چه مقادیر ممکن z؟
سلام
من یک مدل برنامه ریزی دو هدفه دارم که میخام با برنامه ریزی ارمانی حل کنم. میشه بگید به چه شکلی میتونم توی گمز کد نویسیی کنم؟ تشکر
سلام
هر رویکردی، قشنگ میگه مراحلش چیا هستن. مثلا آرمانی میگه اول با یه سری مشخصات توابع هدف حل بشن. بعد تو مرحله آخر متغیرهای جدید d رو به مدل اضافه کرده و مجددا حل بشه.
سوال کلی هست. پس شما لطفا مقداری در مورد ارمانی و نسخه های مختلفش مطالعه بفرمایین. کد نویسیش میاد تو ذهنتون احتمالا
سلام اقای محمودی
من مدل دو هدفه رو مبخام به روش لکسیکوگراف حل کنم.بنظر شما اینجوری کد نویسی درست هست؟
متشکرمم
sets m number of objective /1*2/
I /i1,i2/ ;
Positive Variables x[I];
Variable f1,f2;
Equation g1,g2,Obj(m1),Obj(m2);
g1.. 2.5 - 0.5*power{(x['i1'] - 2),3} - x['i2'] =g= 0;
g2.. 3.85 + 8*sqr(x['i2'] - x['i1'] + 0.65) - x['i2'] - x['i1'] =g= 0;
* ... objective functions
Obj(m1).. f1 =e= sqr(x['i1'] + x['i2'] - 7.5) + 0.25*sqr(x['i2'] - x['i1'] + 3);
Obj(m2).. f2 =e= 0.25*sqr(x['i1'] - 1) + 0.5*sqr(x['i2'] - 4 );
alias (m,j);
parameter p(m) ’selection of objective’;
equation objective ’select correct obj by assigning to p’;
objective.. obj =e= sum(m,p(m)*Obj(m));
model ap /all/;
loop(j,
* select correct objective function
p(m) = 0;
p(j) = 1;
* solve problem
solve ap using nlp maxiimizing obj;
* add fixed objective
obj.fx(j) = obj.l(j);
);
سلام
خیر. اینجوری p رو همیشه یک میگیره. قضیه رو خیلی ساده بگیرید.
مدل یه بار با هدف اول حل میشه (د