再python中调用cplex求解模型,其中变量的小数次幂怎么表示?
1使用Python的内置幂运算符 **
import cplex
my_prob = cplex.Cplex()
my_prob.variables.add(obj=[1.0, 2.0, 3.0], lb=[0.0, 0.0, 0.0], ub=[1.0, 1.0, 1.0], types=["C", "C", "C"], names=["x1", "x2", "x3"])
my_prob.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=["x1", "x2", "x3"], val=[1.0, 2.0, 3.0])], senses=["L"], rhs=[10.0])
my_prob.solve()
x = my_prob.solution.get_values()
print("Solution: x1={}, x2={}, x3={}".format(x[0], x[1], x[2]**0.5))
//在上述示例中,变量 x3 的平方根使用 x[2]**0.5 表示
2.使用Python的内置 pow 函数,例如
import cplex
my_prob = cplex.Cplex()
my_prob.variables.add(obj=[1.0, 2.0, 3.0], lb=[0.0, 0.0, 0.0], ub=[1.0, 1.0, 1.0], types=["C", "C", "C"], names=["x1", "x2", "x3"])
my_prob.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=["x1", "x2", "x3"], val=[1.0, 2.0, 3.0])], senses=["L"], rhs=[10.0])
my_prob.solve()
x = my_prob.solution.get_values()
print("Solution: x1={}, x2={}, x3={}".format(x[0], x[1], pow(x[2], 0.5)))
//在上述示例中,变量 x3 的平方根使用 pow(x[2], 0.5) 表示。
不知道你这个问题是否已经解决, 如果还没有解决的话:第一步:导入CPLEX的包
import cplex
第二步:初始化一个优化模型
prob = cplex.Cplex() # 此处的prob可以是任意变量名
第三步:设置目标方程的取值方向:求最大值/最小值
prob.objective.set_sense(prob.objective.sense.minimize)
##prob.objective.sense.minimize最小值;
#prob.objective.sense.maximize最大值
第四步:添加变量
#4.添加变量
my_obj = [1.0, 2.0, 3.0, 1.0] #目标函数(未知量)系数
my_ub = [40.0, cplex.infinity, cplex.infinity, 3.0] #未知量上限
my_lb = [0.0, 0.0, 0.0, 2.0]#未知量下限
my_ctype = "CCCI"#前面三个实数,x4为整数
my_colnames = ["x1", "x2", "x3", "x4"] #未知量 名称
prob.variables.add(obj=my_obj,lb=my_lb,ub=my_ub,types=my_ctype,names=my_colnames) #
第五步:添加线性约束
lin_expr可以是SparsePair实例的列表,也可以是列表格式的矩阵。lin_expr的表项不能包含重复的索引。如果lin_expr的一个条目通过索引、名称或索引和名称的组合多次引用一个变量,将引发异常。
senses包含线性约束意义的字符串。每个条目必须是’G’、‘L’、'E’和’R’中的一个,分别表示大于或等于(>=)、小于或等于(<=)、相等(=)和排列约束。
RHS是一个浮点数列表,指定每个线性约束的右侧。
Range_values是一个浮点数列表,指定每个线性约束的左侧和右侧之间的差异。如果range_values[i] > 0(0),则约束i被定义为rhs[i] <= rhs[i] + range_values[i]。如果range_values[i] < 0(0),那么约束i被定义为rhs[i] + range_value[i] <= a*x <= rhs[i]。
Names是字符串列表。
#第五步:添加线性约束
my_rhs = [20.0, 30.0, 0.0]
my_rownames = ["r1", "r2", "r3"]
my_sense = "LLE"
rows = [[["x1", "x2", "x3", "x4"], [-1.0, 1.0, 1.0, 10.0]],
[["x1", "x2", "x3"], [1.0, -3.0, 1.0]],
[["x2", "x4"], [1.0, -3.5]]]
prob.linear_constraints.add(lin_expr=rows, senses=my_sense,
rhs=my_rhs, names=my_rownames)
第六步:直接调用优化求解器的求解方法(method),一键求解
#第六步:求解
prob.solve()
第七步:打印结果
#打印结果
# solution.get_status() returns an integer code
print("求解状态 = ", prob.solution.get_status(), ":")
print("目标函数值 = ", prob.solution.get_objective_value())
x = prob.solution.get_values()
print('x变量',x)