Переменные ограничения Python, которые принимают свое имя вместо значения

Я хочу умножить диапазон каждой переменной, потому что я не могу использовать более 5 кг и 50 евро, поэтому я умножаю вес каждого продукта и его значение, но вместо этого программа возвращает мне ошибку, что она принимает значение an вместо диапазон.

      from constraint import *

problem = Problem()

problem.addVariable("a",range(0,51))
problem.addVariable("b",range(0,51))
problem.addVariable("c",range(0,11))
problem.addVariable("d",range(0,6))
problem.addConstraint(MaxSumConstraint(5000),['a'*340, 'b'*120,'c'*105,'d'*300])
problem.addConstraint(MaxSumConstraint(50),['a'*2,'b','c'*4,'d'*5])



soluciones = problem.getSolutions()


for solucion in soluciones:
    solucion_string = ""
    for i in range(4):
        solucion_string += "("+str(i)+","+str(solucion[i])+")"
    print(solucion_string)

print(len(soluciones))

Я хочу использовать значение диапазона каждой переменной и умножить его.

1 ответ

Я не уверен, что понимаю, чего вы пытаетесь достичь, но если я правильно понимаю, вы используете меньший диапазон и в конечном итоге хотите умножить значение этой переменной.

Будет ли лучше, если вы выполните умножение в конце метода печати решения и вместо этого скорректируете условия MaxSumConstraint в сторону уменьшения.

То, что вы здесь делаете, не сработает:

      ['a'*340, 'b'*120,'c'*105,'d'*300]

Это не целочисленные переменные, это буквально просто строка «a» и т. д., поэтому вы не можете ее умножить.

Если вам нужно, чтобы на них повлияли раньше, вам, возможно, придется создать свою собственную ограничительную функцию, учитывающую умножение.


Я не уверен в цели этого фрагмента кода, но если я правильно его понимаю, можно ли вместо этого использовать что-то вроде этого:

      def func1(a, b, c, d):
    return (a * 340 + b * 120 + c * 105 + d * 300) <= 5000


def func2(a, b, c, d):
    return (a * 2 + b + c * 4 + d * 5) <= 50

Что вы бы назвали так:

      problem.addConstraint(func1, variables)
problem.addConstraint(func2, variables)
Другие вопросы по тегам