dynamic sets as constraint for variable‏. Thanks a lot!!

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:

set i 30 feedstock supply regions /130/
j 7 candidates to build the factory /j1
j7/;

table dist(i,j) distance between i and j
$include distance.inc;

parameter supply(i) feedstock supply from each supply region

/
1 14
2 35
3 11
4 24
5 44
6 42
7 17
8 24
9 12
10 17
11 34
12 22
13 27
14 43
15 10
16 45
17 50
18 15
19 14
20 32
21 17
22 31
23 10
24 24
25 18
26 33
27 37
28 33
29 18
30 47/;

scalars
demand minimal demand from factory /200/
unitcost travel cost per unit /5/;



variable
x(i) number of units from supply i
z total cost
dummy(j) dummy variable;

positive variable x;
binary variable d;

equations
meetdemand
meetsupply(i)
definecost
plantnumb only one out of the 7 candidates is selected
;

set dd(i,j);
dd(i,j)=(dist(i,j)>=30);
display dd;



*only supply regions which is within the distance of 30 can be used…
x.fx(i$dd(i,j))=0;

meetdemand… sum(i,x(i))=g=demand;
meetsupply(i)… x(i)=l=supply(i);
definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;
plantnumb… sum(j,d(j))=e=1;



model trial /all/;
option MIP=CPLEX ;
solve trial using minlp minimizing z;


display x.l,z.l,d.l;




\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Mark



The fixing of the variables with distance is 0 is not working:



You have: x.fx(i$dd(i,j))=0;



First of all because you have to have the $-condition at the wrong place. This would be correct: x.fx(i)$dd(i,j)=0;



Furthermore, notice that you try to fix the variable x defined only over the set i. In the dollar assignment you have a set defined over I as well as j, so Gams expects a set j somewhere, to check the dollar assignment

This would only work like this:



loop(j, x.fx(i)$dd(i,j)=0;);



but then you completely drop x(i) even if the distance to a plant with distance less than zero.



Perhaps you could just set the distances that are bigger than 30 to a very big number.

dist(i,j)$dd(i,j) = 1000;



With fictive numbers for the distances this solves fine.



Cheers

Renger





Von: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Donnerstag, 24. Januar 2013 22:22
An: gamsworld@googlegroups.com
Betreff: dynamic sets as constraint for variable. Thanks a lot!!



Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Renger,

Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.

Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?



On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:

set i 30 feedstock supply regions /130/
j 7 candidates to build the factory /j1
j7/;

table dist(i,j) distance between i and j
$include distance.inc;

parameter supply(i) feedstock supply from each supply region

/
1 14
2 35
3 11
4 24
5 44
6 42
7 17
8 24
9 12
10 17
11 34
12 22
13 27
14 43
15 10
16 45
17 50
18 15
19 14
20 32
21 17
22 31
23 10
24 24
25 18
26 33
27 37
28 33
29 18
30 47/;

scalars
demand minimal demand from factory /200/
unitcost travel cost per unit /5/;



variable
x(i) number of units from supply i
z total cost
dummy(j) dummy variable;

positive variable x;
binary variable d;

equations
meetdemand
meetsupply(i)
definecost
plantnumb only one out of the 7 candidates is selected
;

set dd(i,j);
dd(i,j)=(dist(i,j)>=30);
display dd;



*only supply regions which is within the distance of 30 can be used…
x.fx(i$dd(i,j))=0;

meetdemand… sum(i,x(i))=g=demand;
meetsupply(i)… x(i)=l=supply(i);
definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;
plantnumb… sum(j,d(j))=e=1;



model trial /all/;
option MIP=CPLEX ;
solve trial using minlp minimizing z;


display x.l,z.l,d.l;




\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gamsworld@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Renger,

Thanks for your reply. I think I figured it out now!

