私は生産分野の最適化問題のヒューリスティックをコーディングしています。あなたは以下のコードで見ることができるように、このヒューリスティックでは、私は様々な条件を持って、これらの異なる基準を考慮するための基準などを停止し、私は、複数のネストされたループで働いていた:ネストされたループの繰り返しを停止し、最も外側のループを続行します。
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
であり、すべてのループが最も外側のものから離れて早く終了するので、tao
のPERIODS
に進み、すべてが再び開始されます。
変数counter
と一緒に使ってみましたが、実際にはうまく機能しませんでした。
私は現在、例えば、この出力(抜粋)している:z=1
でk=2
反復した後
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
値をチェックし続けています。
誰も私にこの問題を解決するためのヒントを教えてもらえますか?私はループを関数に入れて、複数のループを壊すことができるように読んだが、私は複数の出口点を持つので、ここでこれをどのように定式化するかはわからない。
ありがとう!
はブール変数terminateLoopを持つことができます。この変数はデフォルトでfalseに設定されています。ループを終了し、変数をtrueに設定してループから抜け出したい場合に使用します。ブール値がtrueに設定されているかどうかをチェックするために、ネストされた各ループの先頭にif条件を設定します。 – abinmorth
こんにちは@abinmorth。あなたのご意見ありがとうございます。それは私にそれを修正するのを助けた。 :) 良いアイデア。 – Frederic