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

 

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

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

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

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

در ادامه می‌توانید با تعریف هر یک از دستورات مربوط به مثال بالا آشنا شوید:

SETS: در گمز اگر بخواهید شاخص‌ها و مقادیرشان را تعریف کنید، باید به سراغ دستور SETS بروید. برای درک بهتر، به مثال زیر توجه کنید:

SETS

/G         index of generators        /G1*G2

 /N         index of buses                /N1*N3

;/MAP(G,N)  indicates in what bus are the generators connected /G1.N1,G2.N2

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

/N1, N2, N3/

SCALARS: شما در برنامه نویسی گمز باید زمانی به سراغ SCALARS بروید که می‌‌خواهید یک مقدار ثابت را نمایش دهید (گفتنی است که SCALARS تنها برای نمایش مقدار ثابت مورد استفاده قرار می‌گیرد). در مثال فوق هزینه سوخت واحد تولیدی بر حسب $/MBtu نمایش داده شده است:

;/Scalar      fcost fuel cost in dollars_MBtu       /۱٫۱

PARAMETER: شما با استفاده از دستور PARAMETER می‌توانید به تعریف اطلاعات یک یا چند متغیر که به شکل برداری هستند بپردازید. برای مثال باید بگوییم که در مثال ED پارامتر LOAD با سِت N تعریف شده است و بر اساس دستور زیر، تنها در باس سوم وجود دارد که مقدار آن نیز ۰.۸۵ است. برای درک بهتر، به کد زیر توجه کنید:

PARAMETER

;/LOAD(N)      load at bus N               / N3 0.85

نکته: اگر برای مثال، بنویسیم ;/N4    ۰٫۹/ با توجه به اینکه سیستم ما دارای ۳ باس است و باس چهارم وجود ندارد، سیستم خطایی را نمایش خواهد داد و اجرا نخواهد شد.

TABLE: اطلاعات در گمز به صورت ماتریسی و در جدول یا پارمتر‌های دو متغیره تعریف می‌شوند. برای درک بهتر موضوع، بهتر است به مثال زیر توجه کنید:

در این مثال، دو جدول (Table) وجود دارد: ۱- جدول GDATA (G,*) به وسیله شاخص G شناخته می‌شود و برای هر جفت عناصر SET که در این مثال G1 و Pmin هستند نیز مقدار خاصی مشخص می‌شود که در مثال ما این میزان ۰٫۱۵ است.

TABLE GDATA(G,*) generator input data

        PMIN        PMAX        COS

      (kW)        (kW)    (dollar/kWh)        *

G1      ۰٫۱۵         ۰٫۶               ۶

;G2     ۰٫۱۰        ۰٫۴                ۷

۲- جدول (*,LDATA (N,N یک آرایه سه بعدی را شامل می‌شود که مربوط به دو Set است و کد‌های آن در ادامه موجود هستند:

TABLE LDATA(N,N,*) line input data

                            SUS     LIMIT

                     (S)     (kW)         *

N1.N2     ۲٫۵     ۰٫۳

N1.N3     ۳٫۵     ۰٫۵

;N2.N3     ۳٫۰     ۰٫۴

نکته: در مثال بالا، دستور (*,TABLE LDATA(N,N در حقیقت یک آرایه سه بعدی را تعریف می‌کند که دو SET را به هم مرتبط می‌سازد. با وجود اینکه در این مثال SET تنها برای N استفاده شده است اما در کل هر SET می‌تواند با دو پارامتر متفاوت استفاده شود.

نکته: برای مثال، دو پارامتر سوسکپتانس Sus2.5 و حد LIMIT0.3 بین باس (BUS)های ۱ و ۲ به کار رفته است.

VARIABLES (متغیر‌ها): در زبان برنامه نویسی گمز و البته مثالی که در این بخش مطرح شده است، متغیر‌ها به شکل زیر نمایش داده می‌شوند:

VARIABLES

 Z            objective function

p(G)         output power for generator G

;d(N)         angle at bus N

;(’p.lo(G)=GDATA(G,’PMIN

;(’p.up(G)=GDATA(G,’PMAX

;d.fx(’N3’)=۰

نکته: در مثال بالا، متغیر Z همان تابع هدف را نشان می‌دهد و همیشه باید در کد‌ها وجود داشته باشد. البته باید به این موضوع نیز توجه کرد که مقدار حدود بالایی و پایینی را با استفاده از پسوند‌ (Suffix) تعریف می‌کنند. در مثال بالا نیز مقدار حدود بالا و پایین در متغیر P (G) با lo و up تعریف شده‌اند.

متغیر‌ها همچنین می‌توانند مقادیر ثابتی داشته باشند. برای مثال متغیر d با استفاده دستور فوق دارای مقدار صفر است (در واقع زاویه مرجع Bus صفر در نظر گرفته شده است).

نکته: در مثال UC شما می‌توانید متغیر P (G) را مثبت تعریف کرده و حدود آن را به شکل زیر تنظیم نمایید:

POSITIVE VARIABLE

;(’p(G); p.lo(G)=GDATA(G,’PMIN

;(’p.up(G)=GDATA(G,’PMAX

البته باید بدین نکته نیز توجه داشت که متغیر‌ها می‌‌توانند مقادیر اولیه را به خود اختصاص دهند. برای مثال، توان اولیه Bus 1 در حالت زیر دارای مقدار اولیه می‌شود:

;p.l(’G1’)=۰٫۲

البته باید بدین نکته نیز توجه کرد که در زبان برنامه نویسی گمز، انواع مختلفی از متغیر‌ها وجود دارد که در این  بین می‌توان به موارد زیر اشاره کرد:

Binary – Integer – Free – Negative – Positive

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

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