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,

**Best answer by mateusarakawa**

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:

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:

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:

Hope it helps!

View original
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!