cplex中的小数次幂怎么表示

再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) 表示。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/671778
  • 你也可以参考下这篇文章:干货:弄懂 Python 包的加载 && 解决自定义包内 py 文件单独运行时,包内文件引用错误
  • 除此之外, 这篇博客: python cplex优化包工具箱教程中的 2.求解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    第一步:导入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)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^