[Bonmin] a problem of bonmin
Roy Chen
ytboy0208 at gmail.com
Fri Mar 16 14:02:41 EDT 2007
Skipped content of type multipart/alternative-------------- next part --------------
# batch.mod OOR2-AN-46-73
# AMPL coding: S. Leyffer, January 1999.
#
# Source: Source: Optimal Design of Multiproduct Batch Plant
# G.R. Kocis & I.E. Grossmann, "Global Optimization
# of Nonconvex Mixed Integer Nonlinear Programmming
# (MINLP) problems in Process Synthesis", Indust. Engng. Chem. Res.,
# No. 27, pp 1407--1421, 1988.
#
# Number of variables: 46 (24 binary variables)
# Number of constraints: 73
# Objective nonlinear
# Nonlinear constraints
param m := 6; # Number of stages
param n := 5; # Number of products
param k := 4; # Max number of parallel usints per stage
set M := 1..m;
set N := 1..n;
set K := 1..k;
set KxM := (K cross M);
set NxM within (N cross M);
param alpha{M} default 250; # cost coefficient
param beta{M} default 0.6; # cost coefficient
param VL{M} default 300; # lower bound on volume
param VU{M} default 3000; # upper bound on volume
param S{NxM}; # size factor (L/kg)
param t{NxM}; # processing time (h)
param Q{N}; # production rate (kg)
param tLO{N}; # lower bounds on cycle time
param tUP{N}; # upper bounds on cycle time
param bLO{N}; # lower bounds on product rate
param bUP{N}; # upper bounds on product rate
param H := 6000; # horizon time (h)
var npu {M} >= 0, <= log(k); # log of number of parallel units at stage j
var NPU {M} >= 0, <= k; # number of parallel units at stage j
var v {j in M} >= log(VL[j]), <= log(VU[j]); # log of volume at stage j
var b {i in N} >= bLO[i], <= bUP[i]; # log of batch size of batch i
var tL{i in N} >= tLO[i], <= tUP[i]; # log of cycle time of batch i
var y {KxM} binary; # models number of parallel units
minimize cost:
sum {j in M} ( alpha[j] * exp(npu[j] + beta[j]*v[j]) );
subject to
volm {i in N, j in M}: v[j] >= log(S[i,j]) + b[i];
ctim {i in N, j in M}: npu[j] + tL[i] >= log(t[i,j]);
horizon: sum {i in N} ( Q[i]*exp(tL[i] - b[i]) ) <= H;
npar {j in M}: npu[j] = sum {l in K} ( log(l) * y[l,j] );
SOS1 {j in M}: sum {l in K} ( y[l,j] ) = 1;
data;
param: NxM: S, t :=
1 1 7.9 6.4
2 1 0.7 6.8
3 1 0.7 1.0
4 1 4.7 3.2
5 1 1.2 2.1
1 2 2.0 4.7
2 2 0.8 6.4
3 2 2.6 6.3
4 2 2.3 3.0
5 2 3.6 2.5
1 3 5.2 8.3
2 3 0.9 6.5
3 3 1.6 5.4
4 3 1.6 3.5
5 3 2.4 4.2
1 4 4.9 3.9
2 4 3.4 4.4
3 4 3.6 11.9
4 4 2.7 3.3
5 4 4.5 3.6
1 5 6.1 2.1
2 5 2.1 2.3
3 5 3.2 5.7
4 5 1.2 2.8
5 5 1.6 3.7
1 6 4.2 1.2
2 6 2.5 3.2
3 6 2.9 6.2
4 6 2.5 3.4
5 6 2.1 2.2;
param: Q :=
1 250000.0
2 150000.0
3 180000.0
4 160000.0
5 120000.0;
param: tLO :=
1 0.729961
2 0.530628
3 1.09024
4 -0.133531
5 0.0487901 ;
param: tUP :=
1 2.11626
2 1.91626
3 2.47654
4 1.25276
5 1.43508;
param: bLO :=
1 4.45966
2 3.74950
3 4.49144
4 3.14988
5 3.04452;
param: bUP :=
1 397.747
2 882.353
3 833.333
4 638.298
5 666.667;
-------------- next part --------------
model batch.mod;
option solver bonmin;
solve;
display v,b,tL,y;
display cost;
-------------- next part --------------
bonmin.algorithm B-Hyb #choose bonmin algorithm
bonmin.Gomory_cuts -5 #Frequency for Generating Gomory cuts in branch_and-cut.
bonmin.allowable_fraction_gap 0. #Specify allowable relative gap
bonmin.allowable_gap 0. #Specify allowable absolute gap
bonmin.bb_log_level 1 #specify BB log level
bonmin.bb_log_interval 100 #Interval at which bound output is given
bonmin.cover_cuts -5 #Frequency for Generating cover cuts in branch_and-cut
bonmin.cutoff -1e100 #Specify cutoff
bonmin.cutoff_decr 0. #Specify cutoff increment
bonmin.integer_tolerance 1e-08 #Set integer tolerance
bonmin.lp_log_level 0 #specify sub-LP log level
bonmin.max_consecutive_failures 1 #Number of consecutive unsolved problems before aborting.
bonmin.max_consecutive_infeasible 0 #Number of consecutive infeasible problems before continuing a branch.
bonmin.max_random_point_radius 1e5 #Set max value for a random point
bonmin.milp_log_level 0 #specify sub-MILP log level
bonmin.milp_subsolver Cbc_D #Choose the subsolver to solve MILPs sub_problems in OA decompositions.
bonmin.mir_cuts -5 #Frequency for Generating MIR cuts in branch_and-cut
bonmin.nlp_failure_behavior stop #Set the behavior when the nlp fails.
bonmin.nlp_log_level 0 #specify sub-NLP log level
bonmin.nlp_solve_frequency 10 #Specify the frequency at which nlp relaxations are solved in hybrid.
bonmin.node_limit 60000 #Set maximum number of nodes explored
bonmin.nodeselect_stra best-bound #Choose the node selection strategy
bonmin.num_iterations_suspect -1 #Number of iteration over which a node is considered suspect
bonmin.num_retry_unsolved_random_point 0 #Number of time retry to solve a failed NLP with a random starting point
bonmin.num_resolve_at_root 4 #Number of time retry to solve the root node with different starting point (only usefull in non_convex).
bonmin.num_resolve_at_node 0 #Number of time retry to solve a non root node with different starting point (only usefull in non_convex).
bonmin.number_before_trust 8 #Set number of branches on a variable before its pseudo_costs are to be believed
bonmin.number_strong_branch 20 #Chooes number of variable for strong branching
bonmin.oa_dec_time_limit 10 #Specify the maximum amount of time spent in OA decomposition iteratrions.
bonmin.oa_log_level 1 #specify OA log level
bonmin.oa_log_frequency 100 #specify OA log frequency
bonmin.probing_cuts 0 #Frequency for Generating probing cuts in branch-and-cut
bonmin.time_limit 7200 #Set maximum computation time for Algorithm
bonmin.warm_start none #Set warm start method
#ipopt default changed by bonmin
print_level 0
More information about the Bonmin
mailing list