Parameter YearR(W);
- Assign YearR based on the W element names with conditional logic
loop(W,
if (substr(W,1,1) = ‘W’,
YearR(W) = number(substr(W,3,2));
else,
YearR(W) = 0;
);
);
Snippet: Set W /W101, W102, …, W530/;
Parameter YearR(W);
Snippet: Set W /W101, W102, …, W530/;
Since the post does not ask a clear question, I will have to guess what you want based on the topic name. I am assuming that you want to go through the elements of a set and if the set name starts with W
, you want to extract the numerical value after the W
and set it to a parameter.
Here is how you can achieve that with Embedded Code:
Set W / W101, W102, X101 /;
Parameter YearR(W);
$onEmbeddedCode Python:
values = []
for w in gams.get("W"):
if w.startswith("W"):
values.append((w, int(w[1:])))
gams.set("YearR", values)
$offEmbeddedCode YearR
display YearR;
Thank you, Muhammet. I understand that you have given the python code. Could you please suggest the GAMS code for the same task.
It’s a valid GAMS code with an embedded Python section in it.
Currently developing a single-cell aquifer model for the High Plains aquifer, focusing on determining optimal crop choices over a 30-year period.
The model incorporates a five-layer aquifer system, with each layer having an incremental well capacity of 100 GPM (500 GPM, 400 GPM, …, 100 GPM; W5, W4, …, W1). The model begins with an initial groundwater stock in each layer for the first year. I aim to implement recharge only within the active layer and ensure that any unused water within a layer is carried over to the subsequent year.
Our primary challenge lies in effectively controlling the recharge within the active layer. I would greatly appreciate your expertise in assisting me with this aspect of the GAMS model.
I have explicitly defined the following sets:
I have also included the relevant data tables here.
*---------------------------------------------------
*---------------------------------------------------
Set S
/
S011, S012, S013, S014, S015,
S021, S022, S023, S024, S025,
S031, S032, S033, S034, S035,
S041, S042, S043, S044, S045,
S051, S052, S053, S054, S055,
S061, S062, S063, S064, S065,
S071, S072, S073, S074, S075,
S081, S082, S083, S084, S085,
S091, S092, S093, S094, S095,
S101, S102, S103, S104, S105,
S111, S112, S113, S114, S115,
S121, S122, S123, S124, S125,
S131, S132, S133, S134, S135,
S141, S142, S143, S144, S145,
S151, S152, S153, S154, S155,
S161, S162, S163, S164, S165,
S171, S172, S173, S174, S175,
S181, S182, S183, S184, S185,
S191, S192, S193, S194, S195,
S201, S202, S203, S204, S205,
S211, S212, S213, S214, S215,
S221, S222, S223, S224, S225,
S231, S232, S233, S234, S235,
S241, S242, S243, S244, S245,
S251, S252, S253, S254, S255,
S261, S262, S263, S264, S265,
S271, S272, S273, S274, S275,
S281, S282, S283, S284, S285,
S291, S292, S293, S294, S295,
S301, S302, S303, S304, S305
/;
Set T
/
T101,T201,T301,T401,T501,T102,T202,T302,T402,T502,T103,T203,T303,T403,T503,T104,T204,T304,T404,T504,T105,T205,T305,T405,T505,T106,T206,T306,T406,T506,T107,T207,T307,T407,T507,T108,T208,T308,T408,T508,
T109,T209,T309,T409,T509,T110,T210,T310,T410,T510,T111,T211,T311,T411,T511,T112,T212,T312,T412,T512,T113,T213,T313,T413,T513,T114,T214,T314,T414,T514,T115,T215,T315,T415,T515,T116,T216,T316,T416,T516,
T117,T217,T317,T417,T517,T118,T218,T318,T418,T518,T119,T219,T319,T419,T519,T120,T220,T320,T420,T520,T121,T221,T321,T421,T521,T122,T222,T322,T422,T522,T123,T223,T323,T423,T523,T124,T224,T324,T424,T524,
T125,T225,T325,T425,T525,T126,T226,T326,T426,T526,T127,T227,T327,T427,T527,T128,T228,T328,T428,T528,T129,T229,T329,T429,T529
/;
Alias (T, TT)
Set L
/
TA01, TA02, TA03, TA04, TA05, TA06, TA07, TA08, TA09, TA10,
TA11, TA12, TA13, TA14, TA15, TA16, TA17, TA18, TA19, TA20,
TA21, TA22, TA23, TA24, TA25, TA26, TA27, TA28, TA29, TA30
/;
Set W
/W101,W201,W301,W401,W501,
W102,W202,W302,W402,W502,
W103,W203,W303,W403,W503,
W104,W204,W304,W404,W504,
W105,W205,W305,W405,W505,
W106,W206,W306,W406,W506,
W107,W207,W307,W407,W507,
W108,W208,W308,W408,W508,
W109,W209,W309,W409,W509,
W110,W210,W310,W410,W510,
W111,W211,W311,W411,W511,
W112,W212,W312,W412,W512,
W113,W213,W313,W413,W513,
W114,W214,W314,W414,W514,
W115,W215,W315,W415,W515,
W116,W216,W316,W416,W516,
W117,W217,W317,W417,W517,
W118,W218,W318,W418,W518,
W119,W219,W319,W419,W519,
W120,W220,W320,W420,W520,
W121,W221,W321,W421,W521,
W122,W222,W322,W422,W522,
W123,W223,W323,W423,W523,
W124,W224,W324,W424,W524,
W125,W225,W325,W425,W525,
W126,W226,W326,W426,W526,
W127,W227,W327,W427,W527,
W128,W228,W328,W428,W528,
W129,W229,W329,W429,W529,
W130,W230,W330,W430,W530
/;
*‘Top water layer for each year’
Set W5(W)
/
C021 C022 C023 C024 C025
TA02 1 1 1 1 1 C031 C032 C033 C034 C035
TA03 1 1 1 1 1 C041 C042 C043 C044 C045
TA04 1 1 1 1 1 C051 C052 C053 C054 C055
TA05 1 1 1 1 1 C061 C062 C063 C064 C065
TA06 1 1 1 1 1 C071 C072 C073 C074 C075
TA07 1 1 1 1 1 C081 C082 C083 C084 C085
TA08 1 1 1 1 1 C091 C092 C093 C094 C095
TA09 1 1 1 1 1 C101 C102 C103 C104 C105
TA10 1 1 1 1 1 C111 C112 C113 C114 C115
TA11 1 1 1 1 1 C121 C122 C123 C124 C125
TA12 1 1 1 1 1 C131 C132 C133 C134 C135
TA13 1 1 1 1 1 C141 C142 C143 C144 C145
TA14 1 1 1 1 1 C151 C152 C153 C154 C155
TA15 1 1 1 1 1 C301 C302 C303 C304 C305
TA30 1 1 1 1 1TABLE L_S(L,S)
S011 S012 S013 S014 S015
TA01 1 1 1 1 1
S021 S022 S023 S024 S025
TA02 1 1 1 1 1 S031 S032 S033 S034 S035
TA03 1 1 1 1 1 S041 S042 S043 S044 S045
TA04 1 1 1 1 1 S051 S052 S053 S054 S055
TA05 1 1 1 1 1 S061 S062 S063 S064 S065
TA06 1 1 1 1 1 S071 S072 S073 S074 S075
TA07 1 1 1 1 1 S081 S082 S083 S084 S085
TA08 1 1 1 1 1 S091 S092 S093 S094 S095
TA09 1 1 1 1 1 S101 S102 S103 S104 S105
TA10 1 1 1 1 1 S111 S112 S113 S114 S115
TA11 1 1 1 1 1 S301 S302 S303 S304 S305
TA30 1 1 1 1 1TABLE W_S(W,S)
S011 S012 S013 S014 S015
W101 0 0 0 0 0
W201 0 0 0 0 0
W301 0 0 0 0 0
W401 0 0 0 0 0
W501 0 0 0 0 0
S021 S022 S023 S024 S025
W102 0 0 0 0 0 S301 S302 S303 S304 S305
W130 0 0 0 0 0TABLE W_C(W,C)
C011 C012 C013 C014 C015
W101 .1 0 0 0 0
W201 0 .52 0 0 0
W301 0 0 .9 0 0
W401 0 0 0 1.15 0
W501 0 0 0 0 1.22
C021 C022 C023 C024 C025
W102 .1 0 0 0 0 C301 C302 C303 C304 C305
W130 .1 0 0 0 0Table Transfer(W,T)
T101 T201 T301 T401 T501 T102 T202 T302 T402 T502 T103 T203 T303 T403 T503
W101 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W201 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
W301 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
W401 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
W501 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
W102 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0
W202 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0
W302 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0
W402 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0
W502 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0
…
W130 0 0 0 0 0 -1 0 0 0 0
W230 0 0 0 0 0 0 -1 0 0 0
W330 0 0 0 0 0 0 0 -1 0 0
W430 0 0 0 0 0 0 0 0 -1 0
W530 0 0 0 0 0 0 0 0 0 -1
;
*---------------------------------------------------
Parameter OBJ_S(S)
/S011 4.52,S012 11.47,S013 15.15,S014 22.09,S015 30.23,
S021 4.23,S022 10.72,S023 14.16,S024 20.64,S025 28.26,
S031 3.95,S032 10.02,S033 13.23,S034 19.29,S035 26.41,
S041 3.69,S042 9.36,S043 12.37,S044 18.03,S045 24.68,
S051 3.45,S052 8.75,S053 11.56,S054 16.85,S055 23.07,
S061 3.23,S062 8.18,S063 10.8,S064 15.75,S065 21.56,
S071 3.01,S072 7.64,S073 10.09,S074 14.72,S075 20.15,
S081 2.82,S082 7.14,S083 9.43,S084 13.76,S085 18.83,
S091 2.63,S092 6.68,S093 8.82,S094 12.86,S095 17.6,
S101 2.46,S102 6.24,S103 8.24,S104 12.01,S105 16.45,
S111 2.3,S112 5.83,S113 7.7,S114 11.23,S115 15.37,
S121 2.15,S122 5.45,S123 7.2,S124 10.49,S125 14.36,
S131 2.01,S132 5.09,S133 6.73,S134 9.81,S135 13.42,
S141 1.88,S142 4.76,S143 6.29,S144 9.17,S145 12.55,
S151 1.75,S152 4.45,S153 5.88,S154 8.57,S155 11.73,
S161 1.64,S162 4.16,S163 5.49,S164 8.01,S165 10.96,
S171 1.53,S172 3.89,S173 5.13,S174 7.48,S175 10.24,
S181 1.43,S182 3.63,S183 4.8,S184 6.99,S185 9.57,
S191 1.34,S192 3.39,S193 4.48,S194 6.54,S195 8.94,
S201 1.25,S202 3.17,S203 4.19,S204 6.11,S205 8.36,
S211 1.17,S212 2.96,S213 3.91,S214 5.71,S215 7.81,
S221 1.09,S222 2.77,S223 3.66,S224 5.33,S225 7.3,
S231 1.02,S232 2.59,S233 3.42,S234 4.99,S235 6.82,
S241 .95,S242 2.42,S243 3.2,S244 4.66,S245 6.38,
S251 .89,S252 2.26,S253 2.99,S254 4.35,S255 5.96,
S261 .83,S262 2.11,S263 2.79,S264 4.07,S265 5.57,
S271 .78,S272 1.98,S273 2.61,S274 3.8,S275 5.21,
S281 .73,S282 1.85,S283 2.44,S284 3.55,S285 4.87,
S291 .68,S292 1.73,S293 2.28,S294 3.32,S295 4.55,
S301 .64,S302 1.61,S303 2.13,S304 3.1,S305 4.25/;
Parameter OBJ_T(T) /
T101 0, T102 0, T103 0, T104 0, T105 0,
T106 0, T107 0, T108 0, T109 0, T110 0,
T201 0, T202 0, T203 0, T204 0, T205 0,
T206 0, T207 0, T208 0, T209 0, T210 0,
T301 0, T302 0, T303 0, T304 0, T305 0,
T306 0, T307 0, T308 0, T309 0, T310 0,
T401 0, T402 0, T403 0, T404 0, T405 0,
T406 0, T407 0, T408 0, T409 0, T410 0,
T501 0, T502 0, T503 0, T504 0, T505 0,
T506 0, T507 0, T508 0, T509 0, T510 0,
T511 0, T512 0, T513 0, T514 0, T515 0,
T516 0, T517 0, T518 0, T519 0, T520 0,
T521 0, T522 0, T523 0, T524 0, T525 0,
T526 0, T527 0, T528 0, T529 0
/;
Parameters RHS_L(L)
/
TA01 120,
TA02 120,
TA03 120,
TA04 120,
TA05 120,
TA06 120,
TA07 120,
TA08 120,
TA09 120,
TA10 120,
TA11 120,
TA12 120,
TA13 120,
TA14 120,
TA15 120,
TA16 120,
TA17 120,
TA18 120,
TA19 120,
TA20 120,
TA21 120,
TA22 120,
TA23 120,
TA24 120,
TA25 120,
TA26 120,
TA27 120,
TA28 120,
TA29 120,
TA30 120
/;
Parameter RHS_W(W)
/
W101 537.6, W201 403.2, W301 537.6, W401 600, W501 600,
W102 0, W202 0, W302 0, W402 0, W502 0,
W103 0, W203 0, W303 0, W403 0, W503 0,
W104 0, W204 0, W304 0, W404 0, W504 0,
W105 0, W205 0, W305 0, W405 0, W505 0,
W106 0, W206 0, W306 0, W406 0, W506 0,
W107 0, W207 0, W307 0, W407 0, W507 0,
W108 0, W208 0, W308 0, W408 0, W508 0,
W109 0, W209 0, W309 0, W409 0, W509 0,
W110 0, W210 0, W310 0, W410 0, W510 0,
W111 0, W211 0, W311 0, W411 0, W511 0,
W112 0, W212 0, W312 0, W412 0, W512 0,
W113 0, W213 0, W313 0, W413 0, W513 0,
W114 0, W214 0, W314 0, W414 0, W514 0,
W115 0, W215 0, W315 0, W415 0, W515 0,
W116 0, W216 0, W316 0, W416 0, W516 0,
W117 0, W217 0, W317 0, W417 0, W517 0,
W118 0, W218 0, W318 0, W418 0, W518 0,
W119 0, W219 0, W319 0, W419 0, W519 0,
W120 0, W220 0, W320 0, W420 0, W520 0,
W121 0, W221 0, W321 0, W421 0, W521 0,
W122 0, W222 0, W322 0, W422 0, W522 0,
W123 0, W223 0, W323 0, W423 0, W523 0,
W124 0, W224 0, W324 0, W424 0, W524 0,
W125 0, W225 0, W325 0, W425 0, W525 0,
W126 0, W226 0, W326 0, W426 0, W526 0,
W127 0, W227 0, W327 0, W427 0, W527 0,
W128 0, W228 0, W328 0, W428 0, W528 0,
W129 0, W229 0, W329 0, W429 0, W529 0,
W130 0, W230 0, W330 0, W430 0, W530 0
/;
Parameter RechargeCapacity(W)
/
W101 50, W201 50, W301 50, W401 50, W501 50,
W102 50, W202 50, W302 50, W402 50, W502 50,
W103 50, W203 50, W303 50, W403 50, W503 50,
W104 50, W204 50, W304 50, W404 50, W504 50,
W105 50, W205 50, W305 50, W405 50, W505 50,
W106 50, W206 50, W306 50, W406 50, W506 50,
W107 50, W207 50, W307 50, W407 50, W507 50,
W108 50, W208 50, W308 50, W408 50, W508 50,
W109 50, W209 50, W309 50, W409 50, W509 50,
W110 50, W210 50, W310 50, W410 50, W510 50,
W111 50, W211 50, W311 50, W411 50, W511 50,
W112 50, W212 50, W312 50, W412 50, W512 50,
W113 50, W213 50, W313 50, W413 50, W513 50,
W114 50, W214 50, W314 50, W414 50, W514 50,
W115 50, W215 50, W315 50, W415 50, W515 50,
W116 50, W216 50, W316 50, W416 50, W516 50,
W117 50, W217 50, W317 50, W417 50, W517 50,
W118 50, W218 50, W318 50, W418 50, W518 50,
W119 50, W219 50, W319 50, W419 50, W519 50,
W120 50, W220 50, W320 50, W420 50, W520 50,
W121 50, W221 50, W321 50, W421 50, W521 50,
W122 50, W222 50, W322 50, W422 50, W522 50,
W123 50, W223 50, W323 50, W423 50, W523 50,
W124 50, W224 50, W324 50, W424 50, W524 50,
W125 50, W225 50, W325 50, W425 50, W525 50,
W126 50, W226 50, W326 50, W426 50, W526 50,
W127 50, W227 50, W327 50, W427 50, W527 50,
W128 50, W228 50, W328 50, W428 50, W528 50,
W129 50, W229 50, W329 50, W429 50, W529 50,
W130 50, W230 50, W330 50, W430 50, W530 50
/;
Set R /01*30/;
Parameter YearR(W);
$onEmbeddedCode Python:
values =
for w in gams.get(“W”):
if w.startswith(“W”):
values.append((w, int(w[1:])))
gams.set(“YearR”, values)
$offEmbeddedCode YearR
*---------------------------------------------------
*---------------------------------------------------
*---------------------------------------------------
Activate_Extraction_Lower(W)…
sum(C, W_C(W,C)*X(C)) =G= 1 * I_active(W)$(W5(W));
Activate_Extraction_Upper(W)…
sum(C, W_C(W,C)*X(C)) =L= M * I_active(W) $(W5(W));
Recharge_Limit(W)…
YearR(W) =L= RechargeCapacity(W) * I_active(W) $(W5(W));
Profit…
Val =E= sum(C, OBJ_C(C) * X(C))
+ sum(S, OBJ_S(S) * Y(S))
+ sum(T, OBJ_T(T) * Z(T));
Con_L(L)… sum(C, L_C(L,C)*X(C))
+ sum(S, L_S(L,S)*Y(S))
=L= RHS_L(L);
Con_W(W)… sum(C, W_C(W,C)*X(C))
+ sum(S, W_S(W,S)*Y(S))
- YearR(W)
+ sum(T, Transfer(W,T)*Z(T))
=L= RHS_W(W);
OnlyOneRecharge(R)…
sum(W$(W5(W)), I_active(W)) =E= 1;
Model Ogal/All/;
Solve Ogal maximizing Val using MIP;