如何在 docplex 中将浮点数转换为二进制变量?
How to convert a float to a binary variable in docplex?
在创建模型并使用一些专门的切割解决 LP 之后,我想解决问题的 IP 版本,但更改某些变量的类型。在 JAVA 中使用函数:
IloConversion 转换(IloNumVar 变量,
IloNumVarType 类型)
抛出 IloException
DOCPLEX 中的等价物是什么?
DOcplex 中相应的 API 尚未记录,因为它没有经过充分测试。
这个说,你可以试试
myvar.set_vartype('I')
将变量转换为二进制整数类型(或'B')。此代码目前按原样提供。让我们知道这是否适合您。
此方法接受变量类型实例(例如 model.binary_vartype)或单字母字符串('B'、'I'、'C'、'S' 表示半连续,'N " 对于半整数)
在这个例子中,我最大化了四个二进制文件的总和,其总和小于 3.5。
当我将它们的类型更改为连续时,其中一个设置为 0.5 并且 objective 等于 3.5
代码:
def test_vartype():
m = Model()
m.environment.print_information()
bs = m.binary_var_list(4, name='b')
sumbs = m.sum(bs)
m.add(sumbs <= 3.5)
m.maximize(m.sum(bs))
s1 = m.solve()
assert s1
s1.display()
# now switch
for b in bs:
b.set_vartype(m.continuous_vartype)
# m.print_information()
s2 = m.solve(log_output=False)
m.report()
s2.display()
输出为:
* Python version 3.7.7, located at: C:\python\anaconda2020.02\envs\docplex_dev37\python.exe
* docplex is present, version is 2.19.0
* CPLEX library is present, version is 20.1.0.0, located at: C:\OPTIM\cplex_distrib\cplex2001R1\python.7\x64_win64
* pandas is present, version is 1.0.3
* numpy is present, version is 1.18.1
solution for: docplex_model1
objective: 3
b_0 = 1
b_1 = 1
b_2 = 1
* model docplex_model1 solved with objective = 3.500
solution for: docplex_model1
objective: 3.500
b_0 = 1.000
b_1 = 1.000
b_2 = 1.000
b_3 = 0.500
在创建模型并使用一些专门的切割解决 LP 之后,我想解决问题的 IP 版本,但更改某些变量的类型。在 JAVA 中使用函数:
IloConversion 转换(IloNumVar 变量, IloNumVarType 类型) 抛出 IloException
DOCPLEX 中的等价物是什么?
DOcplex 中相应的 API 尚未记录,因为它没有经过充分测试。 这个说,你可以试试
myvar.set_vartype('I')
将变量转换为二进制整数类型(或'B')。此代码目前按原样提供。让我们知道这是否适合您。 此方法接受变量类型实例(例如 model.binary_vartype)或单字母字符串('B'、'I'、'C'、'S' 表示半连续,'N " 对于半整数)
在这个例子中,我最大化了四个二进制文件的总和,其总和小于 3.5。
当我将它们的类型更改为连续时,其中一个设置为 0.5 并且 objective 等于 3.5
代码:
def test_vartype():
m = Model()
m.environment.print_information()
bs = m.binary_var_list(4, name='b')
sumbs = m.sum(bs)
m.add(sumbs <= 3.5)
m.maximize(m.sum(bs))
s1 = m.solve()
assert s1
s1.display()
# now switch
for b in bs:
b.set_vartype(m.continuous_vartype)
# m.print_information()
s2 = m.solve(log_output=False)
m.report()
s2.display()
输出为:
* Python version 3.7.7, located at: C:\python\anaconda2020.02\envs\docplex_dev37\python.exe
* docplex is present, version is 2.19.0
* CPLEX library is present, version is 20.1.0.0, located at: C:\OPTIM\cplex_distrib\cplex2001R1\python.7\x64_win64
* pandas is present, version is 1.0.3
* numpy is present, version is 1.18.1
solution for: docplex_model1
objective: 3
b_0 = 1
b_1 = 1
b_2 = 1
* model docplex_model1 solved with objective = 3.500
solution for: docplex_model1
objective: 3.500
b_0 = 1.000
b_1 = 1.000
b_2 = 1.000
b_3 = 0.500