У меня есть смешанная целочисленная программа с 25 ограничениями с тремя переменными нижнего индекса. Существует два типа переменных: одна целая, а другая двоичная. Целочисленные переменные называются Axyz, а бинарные — Bxyz. Вот моя формулировка:
цель A111 + A112 + A113 + A211 + A212 + A213 + ... A252525 ‹-- Проблема в последнем. Я не могу так выразиться. Поэтому мне нужно было бы изменить их все на трехзначный индекс для одного индекса. Я имею в виду, что A111 становится A001001001, а A252525 становится A025025025, чтобы компилятор мог его прочитать.
ограничения: 1-е ограничение A111 + 90 B111 ‹= 0 A112 + 90 B112 ‹= 0
Здесь будет та же проблема, что и с функцией оптимизации. И как мне сделать вывод этого ограничения.
2-е ограничение: A111 + A112 + A113 + A211 + A212 + A213 + ... A252525 >= 1000 Сделать вывод. Как это закодировать?
Единственный код, который у меня есть, предназначен для цели, и он работает только частично из-за проблемы с A252525. Вот:
from itertools import product
num = "".join(map(str, range(1, 25)))
l = map(lambda x: 'A' + x, (map('1'.join, product(num, num))))
print (" + ".join(l))
Если вы запустите это, вы увидите, что оно начинает повторяться после A119 из-за диапазона. Чтобы понять, чего я хочу, вы должны запустить код.
Я хочу, чтобы результат выглядел точно так же, как показано ниже. И, очевидно, эти ... находятся там, где я этого хочу. На выходе на самом деле будет все, что между ними.
A111 + A112 + A113 + A211 + A212 + A213 + ... A252525
A111 + 90 B111 <= 0
A112 + 90 B112 <= 0 ... A252525 + 90 B252525 <= 0
A111 + A112 + A113 + A211 + A212 + A213 + ... A252525 >= 1000
ОБНОВЛЕНО:
Вот точный результат, который я хочу:
A010101 + A010102 + A010103 + A010104 + A010105 + A010106 + A010107 + A010108 + A010109 + A010110 + A020101 + A020102 + A020103 + A020104 + A020105 + A020106 + A020107 + A020108 + A020109 + A020110 + A030101 + A030102 + A030103 + A030104 + A030105 + A030106 + A030107 + A030108 + A030109 + A030110 + A010201 + A010202 + ....... + A030210
x представляет день недели (мы предполагаем, что это 3 дня)
y представляет неделю (мы предполагаем, что 2 недели)
z представляет продавца (мы предполагаем, что 10 продавцов)
Это как сказать, что в 1-й день недели 1-й продавец 1 работает и так далее. В выводе, который я хочу, как упоминалось ранее, есть три индекса; xyz. Таким образом, в выводе, который мне нужен, каждый из этих индексов представляет первые два, вторые два и третьи два числа соответственно. Например: для первого члена x равно 01, y равно 01 и z равно 01, а для последнего члена x равно 03, y равно 02 и z равно 10. Я забыл упомянуть, что я хотите, чтобы пользователь ввел значения для x, y и z. Поскольку я хочу, чтобы пользователь ввел x=3,y=2 и z=10 (это то, что представляет последний термин). Я предполагаю, что так оно и будет. «y» 02 начнется только после того, как будут завершены все 01 для «y», что будет A030110. См. это в примере вывода.
Тогда для 1-го набора ограничений это должно быть похоже на:
A010101 + 90 B010101 <= 0
A010102 + 90 B010102 <= 0
и это будет продолжаться для каждого термина в цели.
Не беспокойтесь о втором наборе ограничений. И вам не нужно знать, что означают ограничения. Здесь вам не нужно знать, что это значит.