2012-02-09 2 views
1

GAMS 포함 파일에 푸시 될 Ruby에서 루프를 생성하는 데 문제가 있습니다. 모든 i와 j, i에 대해 c (i, j) 벡터의 각 튜플을 표시해야합니다. 이자형.세 엔티티에 대한 알고리즘 반복하기

Parameter c(i,j)/
c('i1','j1')=[value]; 
c('i1','j2')=[value]; 
. 
. 
. 
c('iI','jJ')=[value]; 
/

문제는 내가 창고와 클라이언트 사이의 각각의 거리를 식별하는 데 어려움을 겪고 있도록 데이터를 가져 오기 위해 세 기관이 있다는 것을입니다. 이것은 지금까지의 루프입니다 :

printf(f, "Parameter c(i,j)/\n") 
@warehouses.each { |wh| printf(f, "c('i" + wh.id.to_s + "',") + 
@clients.each { |cl| printf(f, "'j" + cl.id.to_s + "')=") + 
@transquans.distance.to_s(@warehouses, @clients) + "; \n" 
} 
} 

그 뒤에있는 구조는 here입니다.

반환되는 오류 메시지는 다음과 같습니다. "정의되지 않은 메서드`distance for nil : NilClass".

+0

이것은 하나의 루프에 대해'@ transquans'가'nil'임을 의미합니다. 어디에서 어떻게 설정합니까? – ksol

+0

매뉴얼을 너무 많이 변경하지 않고도 스캐 폴딩을 통해 모델을 만들었습니다. Transquans는 거리 및 수위에 대한 정수 값을 사용하여 응용 프로그램에서 사용자가 수동으로 설정할 수 있습니다. – Mariushi

답변

0

이제 해결되었습니다!

printf(f, "Parameter c(i,j)/\n") 
@warehouses.each do |wh| 
    @clients.each do |cl| 
    transquan = Transquan.where(:warehouse_id => wh.id, :client_id => cl.id).first 
    if transquan.nil? 
    else 
     printf(f, "c('i" + wh.id.to_s + "' , 'j" + cl.id.to_s + "')=" + transquan.distance.to_s + ";\n") 
    end 
    end 
end