英文:
Using logarithmic in the objective function in IBM CPLEX
问题
我的目标函数在IBM CPLEX中如下所示:
objective = opt_model.sum(math.log(r_vars[0,0]*(3*w_vars[0]-1))+math.log(r_vars[1,0]*(3*w_vars[0]-1)))
opt_model.maximize(objective)
变量 w_vars
的值可以在范围 [0,1] 内,而 r_vars
的值可以在范围 [1,100] 内。但是我收到以下错误信息:
TypeError: 必须是实数,而不是 QuadExpr
我认为问题出在 math.log
函数的括号上。如何在IBM CPLEX的目标函数中使用对数函数?或者对此有何看法?
英文:
My objective function in IBM CPLEX is as follows:
objective = opt_model.sum(math.log(r_vars[0,0]*(3*w_vars[0]-1))+math.log(r_vars[1,0]*(3*w_vars[0]-1)))
opt_model.maximize(objective)
The variable w_vars
can get a value in the range [0,1] and the value of r_vars
can be in the range of [1,100]. But I am getting this error:
TypeError: must be real number, not QuadExpr
I assume the problem is the result of the parentheses for the math.log
function. How can I use a log function in the objective function in IBM CPLEX? Or any thoughts on this?
答案1
得分: 1
你可以依赖Cplex中的cpo进行操作,具体示例可以参考以下链接:
https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoononlinear.py
以下是一个简单的示例代码:
from docplex.cp.model import CpoModel
mdl = CpoModel(name='buses')
nbbus40 = mdl.integer_var(0, 1000, name='nbBus40')
nbbus30 = mdl.integer_var(0, 1000, name='nbBus30')
mdl.add(nbbus40 * 40 + nbbus30 * 30 >= 300)
# 非线性目标
mdl.minimize(mdl.exponent(nbbus40) * 500 + mdl.exponent(nbbus30) * 400)
msol = mdl.solve()
print(msol[nbbus40], "辆40座公交车")
print(msol[nbbus30], "辆30座公交车")
请注意,这是一个使用Cplex的示例代码,用于解决一个特定的问题。您可以根据您的需求进行相应的修改和定制。
英文:
What you could do is rely on cpo within Cplex
See
https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoononlinear.py
For a tiny example
from docplex.cp.model import CpoModel
mdl = CpoModel(name='buses')
nbbus40 = mdl.integer_var(0,1000,name='nbBus40')
nbbus30 = mdl.integer_var(0,1000,name='nbBus30')
mdl.add(nbbus40*40 + nbbus30*30 >= 300)
#non linear objective
mdl.minimize(mdl.exponent(nbbus40)*500 + mdl.exponent(nbbus30)*400)
msol=mdl.solve()
print(msol[nbbus40]," buses 40 seats")
print(msol[nbbus30]," buses 30 seats")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论