[英]Stop iterating over nested loops and continue with most outest loop
我正在为生产领域的优化问题编写启发式代码。 在这种启发式方法中,我具有各种条件,停止条件等。为了解决这些不同的条件,我使用了多个嵌套循环,如下面的代码所示:
for tao in PERIODS:
print ("Iteration:", tao)
print ("-----------------------------------------")
print (SETUP_ITEMS)
for z in range(1,periods_count+1-tao):
print("z =",z)
for k in SETUP_ITEMS[tao+z]:
print("k =",k)
#### EXCEPTION 1
if production.loc[k][tao] == 0:
print("There is no setup in this period for product {}.".format(k))
counter =+ 1
continue
#### EXCEPTION 2
if demand.loc[k][tao+z] > spare_capacity[tao]['Spare Capacity']:
print("Capacity in period {} is insufficient to pre-produce demands for product {} from period {}.\n".format(tao, k, tao+z))
counter =+ 1
continue
if counter == k:
print("Stop Criterion is met!")
break
##########################################################################
if SM == 1:
if SilverMeal(k,z) == True:
print("Silver Meal Criterion is", SilverMeal(k,z))
production.loc[k][tao] += demand.loc[k][tao+z]
production.loc[k][tao+z] = 0
else:
print("Else: Silver Meal Criterion is", SilverMeal(k,z))
for t in range(tao,periods_count+1):
for k in PRODUCTS:
spare_capacity[t] = capacity[t][1]-sum(production.loc[k][t] for k in PRODUCTS)
SETUP_ITEMS = [[] for t in range(0,periods_count+1)]
for t in PERIODS:
for k in PRODUCTS:
if production.loc[k][t]==(max(0,demand.loc[k][t]-stock.loc[k][t-1])) > 0:
SETUP_ITEMS[t].append(k)
print(productionplan(production,spare_capacity,CF), '\n\n')
print(productionplan(production,spare_capacity,CF), '\n\n')
这个想法是,如果对于一个tao
,所有k
都存在一个例外,除了最外层的循环之外,所有循环都尽早终止,因此我们将在PERIODS
转到下一个tao
, PERIODS
又重新开始。
我尝试将其与counter
变量一起使用,但事实证明它的运行情况并非很好。
例如,我目前有以下输出(提取):
z = 1
k = 1
Capacity in period 1 is insufficient to pre-produce demands for product 1 from period 2.
k = 2
Capacity in period 1 is insufficient to pre-produce demands for product 2 from period 2.
z = 2
k = 2
Capacity in period 1 is insufficient to pre-produce demands for product 2 from period 3.
在z=1
的k=2
之后,迭代应终止,但它将继续检查其他z
值。
谁能给我一个解决该问题的技巧? 我读过关于将循环放入函数中的知识,这样一个循环就可以脱离多个循环,但是我不确定如何在这里表达它,因为我将有多个退出点。
谢谢!
Python无法控制一次跳出多个循环。
您可以设置一个标志,打破了多个循环,以获得更多信息链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.