2017-09-12 2 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에 대해 예외가 있습니다. 모든 루프는 가장 바깥 쪽에서 떨어져서 일찍 종료되므로 tao에있는 PERIODS으로 이동하고 모두 다시 시작합니다.

counter 변수와 함께 사용하려고했으나 실제로 제대로 작동하지 않았습니다.

I은 ​​현재 예를 들어이 출력 (추출물)이 : 반복 종료한다 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 체크 치에 유지한다.

아무도 나에게이 문제를 해결하는 방법을 알려줄 수 있습니까? 함수에 루프를 두는 것에 대해 읽었으므로 다중 루프를 벗어날 수는 있지만 여기서 여러 가지 방법으로 종료하는 방법을 알 수는 없습니다.

감사합니다!

+0

를 들어, 여러 루프의 탈옥 수는 부울 변수 terminateLoop 있습니다. 이 변수는 기본값을 false로 설정하여 루프를 종료하고 변수를 true로 설정하고 루프에서 빠져 나오기를 원할 때 사용합니다. 모든 중첩 된 루프의 시작 부분에 if 조건을 사용하여 부울이 true로 설정되었는지 확인하고, 그렇다면 해제합니다. – abinmorth

+0

안녕하세요 @abinmorth. 귀하의 의견을 보내 주셔서 감사합니다. 그게 나를 고칠 수있었습니다. :) 좋은 생각. – Frederic

답변

0

파이썬에는 여러 루프를 동시에 분리 할 수있는 컨트롤이 없습니다.

당신은 플래그를 설정하고 추가 정보를 Link

+0

Dalon에 감사드립니다! 많이 도와 줬어! – Frederic

관련 문제