آموزش برنامه نویسی در گمز GAMS

زبان برنامه نویسی گمز (GAMS) زبانی است که ما در وب‌سایت متلب آنالیز شروع به آموزش آن کرده‌ایم و البته پیش از این نیز به آموزش‌هایی در خصوص زبان برنامه نویسی متلب پرداخته بودیم. اگر به خاطر داشته باشید، در مقاله پیشین از متلب آنالیز، یک مثال برق قدرت را برای گمز مطرح کردیم و به دستورات مختلف آن پرداختیم. اکنون در این مقاله  به ادامه آموزش برنامه نویسی در گمز GAMS  می پردازیم و  تصمیم داریم تا همان مثال پیشین را در پی بگیریم به شرح دستورات مختلف در آن بپردازیم و نکات مختلفی را از این زبان برنامه نویسی فرا بگیریم. پس تا انتهای مقاله همراه ما باشید.

نرم افزار گمز GAMS یکی از برترین نرم افزار ها در حوزه بهینه سازی و حل مدل های ریاضی شناخته می شود. این موضوع در بسیاری از رشته های فنی و غیر فنی کاربرد پیدا کرده است. یکی از این کاربرد ها، حل بسیاری از مسائل مربوط به برق قدرت با استفاده از نرم افزار گمز می باشد. به همین دلیل در ادامه به حل یک مثال طراحی شده به منظور آموزش برنامه نویسی در گمز GAMS پرداخته می شود. با بررسی مثال های ارائه شده از این نرم افزار میتوانید شبیه سازی مسائل مختلف بهینه سازی با استفاده از این نرم افزار را به سادگی انجام دهید.

در ادامه معرفی قسمت های اصلی کدنویسی در گمز به بخش ارائه محدودیت ها و نیز دستور حل مدل پرداخته می شود.

EQUATIONS

در زبان برنامه نویسی گمز دستوری به نام EQUATIONS وجود دارد که از طریق آن می‌‌توانید توابع هدف و حدود آن‌ها را وارد کنید. برای درک بهتر، به مثال زیر توجه کنید:

EQUATIONS

COST              objective function

MAXPOW(N,N)       maximum line power limit

MINPOW(N,N)       line power limit