On Friday, January 25, 2013 10:30:23 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gams...@googlegroups.com [mailto:gams...@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gams...@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Renger,

Can I ask you another question.

I used a do-loop command with the dynamic set constraint as follows:

loop(j,
Theta1(i,b)=theta(i,j,b);
XH.fx(i,m,crop,b)$dynamic(i,j)=0;
AH.fx(i,m,crop,b)$dynamic(i,j)=0;
XTN.fx(i,m,crop,b)$dynamic(i,j)=0;
XTO.fx(i,m,crop,b,t)$dynamic(i,j)=0;
NXS.fx(i,m,crop,b,t)$dynamic(i,j)=0;
XS.fx(i,m,crop,b,t)$dynamic(i,j)=0;
Solve Ethanol Minmizing COST USING MIP;
CostL(j) = Cost.l;
);

I basically fixed all the flow variables in the model to be within the distance constraint. For example, XH is the weight of feedstock and AH is the area of land used to produce the feedstock. This decreased memory and fastened the model significantly.

However I also used the “big fictive numbers” approach you suggested to make comparison. There are 82 loops in total however only the first 7 loops had identical results. After 7 loops, the optimal cost of the “dynamic constraint” one were getting bigger and bigger compared with the "fixed fictive number“ one, and it exited on the 15th loop showing “equation infeasible due to rhs value”.

Do you think it is because I set to many constraint in the do-loop command?

display costL;

On Friday, January 25, 2013 10:30:23 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gams...@googlegroups.com [mailto:gams...@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gams...@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Mark



Be aware, that if you solve within a loop, all your variables that were fixed in the previous loops are still fixed. I don’t know, if that is what you want. If not, you should free them again, by setting the lower and upper bound accordingly (eg. XH.lo(….) = -INF or 0 (if a positive variable) and XH.UP(…) = +INF.

Cheers

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Mark Wang
Sent: Montag, 28. Januar 2013 03:53
To: gamsworld@googlegroups.com
Subject: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Can I ask you another question.



I used a do-loop command with the dynamic set constraint as follows:



loop(j,

Theta1(i,b)=theta(i,j,b);

XH.fx(i,m,crop,b)$dynamic(i,j)=0;

AH.fx(i,m,crop,b)$dynamic(i,j)=0;

XTN.fx(i,m,crop,b)$dynamic(i,j)=0;

XTO.fx(i,m,crop,b,t)$dynamic(i,j)=0;

NXS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

XS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

Solve Ethanol Minmizing COST USING MIP;

CostL(j) = Cost.l;

);



I basically fixed all the flow variables in the model to be within the distance constraint. For example, XH is the weight of feedstock and AH is the area of land used to produce the feedstock. This decreased memory and fastened the model significantly.



However I also used the “big fictive numbers” approach you suggested to make comparison. There are 82 loops in total however only the first 7 loops had identical results. After 7 loops, the optimal cost of the “dynamic constraint” one were getting bigger and bigger compared with the "fixed fictive number“ one, and it exited on the 15th loop showing “equation infeasible due to rhs value”.



Do you think it is because I set to many constraint in the do-loop command?



display costL;


On Friday, January 25, 2013 10:30:23 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gams...@googlegroups.com [mailto:gams...@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gams...@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gamsworld@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Renger,

Thanks for the reminder. Now it works fine. Since previously I used “positive variable” for the variables such as “XH”, “AH” etc. Now I used “XH.lo=0 and XH.up=+inf”, it seems that the optimal result from GAMS for these two ways of restricting variables are different with each other ( the difference is within 10% variance). Is this normal?


On Monday, January 28, 2013 4:20:34 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark



Be aware, that if you solve within a loop, all your variables that were fixed in the previous loops are still fixed. I don’t know, if that is what you want. If not, you should free them again, by setting the lower and upper bound accordingly (eg. XH.lo(….) = -INF or 0 (if a positive variable) and XH.UP(…) = +INF.

Cheers

Renger



From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Mark Wang
Sent: Montag, 28. Januar 2013 03:53
To: gams...@googlegroups.com
Subject: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Can I ask you another question.



I used a do-loop command with the dynamic set constraint as follows:



loop(j,

Theta1(i,b)=theta(i,j,b);

XH.fx(i,m,crop,b)$dynamic(i,j)=0;

AH.fx(i,m,crop,b)$dynamic(i,j)=0;

XTN.fx(i,m,crop,b)$dynamic(i,j)=0;

XTO.fx(i,m,crop,b,t)$dynamic(i,j)=0;

NXS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

XS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

Solve Ethanol Minmizing COST USING MIP;

CostL(j) = Cost.l;

);



I basically fixed all the flow variables in the model to be within the distance constraint. For example, XH is the weight of feedstock and AH is the area of land used to produce the feedstock. This decreased memory and fastened the model significantly.



However I also used the “big fictive numbers” approach you suggested to make comparison. There are 82 loops in total however only the first 7 loops had identical results. After 7 loops, the optimal cost of the “dynamic constraint” one were getting bigger and bigger compared with the "fixed fictive number“ one, and it exited on the 15th loop showing “equation infeasible due to rhs value”.



Do you think it is because I set to many constraint in the do-loop command?



display costL;


On Friday, January 25, 2013 10:30:23 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gams...@googlegroups.com [mailto:gams...@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gams...@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\

Hi Mark

Are you sure, there is nothing more fixed, because this should be the same (positive variable = lo=0 and up =+inf)?
Renger



Von: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Montag, 28. Januar 2013 20:54
An: gamsworld@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks for the reminder. Now it works fine. Since previously I used “positive variable” for the variables such as “XH”, “AH” etc. Now I used “XH.lo=0 and XH.up=+inf”, it seems that the optimal result from GAMS for these two ways of restricting variables are different with each other ( the difference is within 10% variance). Is this normal?



On Monday, January 28, 2013 4:20:34 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark



Be aware, that if you solve within a loop, all your variables that were fixed in the previous loops are still fixed. I don’t know, if that is what you want. If not, you should free them again, by setting the lower and upper bound accordingly (eg. XH.lo(….) = -INF or 0 (if a positive variable) and XH.UP(…) = +INF.

Cheers

Renger



From: gams...@googlegroups.com [mailto:gams...@googlegroups.com] On Behalf Of Mark Wang
Sent: Montag, 28. Januar 2013 03:53
To: gams...@googlegroups.com
Subject: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Can I ask you another question.



I used a do-loop command with the dynamic set constraint as follows:



loop(j,

Theta1(i,b)=theta(i,j,b);

XH.fx(i,m,crop,b)$dynamic(i,j)=0;

AH.fx(i,m,crop,b)$dynamic(i,j)=0;

XTN.fx(i,m,crop,b)$dynamic(i,j)=0;

XTO.fx(i,m,crop,b,t)$dynamic(i,j)=0;

NXS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

XS.fx(i,m,crop,b,t)$dynamic(i,j)=0;

Solve Ethanol Minmizing COST USING MIP;

CostL(j) = Cost.l;

);



I basically fixed all the flow variables in the model to be within the distance constraint. For example, XH is the weight of feedstock and AH is the area of land used to produce the feedstock. This decreased memory and fastened the model significantly.



However I also used the “big fictive numbers” approach you suggested to make comparison. There are 82 loops in total however only the first 7 loops had identical results. After 7 loops, the optimal cost of the “dynamic constraint” one were getting bigger and bigger compared with the "fixed fictive number“ one, and it exited on the 15th loop showing “equation infeasible due to rhs value”.



Do you think it is because I set to many constraint in the do-loop command?



display costL;


On Friday, January 25, 2013 10:30:23 AM UTC-5, Renger van Nieuwkoop wrote:

Hi Mark

If you want to constrain something, shouldn’t it be the flows from I to j where the distance is bigger than 30 and not the supply node itself, because this node might be connected to j’s that are not farther away than 30 units.

I don’t see any flows in your model. X(i) is the total supply from node I, which probably should be equal to the sum over all flows from this node to all connected nodes

Cheers

Renger



Von: gams...@googlegroups.com [mailto:gams...@googlegroups.com] Im Auftrag von Mark Wang
Gesendet: Freitag, 25. Januar 2013 16:14
An: gams...@googlegroups.com
Betreff: Re: dynamic sets as constraint for variable. Thanks a lot!!



Hi Renger,



Thanks a lot for your reply. Actually I have ready tried the method of imposing a fictive large number. The reason why I want to try this dynamic set method is that when I use a this model for my thesis, there are more than 8000 entries for i dimension and more than 200 entries for j dimension. Again I have to consider other constraints in my model so it takes a long time to solve the model. I think maybe by imposing x(i) from supply regions further way to be fixed at 0, the model will solve faster.



Do you think I can impose some constraint like x.fx(i)$(dist(i,j)>30)=0 ? or a dimension j is still needed?






On Thursday, January 24, 2013 4:21:58 PM UTC-5, Mark Wang wrote:

Greetings. There is a simple model to choose a optimal site out of 7 candidates to build a factory. I want to add a constraint that only those within the distance of 30 of the candidate can be selected as supply region by x.fx(i$dd(i,j))=0; However it does not work. Anyone can give me some advice? The detailed model is below:



set i 30 feedstock supply regions /1*30/

j 7 candidates to build the factory /j1*j7/;



table dist(i,j) distance between i and j

$include distance.inc;



parameter supply(i) feedstock supply from each supply region



/

1 14

2 35

3 11

4 24

5 44

6 42

7 17

8 24

9 12

10 17

11 34

12 22

13 27

14 43

15 10

16 45

17 50

18 15

19 14

20 32

21 17

22 31

23 10

24 24

25 18

26 33

27 37

28 33

29 18

30 47/;



scalars

demand minimal demand from factory /200/

unitcost travel cost per unit /5/;







variable

x(i) number of units from supply i

z total cost

dummy(j) dummy variable;



positive variable x;

binary variable d;



equations

meetdemand

meetsupply(i)

definecost

plantnumb only one out of the 7 candidates is selected

;



set dd(i,j);

dd(i,j)=(dist(i,j)>=30);

display dd;







*only supply regions which is within the distance of 30 can be used…

x.fx(i$dd(i,j))=0;



meetdemand… sum(i,x(i))=g=demand;

meetsupply(i)… x(i)=l=supply(i);

definecost… sum(j,sum(i,unitcost*dist(i,j)*x(i))*d(j))=e=z;

plantnumb… sum(j,d(j))=e=1;







model trial /all/;

option MIP=CPLEX ;

solve trial using minlp minimizing z;





display x.l,z.l,d.l;










\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To post to this group, send email to gams...@googlegroups.com.
To unsubscribe from this group, send email to gamsworld+...@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

\