equal
deleted
inserted
replaced
73 | setprod vec positive (cplexVar v) = set_elem vec (s2i v) (if positive then "1" else "-1") |
73 | setprod vec positive (cplexVar v) = set_elem vec (s2i v) (if positive then "1" else "-1") |
74 | setprod vec positive (cplexProd (cplexNum num, cplexVar v)) = |
74 | setprod vec positive (cplexProd (cplexNum num, cplexVar v)) = |
75 set_elem vec (s2i v) (if positive then num else "-"^num) |
75 set_elem vec (s2i v) (if positive then num else "-"^num) |
76 | setprod _ _ _ = raise (Converter "term is not a normed product") |
76 | setprod _ _ _ = raise (Converter "term is not a normed product") |
77 |
77 |
78 fun sum2vec (cplexSum ts) = Library.foldl (fn (vec, t) => setprod vec true t) (empty_vector, ts) |
78 fun sum2vec (cplexSum ts) = fold (fn t => fn vec => setprod vec true t) ts empty_vector |
79 | sum2vec t = setprod empty_vector true t |
79 | sum2vec t = setprod empty_vector true t |
80 |
80 |
81 fun constrs2Ab j A b [] = (A, b) |
81 fun constrs2Ab j A b [] = (A, b) |
82 | constrs2Ab j A b ((_, cplexConstr (cplexLeq, (t1,t2)))::cs) = |
82 | constrs2Ab j A b ((_, cplexConstr (cplexLeq, (t1,t2)))::cs) = |
83 constrs2Ab (j+1) (set_vector A j (sum2vec t1)) (set_elem b j (num2str true t2)) cs |
83 constrs2Ab (j+1) (set_vector A j (sum2vec t1)) (set_elem b j (num2str true t2)) cs |
98 (goal_maximize, sum2vec goal_term, A, b, (varcount, i2s, s2i)) |
98 (goal_maximize, sum2vec goal_term, A, b, (varcount, i2s, s2i)) |
99 end |
99 end |
100 |
100 |
101 fun convert_results (cplex.Optimal (opt, entries)) name2index = |
101 fun convert_results (cplex.Optimal (opt, entries)) name2index = |
102 let |
102 let |
103 fun setv (v, (name, value)) = (matrix_builder.set_elem v (name2index name) value) |
103 fun setv (name, value) v = matrix_builder.set_elem v (name2index name) value |
104 in |
104 in |
105 (opt, Library.foldl setv (matrix_builder.empty_vector, entries)) |
105 (opt, fold setv entries (matrix_builder.empty_vector)) |
106 end |
106 end |
107 | convert_results _ _ = raise (Converter "No optimal result") |
107 | convert_results _ _ = raise (Converter "No optimal result") |
108 |
108 |
109 end; |
109 end; |
110 |
110 |