Dear AIMMS Team,

Trust this meets you well? Kindly assist on the problem explained below and find attached the AIMMS file I am working with.

I have a variable StateofCharge(t) in which t is 1 to 24.

I want to place StateofCharge(t) at t = 1 or StateofCharge(01) on the conditional statement below.

*if ( (Charging_Power_kW(01) + SoCMin) > SoCMax) then*

SocMax

else

*Charging_Power_kW(01) + SoCMin*

endif;

**Note: Charging_Power_kW(01) is put as the value of variable Charging_Power_kW(t) at t=1**

While StateofCharge(t) at t = 2,….24 should have the conditional statement below. The index t in the statement applies only from t = 2,….24.

*If Energy_Difference_kW(t) > 0 then*

if (StateofCharge(t-1) + Charging_Power_kW(t)) > SoCMax

SoCMax

else

StateofCharge(t-1) + Charging_Power_kW(t)

elseif (Energy_Difference_kW(t)) < 0 then

if (StateofCharge(t-1) - SoCMin) > Discharging_Power_kW(t)

else

SoCMin

endif;

Also, if I have a parameter/variable, P(t), t=1,...24, how can I extract a cell? For example: P(5) or a parameter/variable with a double index P(t, k), t=1,..24 and k=1,...5, how can I write the value in cell P(2,4)?

Thank you.

Kind regards.

Hi @Lawrence, you can write the definition of StateofCharge as follows:

`if ( t = '01' ) then`

if (Charging_Power_kW(t) + SoCMin > SoCMax) then

SocMax

else

Charging_Power_kW(t) + SoCMin

endif

elseif (Energy_Difference_kW(t) > 0) then

if (StateofCharge(t-1) + Charging_Power_kW(t) > SoCMax) then

SoCMax

else

StateofCharge(t-1) + Charging_Power_kW(t)

endif

elseif (Energy_Difference_kW(t) < 0) then

if (StateofCharge(t-1) - SoCMin > Discharging_Power_kW(t)) then

StateofCharge(t-1) - SoCMin

else

SoCMin

endif

endif;

Or even better, use First(t) instead of ‘01’. That way you do not have to change this defintion if for some reason the first element changes (e.g., from ‘01’ to ‘1’ or ‘001’).

You should use single quotes if you want to refer to set elements: P(‘2’,’4’).

Hello @Marcel Hunting,

Thank you for your response. Most of the questions have been answered from the program you wrote.

However, there is still an issue I am trying to address.

I want the first conditional statement below to hold only for StateofCharge(t) at t = 1 only

*if ( (Charging_Power_kW(01) + SoCMin) > SoCMax) then*

SocMax

else

*Charging_Power_kW(01) + SoCMin*

endif;

*Note: This has been answered from your reply. *

……………………………………………………………………………………………………………………

So here is the issue….

However, I want the second conditional statement below to hold only for StateofCharge(t) at t = 2,….24 (or at t= 2 to the end) only

*If Energy_Difference_kW(t) > 0 then*

if (StateofCharge(t-1) + Charging_Power_kW(t)) > SoCMax

SoCMax

else

StateofCharge(t-1) + Charging_Power_kW(t)

elseif (Energy_Difference_kW(t)) < 0 then

if (StateofCharge(t-1) - SoCMin) > Discharging_Power_kW(t)

else

SoCMin

endif;

Thank you once again.

Hi @Lawrence. The second conditional statement for StateofCharge(t) at t = 2,….24 is also handled in my answer. Note that the definition contains three blocks. The first block

`if ( t = '01' ) then`

if (Charging_Power_kW(t) + SoCMin > SoCMax) then

SocMax

else

Charging_Power_kW(t) + SoCMin

endif

handles the situation for t=01. For *t* unequal to ‘01’ the other two blocks will be used:

`elseif (Energy_Difference_kW(t) > 0) then`

if (StateofCharge(t-1) + Charging_Power_kW(t) > SoCMax) then

SoCMax

else

StateofCharge(t-1) + Charging_Power_kW(t)

endif

elseif (Energy_Difference_kW(t) < 0) then

if (StateofCharge(t-1) - SoCMin > Discharging_Power_kW(t)) then

StateofCharge(t-1) - SoCMin

else

SoCMin

endif

endif;