제가 VRP문제를 푸는데 어디서 잘못된건지 목적함수값이 이상하게 나옵니다. -#INF라고 나오는데요 제가 Multi-trip 문제에 Soft Time Windows를 접목하였습니다. 시간제약위반에 대한 비용이 0이 아닌수가 들어가면 무조건 목적함수가 -#INF라고 나오는데 어디가 잘못된걸까요??
몇일동안 보고 있는데 어디가 잘못됐는지 알수가 없습니다. 도와주세요. 부탁드립니다.
soft.txt
댓글 4
임승빈2006-11-21
안녕하세요.
답변이 늦어져서 죄송합니다.
전반적인 코드와 제약 상황을 분석하느라 시간이 좀 걸렸습니다.
여러가지 문제점이 있었는데 중요한 몇가지만 말씀드리겠습니다.
우선 tardiness가 상당히 모호합니다.
차량에 부과되는 이 코스트는, 현 제약에서는 값을 가질 수 없습니다.
즉 tardiness에 대한 명확한 정의가 필요한 듯 싶습니다.
변수 tard가 값을 가질 수 없기 때문에 코스트 역시 부과될 수 없습니다.
따라서, -#INF형태의 최종 코스트가 발생하게 됩니다.
실제로 차량생성부분에 tardiness에 대한 코스트 부분을 제거하게 되면 -#INF 값을 갖지 않는 것을 알 수 있습니다.
해결방법으로는 tardiness는 시간을 나타내는 dimension이므로
기존에 IloDemension1 tardiness를 IloDemension2 tardiness로
변형해 주시면 됩니다.
위 수정사항은 첨부된 소스코드에 포함되어 있습니다.
또 말씀드릴 것은 방문지(visit)를 꼭 mdl(IloModel)에 추가하셔야 합니다.
소스를 보니 방문지를 생성하시고 mdl에 추가를 안하셨습니다.
방문지와 차량(vehicle)은 반드시 mdl에 추가해 주세요.
또한 방문지 setPeneltyCost를 잘 설정해 주셔야 합니다.
끝으로, env 모델, 즉 env로 생성하신 IloModel이 2가지 인 것을 확인했는데요(tspModel, mdl),
tspModel에서 생성하신 IloVisitArray 객체를 다시 mdl에서 사용하시는 것은 좋지 않습니다.
tspModel에서 생성하신 방문지들을 잘못 생성하시게 되면, tspModel에서 생성된 방문지들은 mdl에서 적용시킨 제약에 영향을 받지 않을 수 있습니다.
첨부된 파일에 새로운 함수를 만들어서 대처해 놓았습니다.
그 밖에 여러가지 수정사항이 있습니다.
첨부한 소스코드를 참고하시기 바랍니다.
감사합니다.
김미이2006-11-22
상세한 답변 너무 감사드립니다 제가 너무 많은 시간을 빼앗은건 아닌지 모르겠네요 너무 죄송하고 고맙습니다