linearize

flopt.convert.linearize(prob)[source]

linearize of problem

Parameters:

prob (Problem) –

Examples

import flopt

x = flopt.Variable.array('x', 3, cat='Binary')

prob = flopt.Problem()
prob += x[0] - 2*x[1] - x[0]*x[1]*x[2]

print('[ original ]')
prob.show()
>>> [ original ]
>>>  Name: None
>>>   Type         : Problem
>>>   sense        : minimize
>>>   objective    : x_0-(2*x_1)-((x_0*x_1)*x_2)
>>>   #constraints : 0
>>>   #variables   : 3 (Binary 3)

from flopt.convert import linearize

linearize(prob)

print('[ linearized ])
prob.show()
>>> [ linearized ]
>>>  Name: None
>>>   Type         : Problem
>>>   sense        : minimize
>>>   objective    : 0-mul_1+x_0-(2*x_1)
>>>   #constraints : 6
>>>   #variables   : 5 (Binary 5)

>>>   C 0, name for_mul_0_1, mul_0-x_0 <= 0
>>>   C 1, name for_mul_0_2, mul_0-x_1 <= 0
>>>   C 2, name for_mul_0_3, mul_0-(x_0+x_1-1) >= 0
>>>   C 3, name for_mul_1_1, mul_1-mul_0 <= 0
>>>   C 4, name for_mul_1_2, mul_1-x_2 <= 0
>>>   C 5, name for_mul_1_3, mul_1-(mul_0+x_2-1) >= 0

binarize

flopt.convert.binarize(prob)[source]

binarize of problem

Parameters:

prob (Problem) –

Examples

import flopt

x = flopt.Variable.array('x', 2, cat='Binary')
y = flopt.Variable('y', lowBound=1, upBound=3, cat='Integer')

prob = flopt.Problem()
prob += y * x[0] + x[1]

print('[ original ]')
prob.show()
>>> [ original ]
>>>  Name: None
>>>   Type         : Problem
>>>   sense        : minimize
>>>   objective    : y_0*x_0+x_1
>>>   #constraints : 0
>>>   #variables   : 3 (Binary 2, Integer 1)

from flopt.convert import linearize, binarize

binarize(prob)

print('[ binarized ]')
prob.show()
>>> [ binarized ]
>>>  Name: None
>>>   Type         : Problem
>>>   sense        : minimize
>>>   objective    : x_0*(1*bin_y_0_0+2*bin_y_0_1+3*bin_y_0_2)+x_1
>>>   #constraints : 2
>>>   #variables   : 6 (Binary 5, Integer 1)

>>>   C 0, name for_bin_y_0_sum, bin_y_0_0+bin_y_0_2+bin_y_0_1-1 == 0
>>>   C 1, name for_bin_y_0_eq, y_0-(1*bin_y_0_0+2*bin_y_0_1+3*bin_y_0_2) == 0

linearize(prob)

print('[ linearized ]')
prob.show()
>>> [ linearized ]
>>>  Name: None
>>>   Type         : Problem
>>>   sense        : minimize
>>>   objective    : mul_0+2*mul_1+3*mul_2+x_1
>>>   #constraints : 11
>>>   #variables   : 9 (Binary 8, Integer 1)

>>>   C 0, name for_bin_y_0_sum, bin_y_0_0+bin_y_0_1+bin_y_0_2-1 == 0
>>>   C 1, name for_bin_y_0_eq, -bin_y_0_0-(2*bin_y_0_1)-(3*bin_y_0_2)+y_0 == 0
>>>   C 2, name for_mul_0_1, mul_0-bin_y_0_0 <= 0
>>>   C 3, name for_mul_0_2, mul_0-x_0 <= 0
>>>   C 4, name for_mul_0_3, mul_0-(bin_y_0_0+x_0-1) >= 0
>>>   C 5, name for_mul_1_1, mul_1-bin_y_0_1 <= 0
>>>   C 6, name for_mul_1_2, mul_1-x_0 <= 0
>>>   C 7, name for_mul_1_3, mul_1-(bin_y_0_1+x_0-1) >= 0
>>>   C 8, name for_mul_2_1, mul_2-bin_y_0_2 <= 0
>>>   C 9, name for_mul_2_2, mul_2-x_0 <= 0
>>>   C 10, name for_mul_2_3, mul_2-(bin_y_0_2+x_0-1) >= 0