Python中的混合整数程序

Python中的混合整数程序,python,mixed-integer-programming,Python,Mixed Integer Programming,我有一个MIP问题,需要用Python输出。到目前为止,请参阅以下尝试。我只需要一些能给我指明正确方向的建议 digits = [("00"+str(x))[-3:] for x in range(1, 10)] var_1 = 2 var_2 = 1 var_3 = 3 LHS = [5,6,7] RHS = [100,200,300] count = 1 for v1 in range(var_1): for v2 in range(var_2):

我有一个MIP问题,需要用Python输出。到目前为止,请参阅以下尝试。我只需要一些能给我指明正确方向的建议

digits = [("00"+str(x))[-3:] for x in range(1, 10)]

var_1 = 2
var_2 = 1
var_3 = 3

LHS = [5,6,7]          
RHS = [100,200,300]
count = 1

for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            print("x"+digits[v1]+digits[v2]+digits[v3]+" - 20 z"+digits[v1]+digits[v2]+digits[v3]+" <= 0")

for v2 in range(var_2):
    for v3 in range(var_3):
        print("x"+digits[v2]+digits[v3]+" + "+"x" +digits[v2]+digits[v3]+" <= 123")
digits=[(“00”+str(x))[-3:]表示范围(1,10)内的x)
var_1=2
var_2=1
var_3=3
LHS=[5,6,7]
RHS=[100200300]
计数=1
对于范围内的v1(变量1):
对于范围内的v2(变量2):
对于范围内的v3(变量3):

打印(“x”+数字[v1]+数字[v2]+数字[v3]+“-20 z”+数字[v1]+数字[v2]+数字[v3]+”这是您的代码的一个工作版本,您有大多数正确的东西,您只是在这里和那里错过了一些步骤,但现在您可以:

digits = [("00"+str(x))[-3:] for x in range(1, 10)]

var_1 = 2
var_2 = 1
var_3 = 3

LHS = [5,6,7]          
RHS = [100,200,300]
count = 0 # set it to zero for start not 1

for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            count += 1
            print("c"+str(count)+": ",end='') # print the count
            print("x"+digits[v1]+digits[v2]+digits[v3]+" - 20 z"+digits[v1]+digits[v2]+digits[v3]+" <= 0")

for v1 in range(var_1-1): # or just put '1' if you want to but something has to be there
    for v2 in range(var_2):
        for v3 in range(var_3):
            count += 1
            print("c"+str(count)+": ",end='')
            print("x"+digits[v1]+digits[v2]+digits[v3]+" + "+"x" +digits[v1]+digits[v2]+digits[v3]+" <= 123") # I put the digits[v1] in
digits=[(“00”+str(x))[-3:]表示范围(1,10)内的x)
var_1=2
var_2=1
var_3=3
LHS=[5,6,7]
RHS=[100200300]
count=0#将其设置为0表示开始,而不是1
对于范围内的v1(变量1):
对于范围内的v2(变量2):
对于范围内的v3(变量3):
计数+=1
打印(“c”+str(计数)+:”,结束=“”)#打印计数

打印(“x”+数字[v1]+数字[v2]+数字[v3]+“-20 z”+数字[v1]+数字[v2]+数字[v3]+”这是获得所需内容的直接方法,但在不知道为什么要这样做的情况下,可能还有另一种方法:

var_1 = 2
var_2 = 1
var_3 = 3

count = 1

for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            print('c{0}: x{1:03}{2:03}{3:03} - 20 z{1:03}{2:03}{3:03} <= 0'.format(count,v1+1,v2+1,v3+1))
            count += 1

for v3 in range(var_3):
    print('c{0}: x001001{1:03} + x002001{1:03} <= 123'.format(count,v3+1))
    count += 1
var_1=2
var_2=1
var_3=3
计数=1
对于范围内的v1(变量1):
对于范围内的v2(变量2):
对于范围内的v3(变量3):

print('c{0}:x{1:03}{2:03}{3:03}-20z{1:03}{2:03}{3:03}DD1,您在这里走对了方向。您在这里所需要的并不是那么困难。使用下面的代码作为起点。这是对代码的修复。它提供了您需要的输出。其他响应也很有用

for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            print("c"+str(count)+":", end=" ")
            print("x"+digits[v1]+digits[v2]+digits[v3]+" - 20 z"+digits[v1]+digits[v2]+digits[v3]+" <= 0")
            count += 1

for v2 in range(var_2):
    for v3 in range(var_3):
        print("c"+str(count)+":", end=" ")
        print(" + ".join("x"+d+digits[v2]+digits[v3] for d in digits[:var_1]), end = " ")
        print("<= 123")
        count += 1

如果您愿意,如果这有帮助,请发布代码的任何更新。

您当前的输出和所需的输出看起来非常相似,您是否只想在输出的开头添加
c:
?我忘了提到我希望c1:等也显示为输出,正如您所看到的,c7-c9有三个9位001的下标001001等等,我的代码只生成两个6位数的下标。你应该澄清你的意图。在我看来,你最好使用适当的建模语言(AMPL、ZIMPL等)或标准格式(CPLEX LP、MPS等)描述你的问题,以便你以后也能解决它。还有Python模块可用于此目的:谢谢!非常感谢。非常感谢你的帮助。完美的答案。
var_1 = 2
var_2 = 1
var_3 = 3

count = 1

for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            print('c{0}: x{1:03}{2:03}{3:03} - 20 z{1:03}{2:03}{3:03} <= 0'.format(count,v1+1,v2+1,v3+1))
            count += 1

for v3 in range(var_3):
    print('c{0}: x001001{1:03} + x002001{1:03} <= 123'.format(count,v3+1))
    count += 1
var_1 = 2
var_2 = 1
var_3 = 3

count = 1

for v1 in range(1,var_1+1):
    for v2 in range(1,var_2+1):
        for v3 in range(1,var_3+1):
            print(f'c{count}: x{v1:03}{v2:03}{v3:03} - 20 z{v1:03}{v2:03}{v3:03} <= 0')
            count += 1

for v3 in range(1,var_3+1):
    print(f'c{count}: x001001{v3:03} + x002001{v3:03} <= 123')
    count += 1
for v1 in range(var_1):
    for v2 in range(var_2):
        for v3 in range(var_3):
            print("c"+str(count)+":", end=" ")
            print("x"+digits[v1]+digits[v2]+digits[v3]+" - 20 z"+digits[v1]+digits[v2]+digits[v3]+" <= 0")
            count += 1

for v2 in range(var_2):
    for v3 in range(var_3):
        print("c"+str(count)+":", end=" ")
        print(" + ".join("x"+d+digits[v2]+digits[v3] for d in digits[:var_1]), end = " ")
        print("<= 123")
        count += 1
import sys

orig_stdout = sys.stdout
a = open('filename.txt', 'w')  # w for write
sys.stdout = a

#put your code here

sys.stdout = orig_stdout
file.close()