Solved

Writing a constraint in AIMMS

  • 12 July 2019
  • 2 replies
  • 385 views

Userlevel 1
Badge +3
Dear Staff,

I need help writing the following constraint using the AIMMS language.

I have two indexes:

c

a



Where "a" indicates years.

I have a variable y(c,a)



I would like to define a summation over "c" and over "a" as less than or equal to a value. But the summation over "a" should be done only from the first year until the current year.



I am trying this formulation but something is wrong with it:



sum((c, a1|(a1="A01") and (a1=ord(a))), y(c,a1)) <= Value



Can you please help me writing this correctly using the AIMMS syntax?



Thank you,
icon

Best answer by mateusarakawa 12 July 2019, 14:35

View original

2 replies

Userlevel 1
Badge +3
Thank you so much! You are right, it is very straightforward with your formulation. I am trying the first one and it seems it is working fine.

Thank you very very much for your help! Very kind of you
Userlevel 5
Badge +2
Hi, @Chibo .



If your year set is for instance { 2016, 2017, 2018, 2019 } and for each year you want to create the summation, I would write:



Constraint_SumYears

Index Domain: (a)

Definition:

code:
sum((c,a_aux) | (ord(a_aux) <= ord(a)), y(c,a_aux)) <= value




With this approach you will create 4 constraints, 1 for each year.

2016 : sum(c, y(c,2016)) <= value

2017: sum(c, y(c,2016)) + sum(c, y(c,2017)) <= value

2018: sum(c, y(c,2016)) + sum(c, y(c,2017)) + sum(c, y(c,2018)) <= value

2019: sum(c, y(c,2016)) + sum(c, y(c,2017)) + sum(c, y(c,2018)) + sum(c, y(c,2019)) <= value



But if you want to create the constraint only for 2019



Constraint_SumYears

IndexDomain:

Definition:

code:
sum((c,a) | (ord(a) <= ord(ElementParameter_CurrentYear)), y(c,a)) 
<= value




So, if your ElementParameter_CurrentYear is '2019' you will create: sum(c, y(c,2016)) + sum(c, y(c,2017)) + sum(c, y(c,2018)) + sum(c, y(c,2019)) <= value



Remark: Check if your year set is ordered, in case it's not a calendar.

Tips:


  • In the second approach you can create a parameterOrdCurrentYear := ord(ElementParameter_CurrentYear) and use it instead.
  • In your code, you should refer to element A01 with single quotation mark 'A01'

Hope it helps!

Reply


Didn't find what you were looking for? Try searching on our documentation pages:

AIMMS Developer & PRO | AIMMS How-To | AIMMS SC Navigator