;(LOADBAL(N)        load balance equation; ALIAS(N,NP

;((COST .. z=e=SUM(G,GDATA(G,’COST’)*p(G

;(‘MAXPOW(N,NP).. LDATA(N,NP,’SUS’)*(d(N)-d(NP))=l= LDATA(N,NP,’LIMIT

;(‘MINPOW(N,NP).. LDATA(N,NP,’SUS’)*(d(N)-d(NP))=g=-LDATA(N,NP,’LIMIT

+((LOADBAL(N).. SUM(G$ MAP(G,N),p(G))+SUM(NP,LDATA(N,NP,’SUS’)*(d(N)-d(NP

;(LDATA(NP,N,’SUS’)*(d(N)-d(NP)))=e=LOAD(N

همان طور که در مثال بالا مشاهده می‌کنید، هر قید باید در ابتدا به گمز شناسانده شوند و بعد از این کار نیز باید از طریق علامت‌های ‘..’ به قید مربوطه متصل شود. البته باید بدین نکته نیز توجه داشت که برای هر معادله قیدی، قرار دارد سیمیکالون الزامی است.

نکته: در زبان برنامه نویسی گمز، زیگمای عباراتی مثل  به صورت ((sum(i,x(i,j نوشته می‌شود.

نکته: در معادلات خود باید برای قرار دادن مساوی از =e= و برای قرار دادن کوچکتر مساوی از =I= استفاده کنید.

فرم ریاضی تابع هزینه (;((cost .. z=e=SUM(G,GDATA(G,’COST’)*p(G باید به شکل زیر باشد:

formula-1

البته باید بدین نکته نیز توجه داشته باشید که در حل این مثال، محدوده قدرت انتقالی در نظر گرفته شده است و حد پایین نشان دهنده حداقل توان خروجی ژنراتور‌ها و حد بالا نشان دهنده حداکثر توان خروجی ژنراتور‌ها است که این موضوع را می‌‌توانیم به شکل زیر نشان دهیم:

formula-2

گفتنی است که توان انتقالی به وسیله حدود پایداری و حرارتی (زاویه) محدود می‌شوند و این موضوع به معنای این است که مقدار توانی که از باس i به باس J با خط i-J انتقال می‌یابد را می‌توان به شکل زیر نمایش داد:

formula-3

با این اوصاف مسئله ما به شکل زیر خواهد بود:

formula-4

و برای فهماندن این موضوع به زبان برنامه نویسی گمز نیز باید از طریق کد زیر وارد عمل شوید:

;(‘MAXPOW(N,NP).. LDATA(N,NP,’SUS’)*(d(N)-d(NP))=l= LDATA(N,NP,’LIMIT

;(‘MINPOW(N,NP).. LDATA(N,NP,’SUS’)*(d(N)-d(NP))=g=-LDATA(N,NP,’LIMIT

نوشتن معادله توازن توان نیز به شکل زیر است:

formula-5

و این معادله را باید در گمز به شکل زیر وارد کنید:

+((LOADBAL(N).. SUM(G$ MAP(G,N),p(G))+SUM(NP,LDATA(N,NP,’SUS’)*(d(N)-d(NP

;(LDATA(NP,N,’SUS’)*(d(N)-d(NP)))=e=LOAD(N

مدل (MODEL)

دستور مدل برای معادلاتی که باید در داخل مدل حل شوند، مورد استفاده قرار می‌گیرد و برای این مثال ED تابع هزینه، نامعادله حداکثر توان، نامعادله حداقل توان و معادله توازن بار را داریم:

;/MODEL ed /COST,MAXPOW,MINPOW,LOADBAL

در حقیقت، این همان بخشی است که یکی از ویژگی‌های زبان برنامه نویسی گمز به حساب می‌آید و این زبان به کاربر اجازه می‌دهد که بتواند فقط یک معادله را در مدل مورد نظر حل کند. برای مثال اگر بخواهیم مثال ED را بدون در نظر گرفتن حداکثر و حداقل توان حل کنیم، باید به شکل زیر وارد عمل شویم:

;/MODEL ed /COST,LOADBAL

حل کردن (SOLVE)

دستور SOLVE برای حل مسائل بهینه سازی مورد استفاده قرار می‌گیرد و در مثال ED داریم:

;SOLVE ed USING lp MINIMIZING z

در حقیقت این جمله به گمز می‌گوید که مسئله توزیع اقتصادی ED را با استفاده از حل کننده خطی lp در جهت حداقل کردن متغیر Z که در واقع همان تابع هزینه است، حل کند.

البته باید بدین نکته نیز توجه داشت که حل کننده‌های متخلفی در این زبان برنامه نویسی وجود دارد و کاربران می‌توانند از طریق بخش Option حل کننده مورد نظر خود را انتخاب کنند.

نمایش (DISPLAY)

در زیر می‌توانید یک مثال نمایش یا DISPLAY را مشاهده کنید:

;DISPLAY p.l, d.l

در حقیقت با استفاده از این دستور، توان خروجی ژنراتور‌ها و زاویه هر باس در مثال مورد نظر نمایش داده می‌شود و البته پسوند نمایش دهنده سطح (level) متغیر است.

بعد از حل کردن مثال ED و استفاده از دستور DISPLAY نتیجه زیر نمایش داده خواهد شد:

   ۴۲ VARIABLE p.L output power for generator           G1 0.565, G2 0.285    —-

 ۴۲ VARIABLE d.L angle at bus N                            N1 -0.143, N2 -0.117    —-

در شکل زیر می‌‌توانید شیوه قرار گیری کد‌های فوق را در محیط زبان برنامه نویسی گمز مشاهده کنید.

gams-1

در شکل زیر نیز پاسخ ارایه شده توسط گمز نمایش داده می‌شود.

gams-1

همان طور که در این مقاله از متلب آنالیز مطالعه کردید، به آموزش دستورات مختلف در این زبان پرداختیم و البته نکاتی را نیز در این خصوص فرا گرفتیم. همچنان همراه متلب آنالیز باشید تا به امید خدا با مقالات مختلفی، به آموزش زبان‌های برنامه نویسی محاسباتی بپردازیم.

جهت سفارش برنامه نویسی در محیط گمز GAMS اینجاکلیک کنید