reset; # include or model filename; # run file ######## Sets ######## set A0 ordered := {0,4,3,5,6,7,1}; # ordered set set A1 := {1..10 by 1}; # 1,2,... set A2 := {1..10 by 0.5}; # 1,1.5,2,... set A3 := (A1 diff A2) union {0}; # diff/union set A4 := {i in A1: i mod 3 = 0 or i < 9}; # with condition set A {i in 1..5}:= union{j in 1..i^2 by 0.2} {round(j,2)}; # set of sets + round set B default {}; for {i in 1..10} let B:=B union {round(Uniform(0,20))}; # modify sets display A0,A1,A2,A3,A4; display A; display B; end; ######## Parameter ######## param a := Normal(0,1); # Normal distributed random numbers param b default 0; let b := a+1; # update parameters param f{i in 0..10} := if i=0 then 1 else i*f[i-1]; # Fakultaet param bk {nn in 0..10,k in 0..nn} := if k=0 or k=nn then 1 else bk[nn-1,k] + bk[nn-1,k-1]; # Binomialkoeffizienten param c1{i in A1} := Uniform(0,1); # uniform random numbers param c1_mean := 1/card{A1} * sum{i in A1} c1[i]; # arithmetic mean param c1_var := 1/card{A1} * sum{i in A1} (c1[i]-c1_mean)^2; # variance param c2{i in A1,j in A2} := Uniform(0,1); # 2-dimensional parameter param c2_mean {j in A2}:= 1/card{A1} * sum{i in A1} c2[i,j]; # mean for all j param c2_var {j in A2}:= 1/card{A1} * sum{i in A1} (c2[i,j]-c2_mean[j])^2; # variance for all j display a,b; display f, bk; display c1,c1_mean, c1_var; display c1,c2_mean, c2_var; end; ######## Data ######### param d {1..5}; # 1-dimensional param d2{1..5,1..3}; # 2-dimensional param d3{1..5,1..3,1..2}; # 3-dimensional set D; # set data; # change to "data"-world set D := 1,3,5,27,17; # specify data param d := 1 45 2 74 3 82 4 17 5 3; param d2 : 1 2 3 := 1 45 34 23 2 74 38 28 3 82 33 27 4 17 31 29 5 3 35 25; param d3 [*,*,1]: 1 2 3 := 1 45 34 23 2 74 38 28 3 82 33 27 4 17 31 29 5 3 35 25 [*,*,2]: 1 2 3 := 1 55 24 93 2 64 48 78 3 72 63 77 4 87 71 89 5 93 85 75; model; # change back to standard "model"-world display D,d; display d2; display d3; end; ######## Variables ######### var x0; # continuous var x1 >= 0; # non-negative var x2 >= 2; # with one bound var x3 >= 2,<=5, integer; # with two bounds + integer var x4 := 2; # use starting value (not fixed) var x5 binary; # binary variable var x6 integer; # integer variable var x7 = x5*x6; # variable depending on others var x{i in 1..10}; # vector of variables #end; ######## Objectives ######## minimize LP1: 2*x1 + 3*x2; minimize LP2{i in 1..5}: i*x1 + 3*x2; # family of objectives minimize LP3: sum{i in 1..10} x[i]; minimize LP4: sum{i in 1..10} x[i]^2; ###### Constraints subject to NB1: 2*x2 <= 25-x1; subject to NB2: 4*x2 >= 2*x1-8; subject to NB3: x2 <= 2*x1-5; subject to NB4: sum{i in 1..10} x[i] >= 1; # single constraint subject to NB5 {i in 1..10}: x[i] >= 1; # set of constraint (for all i) ###### Solver option solver cplex; # solver choice for windows #option solver './cplex'; # solver choice for macOS solve; # solve display x1,x2; # display solution objective LP2[4]; # define which objective to use solve; display x1,x2,LP2; printf"x1=%4.2f, x2=%4.3f\n\n", x1, x2; # output via printf end; ##### Non-linear Optimization maximize LP1_NL: 2*x1^4 - 3*exp(x2); objective LP1_NL; # define which objective to use option solver minos; # minos solver: linear + non-linear + continuous (no integer!) # cplex/gurobi: linear + continous + integer (no non-linear!) solve; display x1,x2,LP1_NL;