Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python约束的问题设置问题_Python_Scipy_Mathematical Optimization_Constraint Programming_Python Constraint - Fatal编程技术网

python约束的问题设置问题

python约束的问题设置问题,python,scipy,mathematical-optimization,constraint-programming,python-constraint,Python,Scipy,Mathematical Optimization,Constraint Programming,Python Constraint,我有一个数据帧df,需要通过满足以下条件来计算列“res”- “res”的元素必须在限制0.5的范围内≤物件≤4.5 sum(df.res*df.A)==1 “res”的顺序必须是var1>var2>var3>…>var14或df.order 我已经尽力解决了这个问题。然而,当我运行这个程序时,它永远不会结束!! 如果有人让我知道我在这里犯了哪些错误,我真的很感激 import pandas as pd import numpy as np import constraint #--------

我有一个数据帧
df
,需要通过满足以下条件来计算列“res”-

  • “res”的元素必须在限制
    0.5的范围内≤物件≤4.5
  • sum(df.res*df.A)==1
  • “res”的顺序必须是
    var1>var2>var3>…>var14
    df.order
  • 我已经尽力解决了这个问题。然而,当我运行这个程序时,它永远不会结束!! 如果有人让我知道我在这里犯了哪些错误,我真的很感激

    import pandas as pd
    import numpy as np
    import constraint
    #---------------------------------------------
    df=pd.DataFrame(
        {
            'variable':[
                'var0', 'var1', 'var2', 'var3', 'var4', 'var5', 'var6', 'var7', 'var8', 'var9', 'var10', 'var11', 'var12', 'var13'
            ],
            'order':[
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
            ],'A':[0.0027600582074272947, 0.004143907916774134, 0.014206504854458709, 0.06336190092978324, 0.009248500532763536,
     0.020789254657924628, 0.0032889203664890534, 0.06596802605794902, 0.0726805811046797, 0.03376844484647921, 0.1382882042107672,
     0.06811217628830124, 0.24303017352264142, 0.2603533465035616],
            'B':[0.38435300797459954, 0.058529034193262046, 0.09093583649489624, 0.2439925002243425, 0.03044378829669108, 0.018764118492057124,
     0.0018789589897301514, 0.023775922953316174, 0.021750211297236473, 0.010065630547679687, 0.029266905237710934, 0.012391441458362717,
     0.042770981682731406, 0.03108166215738403]  
        }        
            )
    #==========================================================
    problem = constraint.Problem()
    var_range=np.linspace(lo,up,5)
    problem.addVariables(df.variable, var_range)
    
    def cc_constraint(x0,x1, x2, x3, x4,x5,x6,x7,x8,x9,x10,x11,x12,x13):
        xx=[x0,x1, x2, x3, x4,x5,x6,x7,x8,x9,x10,x11,x12,x13]
        cc=np.array(xx)*np.array(df.A)
        if sum(cc)==1:
            return True
    def order_constraint(x0,x1, x2, x3, x4,x5,x6,x7,x8,x9,x10,x11,x12,x13):
        if x0>x1>x2> x3> x4>x5>x6>x7>x8>x9>x10>x11>x12>x13:
            return True
    problem.addConstraint(cc_constraint, list(df.variable))
    problem.addConstraint(order_constraint, list(df.variable))
    
    solutions = problem.getSolutions()
    
    

    尝试使用较小的数据,它可能会结束。然后是一个需要进一步分析的可伸缩性问题:例如,公式在传播方面是否有效,或者约束编程是否是正确的方法。乍一看,传播看起来非常弱,这不会扩展也就不足为奇了。但是由于描述和代码都很难理解,使用它并没有多大乐趣。谢谢@sascha的评论。有办法传播向量吗?