[Help-glpk] Transforming a Piecewise Linear Functions in a Convex Predicate

2009-05-11 Thread Simone Atzeni

Hi,

I need to transform a Piecewise Linear Functions in a Convex  
Predicate. In attachment there is a tex file with the function and my  
transformation in a convex predicate. Using that convex predicate in a  
milp, the milp does not found solution. So in attachment there is  
my .c file with the function that create the MILP and an output with a  
milp with random valute.
The function in the examples is repeated two times, but it does not  
matter.


I don't know where is my mistake. It's impossible for me find it.

Thank you for your help.
Cheers
Simone



Piecewise-Linear-Functions.tex
Description: Binary data


function.c
Description: Binary data
Maximize
 obj: 0.5 Z.1 + 0.5 Z.2

Subject To
 r.1: + 5.6 U.1   -1 Z.1 + 72.8 Y.1.1 = 56
 r.2:   -5.6 U.1 + 1 Z.1   -15.8 Y.1.1 = 1
 r.3: + 1 U.1 + 10 Q.1 = 10
 r.4:   -1 U.1 + 1 Q.2 = 0
 r.5: - 1 Q.1 - 1 Q.2 - 1 Y.1.1 = -1
 r.6: + 5.6 U.1   -1 Z.1 + 72.8 Y.1.2 = 56
 r.7:   -5.6 U.1 + 1 Z.1   -15.8 Y.1.2 = 1
 r.8: + 1 U.1 + 9 Q.3 = 10
 r.9: -1 U.1 + 2 Q.4 = 0
 r.10: - Q.3 - Q.4 - Y.1.2 = -1
 r.11: + 5.6 U.1   -1 Z.1 + 72.8 Y.1.3 = 56
 r.12:   -5.6 U.1 + 1 Z.1   -15.8 Y.1.3 = 1
 r.13: -8 Y.1.3 + 1 U.1 = 2
 r.14: + 11.2 U.1   -1 Z.2 + 128.8 Y.1.1 = 112
 r.15:   -11.2 U.1 + 1 Z.2   -15.8 Y.1.1 = 1
 r.16: + 1 U.1 + 10 Q.1 = 10
 r.17:   -1 U.1 + 1 Q.2 = 0
 r.18: - 1 Q.1 - 1 Q.2 - 1 Y.1.1 = -1
 r.19: + 0 U.1   -1 Z.2 + 28 Y.1.2 = 0
 r.20: + 0 U.1 + 1 Z.2   -27 Y.1.2 = 1
 r.21: + 1 U.1 + 9 Q.3 = 10
 r.22: -1 U.1 + 2 Q.4 = 0
 r.23: - Q.3 - Q.4 - Y.1.2 = -1
 r.24: + 5.6 U.1   -1 Z.2 + 72.8 Y.1.3 = 56
 r.25:   -5.6 U.1 + 1 Z.2   -15.8 Y.1.3 = 1
 r.26: -8 Y.1.3 + 1 U.1 = 2
 r.27: Y.1.1 + Y.1.2 + Y.1.3 = 1 

Bounds
 0 = Z.1 = 1
 0 = Z.2 = 1
 0 = U.1 = 10
 0 = Y.1.1 = 1
 0 = Q.1 = 1
 0 = Q.2 = 1
 0 = Y.1.2 = 1
 0 = Q.3 = 1
 0 = Q.4 = 1
 0 = Y.1.3 = 1

Generals
 Z.1
 Z.2
 U.1

Integer
 Y.1.1
 Y.1.2
 Y.1.3
 Q.1
 Q.2
 Q.3
 Q.4

End
___
Help-glpk mailing list
Help-glpk@gnu.org
http://lists.gnu.org/mailman/listinfo/help-glpk


Re: [Help-glpk] how to defne an array (something like pointer to pointer in C)

2009-05-11 Thread xypron

Hello Maryam,

you could use the following formulation

set N;
set E{n in N};
display E;
data;
set N:= A B C D E;
set E[A]:= A AB;
set E[B]:= AB BC;
set E[C]:= BC CD;
set E[D]:= CD DE;
set E[E]:= DE;
end;

If you have large data sets consider using the table statement described in
doc\tables.pdf to read the data from a SQL database or from a CSV file.

Best regards

Xypron

Best regards

Xypron




