[Help-glpk] Transforming a Piecewise Linear Functions in a Convex Predicate
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)
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)
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