2017-09-12 8 views
0

私は生産分野の最適化問題のヒューリスティックをコーディングしています。あなたは以下のコードで見ることができるように、このヒューリスティックでは、私は様々な条件を持って、これらの異なる基準を考慮するための基準などを停止し、私は、複数のネストされたループで働いていた:ネストされたループの繰り返しを停止し、最も外側のループを続行します。

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であり、すべてのループが最も外側のものから離れて早く終了するので、taoPERIODSに進み、すべてが再び開始されます。

変数counterと一緒に使ってみましたが、実際にはうまく機能しませんでした。

私は現在、例えば、この出力(抜粋)している:z=1k=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値をチェックし続けています。

誰も私にこの問題を解決するためのヒントを教えてもらえますか?私はループを関数に入れて、複数のループを壊すことができるように読んだが、私は複数の出口点を持つので、ここでこれをどのように定式化するかはわからない。

ありがとう!

+0

はブール変数terminateLoopを持つことができます。この変数はデフォルトでfalseに設定されています。ループを終了し、変数をtrueに設定してループから抜け出したい場合に使用します。ブール値がtrueに設定されているかどうかをチェックするために、ネストされた各ループの先頭にif条件を設定します。 – abinmorth

+0

こんにちは@abinmorth。あなたのご意見ありがとうございます。それは私にそれを修正するのを助けた。 :) 良いアイデア。 – Frederic

答えて

0

Pythonには、複数のループを一度に切断する制御がありません。

あなたはフラグを設定し、複数のループから抜け出す、詳細はLink

+0

ありがとうDalon!たくさん助けて! – Frederic

関連する問題