+= Python 中的运算符
+= Operator in Python
我来自类 C 语言世界,Python 一直让我惊叹不已。我意识到我不知道 += 运算符在 Python 中是如何工作的。在 C-like 中,如果我对一个整数变量执行 +=,结果是 integer:
int a = 1
a += 1;
print(a) // will be 2
但我在 Python 中有以下程序(了解它在做什么并不重要,只需检查 += 运算符及其操作的类型):
# cost of factories
from pulp import *
cf0 = 450
cf1 = 420
cf2 = 400
# factory throughput
f0 = 2000
f1 = 1500
f2 = 1000
# production goal
goal = 80000
# time limit
max_num_days = 30
problem = LpProblem("computerAssembly", LpMaximize)
f0days = LpVariable.dicts("f0eachDay", list(range(max_num_days)), cat="Binary")
f1days = LpVariable.dicts("f1eachDay", list(range(max_num_days)), cat="Binary")
f2days = LpVariable.dicts("f2eachDay", list(range(max_num_days)), cat="Binary")
produced = 0
cost = 0
for i in range(max_num_days):
# only 2 active per day constraint
problem += f0days[i] + f1days[i] + f2days[i] <= 2
# sum up what was produced
produced += f0days[i]*f0 + f1days[i]*f1 + f2days[i]*f2
# objective
cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
problem += produced >= goal
problem += -cost
problem.solve()
print(problem)
# print("Problem solved: ", problem.status())
print("Problem solved")
# print(str(problem.status()))
for day in range(max_num_days):
print("Day configuration: {}-{}-{}".format(
int(f0days[i].varValue), int(f1days[i].varValue), int(f2days[i].varValue)))
现在,当我打印问题时(这只是一个摘录)
MAXIMIZE
-450*f0eachDay_0 + -450*f0eachDay_1 + -450*f0eachDay_10 + -450*f0eachDay_11 +
-450*f0eachDay_12 + -450*f0eachDay_13 + -450*f0eachDay_14 + -450*f0eachDay_15 +
-450*f0eachDay_16 + -450*f0eachDay_17 + -450*f0eachDay_18 + -450*f0eachDay_19 +
-450*f0eachDay_2 + -450*f0eachDay_20 + -450*f0eachDay_21 + -450*f0eachDay_22 +
-450*f0eachDay_23 + -450*f0eachDay_24 + -450*f0eachDay_25 + -450*f0eachDay_26 +
-450*f0eachDay_27 + -450*f0eachDay_28 + -450*f0eachDay_29 + -450*f0eachDay_3 +
-450*f0eachDay_4 + -450*f0eachDay_5 + -450*f0eachDay_6 + -450*f0eachDay_7 +
-450*f0eachDay_8 + -450*f0eachDay_9 + -420*f1eachDay_0 + -420*f1eachDay_1 +
-420*f1eachDay_10 + -420*f1eachDay_11 + -420*f1eachDay_12 + -420*f1eachDay_13 +
-420*f1eachDay_14 + -420*f1eachDay_15 + -420*f1eachDay_16 + -420*f1eachDay_17 +
-420*f1eachDay_18 + -420*f1eachDay_19 + -420*f1eachDay_2 + -420*f1eachDay_20 +
-420*f1eachDay_21 + -420*f1eachDay_22 + -420*f1eachDay_23 + -420*f1eachDay_24 +
-420*f1eachDay_25 + -420*f1eachDay_26 + -420*f1eachDay_27 + -420*f1eachDay_28 +
-420*f1eachDay_29 + -420*f1eachDay_3 + -420*f1eachDay_4 + -420*f1eachDay_5 +
-420*f1eachDay_6 + -420*f1eachDay_7 + -420*f1eachDay_8 + -420*f1eachDay_9 +
-400*f2eachDay_0 + -400*f2eachDay_1 + -400*f2eachDay_10 + -400*f2eachDay_11 +
-400*f2eachDay_12 + -400*f2eachDay_13 + -400*f2eachDay_14 + -400*f2eachDay_15 +
-400*f2eachDay_16 + -400*f2eachDay_17 + -400*f2eachDay_18 + -400*f2eachDay_19 +
-400*f2eachDay_2 + -400*f2eachDay_20 + -400*f2eachDay_21 + -400*f2eachDay_22 +
-400*f2eachDay_23 + -400*f2eachDay_24 + -400*f2eachDay_25 + -400*f2eachDay_26 +
-400*f2eachDay_27 + -400*f2eachDay_28 + -400*f2eachDay_29 + -400*f2eachDay_3 +
-400*f2eachDay_4 + -400*f2eachDay_5 + -400*f2eachDay_6 + -400*f2eachDay_7 +
-400*f2eachDay_8 + -400*f2eachDay_9 + 0
它神奇地知道我在以下行中进行的每项操作:cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
为什么 cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
不会生成整数,但它实际上会记住每一个操作?
谢谢
没关系,我在这里找到了答案:
https://realpython.com/linear-programming-python/
所有运算符都已重载。
我来自类 C 语言世界,Python 一直让我惊叹不已。我意识到我不知道 += 运算符在 Python 中是如何工作的。在 C-like 中,如果我对一个整数变量执行 +=,结果是 integer:
int a = 1
a += 1;
print(a) // will be 2
但我在 Python 中有以下程序(了解它在做什么并不重要,只需检查 += 运算符及其操作的类型):
# cost of factories
from pulp import *
cf0 = 450
cf1 = 420
cf2 = 400
# factory throughput
f0 = 2000
f1 = 1500
f2 = 1000
# production goal
goal = 80000
# time limit
max_num_days = 30
problem = LpProblem("computerAssembly", LpMaximize)
f0days = LpVariable.dicts("f0eachDay", list(range(max_num_days)), cat="Binary")
f1days = LpVariable.dicts("f1eachDay", list(range(max_num_days)), cat="Binary")
f2days = LpVariable.dicts("f2eachDay", list(range(max_num_days)), cat="Binary")
produced = 0
cost = 0
for i in range(max_num_days):
# only 2 active per day constraint
problem += f0days[i] + f1days[i] + f2days[i] <= 2
# sum up what was produced
produced += f0days[i]*f0 + f1days[i]*f1 + f2days[i]*f2
# objective
cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
problem += produced >= goal
problem += -cost
problem.solve()
print(problem)
# print("Problem solved: ", problem.status())
print("Problem solved")
# print(str(problem.status()))
for day in range(max_num_days):
print("Day configuration: {}-{}-{}".format(
int(f0days[i].varValue), int(f1days[i].varValue), int(f2days[i].varValue)))
现在,当我打印问题时(这只是一个摘录)
MAXIMIZE
-450*f0eachDay_0 + -450*f0eachDay_1 + -450*f0eachDay_10 + -450*f0eachDay_11 +
-450*f0eachDay_12 + -450*f0eachDay_13 + -450*f0eachDay_14 + -450*f0eachDay_15 +
-450*f0eachDay_16 + -450*f0eachDay_17 + -450*f0eachDay_18 + -450*f0eachDay_19 +
-450*f0eachDay_2 + -450*f0eachDay_20 + -450*f0eachDay_21 + -450*f0eachDay_22 +
-450*f0eachDay_23 + -450*f0eachDay_24 + -450*f0eachDay_25 + -450*f0eachDay_26 +
-450*f0eachDay_27 + -450*f0eachDay_28 + -450*f0eachDay_29 + -450*f0eachDay_3 +
-450*f0eachDay_4 + -450*f0eachDay_5 + -450*f0eachDay_6 + -450*f0eachDay_7 +
-450*f0eachDay_8 + -450*f0eachDay_9 + -420*f1eachDay_0 + -420*f1eachDay_1 +
-420*f1eachDay_10 + -420*f1eachDay_11 + -420*f1eachDay_12 + -420*f1eachDay_13 +
-420*f1eachDay_14 + -420*f1eachDay_15 + -420*f1eachDay_16 + -420*f1eachDay_17 +
-420*f1eachDay_18 + -420*f1eachDay_19 + -420*f1eachDay_2 + -420*f1eachDay_20 +
-420*f1eachDay_21 + -420*f1eachDay_22 + -420*f1eachDay_23 + -420*f1eachDay_24 +
-420*f1eachDay_25 + -420*f1eachDay_26 + -420*f1eachDay_27 + -420*f1eachDay_28 +
-420*f1eachDay_29 + -420*f1eachDay_3 + -420*f1eachDay_4 + -420*f1eachDay_5 +
-420*f1eachDay_6 + -420*f1eachDay_7 + -420*f1eachDay_8 + -420*f1eachDay_9 +
-400*f2eachDay_0 + -400*f2eachDay_1 + -400*f2eachDay_10 + -400*f2eachDay_11 +
-400*f2eachDay_12 + -400*f2eachDay_13 + -400*f2eachDay_14 + -400*f2eachDay_15 +
-400*f2eachDay_16 + -400*f2eachDay_17 + -400*f2eachDay_18 + -400*f2eachDay_19 +
-400*f2eachDay_2 + -400*f2eachDay_20 + -400*f2eachDay_21 + -400*f2eachDay_22 +
-400*f2eachDay_23 + -400*f2eachDay_24 + -400*f2eachDay_25 + -400*f2eachDay_26 +
-400*f2eachDay_27 + -400*f2eachDay_28 + -400*f2eachDay_29 + -400*f2eachDay_3 +
-400*f2eachDay_4 + -400*f2eachDay_5 + -400*f2eachDay_6 + -400*f2eachDay_7 +
-400*f2eachDay_8 + -400*f2eachDay_9 + 0
它神奇地知道我在以下行中进行的每项操作:cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
为什么 cost += f0days[i]*cf0 + f1days[i]*cf1 + f2days[i]*cf2
不会生成整数,但它实际上会记住每一个操作?
谢谢
没关系,我在这里找到了答案:
https://realpython.com/linear-programming-python/
所有运算符都已重载。