src/HOL/Matrix/CplexMatrixConverter.ML
changeset 15570 8d8c70b41bab
parent 15531 08c8dad8e399
equal deleted inserted replaced
15569:1b3115d1a8df 15570:8d8c70b41bab
    71 	  | setprod vec positive (cplexVar v) = set_elem vec (s2i v) (if positive then "1" else "-1")
    71 	  | setprod vec positive (cplexVar v) = set_elem vec (s2i v) (if positive then "1" else "-1")
    72 	  | setprod vec positive (cplexProd (cplexNum num, cplexVar v)) = 
    72 	  | setprod vec positive (cplexProd (cplexNum num, cplexVar v)) = 
    73 	    set_elem vec (s2i v) (if positive then num else "-"^num)
    73 	    set_elem vec (s2i v) (if positive then num else "-"^num)
    74 	  | setprod _ _ _ = raise (Converter "term is not a normed product")	
    74 	  | setprod _ _ _ = raise (Converter "term is not a normed product")	
    75 
    75 
    76 	fun sum2vec (cplexSum ts) = foldl (fn (vec, t) => setprod vec true t) (empty_vector, ts)
    76 	fun sum2vec (cplexSum ts) = Library.foldl (fn (vec, t) => setprod vec true t) (empty_vector, ts)
    77 	  | sum2vec t = setprod empty_vector true t						
    77 	  | sum2vec t = setprod empty_vector true t						
    78 
    78 
    79 	fun constrs2Ab j A b [] = (A, b)
    79 	fun constrs2Ab j A b [] = (A, b)
    80 	  | constrs2Ab j A b ((_, cplexConstr (cplexLeq, (t1,t2)))::cs) = 
    80 	  | constrs2Ab j A b ((_, cplexConstr (cplexLeq, (t1,t2)))::cs) = 
    81 	    constrs2Ab (j+1) (set_vector A j (sum2vec t1)) (set_elem b j (num2str true t2)) cs
    81 	    constrs2Ab (j+1) (set_vector A j (sum2vec t1)) (set_elem b j (num2str true t2)) cs
    98 
    98 
    99 fun convert_results (cplex.Optimal (opt, entries)) name2index =
    99 fun convert_results (cplex.Optimal (opt, entries)) name2index =
   100     let
   100     let
   101 	fun setv (v, (name, value)) = (matrix_builder.set_elem v (name2index name) value) 
   101 	fun setv (v, (name, value)) = (matrix_builder.set_elem v (name2index name) value) 
   102     in
   102     in
   103 	(opt, foldl setv (matrix_builder.empty_vector, entries))
   103 	(opt, Library.foldl setv (matrix_builder.empty_vector, entries))
   104     end
   104     end
   105   | convert_results _ _ = raise (Converter "No optimal result")
   105   | convert_results _ _ = raise (Converter "No optimal result")
   106     
   106     
   107 
   107 
   108 end;
   108 end;