Maryam Ahmadi wrote:
 
 Dear All,
 
 I am new to glpk and MathProg. I am trying to model a problem in glpk
 and solve it. The problem is that I don’t know how should I define the
 following :
 We have E[i] for each i that is member of N :
 N is a set that contains A B C D E,
 So, we have E[A], E[B], E[C], E[D], E[E]
 The value for each of these members is as follows, for example:
 E[A]:= AB
 E[B] := AB BC
 E[C] := BC CD
 E[D] := CD DE
 E[E] := DE
 The problem is that I don’t know how to define E with the above
 specifications!
 
 I have tested the followings and it didn’t work:
 1)
 param E:=
 A AB;
 B AB BC
 C BC CD
 D CD DE
 E DE;
 
 2)
 param E :
 if i==A
   then AB
 else if i==B
   then AB BC
 else if i==C
   then BC CD
 else if i==D
   then CD DE
 else if i==E
   then DE;
 3)
 set EA;   /*set of edges connected to node A*/
 set EB;   /*set of edges connected to node B*/
 set EC;   /*set of edges connected to node C*/
 set ED;   /*set of edges connected to node D*/
 set EE;   /*set of edges connected to node E*/
  set EA := AB;
 set EB := AB BC;
 set EC := BC CD;
 set ED := CD DE;
 set EE := DE;
 
 and also we have:
 u can be AB BC CD DE
 and after defining the E, I have to check something like this:
 for each I in N, for each u that is in E[i] ….some condition……
 
 I really don’t know how should I solve this problem,how to define E,
 and it is very essential to solve this problem..
 Please do me a favor and help!
 Many thanks in advance.
 Regards
 
 
 ___
 Help-glpk mailing list
 Help-glpk@gnu.org
 http://lists.gnu.org/mailman/listinfo/help-glpk
 
 

-- 
View this message in context: 
http://www.nabble.com/how-to-defne-an-array-%28something-like-pointer-to-pointer-in-C%29-tp23479009p23489985.html
Sent from the Gnu - GLPK - Help mailing list archive at Nabble.com.



___
Help-glpk mailing list
Help-glpk@gnu.org
http://lists.gnu.org/mailman/listinfo/help-glpk


Re: [Help-glpk] how to defne an array (something like pointer to pointer in C)

2009-05-11 Thread Andrew Makhorin
 I am new to glpk and MathProg. I am trying to model a problem in glpk
 and solve it. The problem is that I don’t know how should I define the
 following :
 We have E[i] for each i that is member of N :
 N is a set that contains A B C D E,
 So, we have E[A], E[B], E[C], E[D], E[E]
 The value for each of these members is as follows, for example:
 E[A]:= AB
 E[B] := AB BC
 E[C] := BC CD
 E[D] := CD DE
 E[E] := DE
 The problem is that I don’t know how to define E with the above
  specifications!

 I have tested the followings and it didn’t work:
 1)
 param E:=
 A AB;
 B AB BC
 C BC CD
 D CD DE
 E DE;

 2)
 param E :
 if i==A
   then AB
 else if i==B
   then AB BC
 else if i==C
   then BC CD
 else if i==D
   then CD DE
 else if i==E
   then DE;
 3)
 set EA;   /*set of edges connected to node A*/
 set EB;   /*set of edges connected to node B*/
 set EC;   /*set of edges connected to node C*/
 set ED;   /*set of edges connected to node D*/
 set EE;   /*set of edges connected to node E*/
  set EA := AB;
 set EB := AB BC;
 set EC := BC CD;
 set ED := CD DE;
 set EE := DE;

 and also we have:
 u can be AB BC CD DE
 and after defining the E, I have to check something like this:
 for each I in N, for each u that is in E[i] ….some condition……

 I really don’t know how should I solve this problem,how to define E,
 and it is very essential to solve this problem..
 Please do me a favor and help!
 Many thanks in advance.

You may try something like this:

set N;
set E{i in N}, dimen 2;
display E;
data;
set N := A B C D E;
set E[A] := (A,B);
set E[B] := (A,B) (B,C);
set E[C] := (B,C) (C,D);
set E[D] := (C,D) (D,E);
set E[E] := (D,E);





___
Help-glpk mailing list
Help-glpk@gnu.org
http://lists.gnu.org/mailman/listinfo/help-glpk