[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