요즘 goal을 가지고 다양한 실험을 하고 있는데 한가지 궁금한 점이 있어서 질문을 띄웁니다.
저는 지금 제가 사용한 goal을 가지고 초기해를 구한다음 인위적으로 사용자가 정의 한 어떤 조건에 만족하는 activity의 정보를 바꿀 수 있는 방법이 있는지 알고 싶습니다. 다시 말하면 초기해를 구한 다음(모든 activity가 bound 되어 있는데) 그 중 하나의 activity정보를 수정하고 싶은데 가능한가요?
그럼 수고하세요.
댓글 4
장용성2002-04-08
:저는 지금 제가 사용한 goal을 가지고 초기해를 구한다음 인위적으로 사용자가 정의 한 어떤 조건에 만족하는 activity의 정보를 바꿀 수 있는 방법이 있는지 알고 싶습니다. 다시 말하면 초기해를 구한 다음(모든 activity가 bound 되어 있는데) 그 중 하나의 activity정보를 수정하고 싶은데 가능한가요?
=> 초기해를 구한 후 activity정보를 수정해서 다시 탐색을 시도할 경우, model에 activity의 변경된 정보를 추가해주면 됩니다.. ex) model.add(activity.getStartVariable() < solver.getIntVar(activity.getStartVariable()).getMax());
하영훈2002-04-08
음 초기해를 구한뒤 특정 activity의 정보를 바꾼다는 의미는 이미 모델링에서 정의되어 있는 선후행 제약이라든가 resource제약에 관련된 정보에도 바꾼 activity의 정보가 영향을 미치도록 해야 하는데 만약 초기해에서 bound된 act1의 시작일이 3이였는데 act1의 시작일을 5로 바꾸고싶다면 어떻게 해야 하나요? 또한 여러 activity간 선후행 조건에 해당하는 정보도 act1의 정보를 바꾸면서 act1에 물러 있는 다른 activity정보나 resource 정보도 알아서 수정 되어야 할텐데 act1의 정보만 바꾸면 그게 가능한가요?
장용성2002-04-09
:음 초기해를 구한뒤 특정 activity의 정보를 바꾼다는 의미는 이미 모델링에서 정의되어 있는 선후행 제약이라든가 resource제약에 관련된 정보에도 바꾼 activity의 정보가 영향을 미치도록 해야 하는데 만약 초기해에서 bound된 act1의 시작일이 3이였는데 act1의 시작일을 5로 바꾸고싶다면 어떻게 해야 하나요?
=> 간단히, model.add(activity.getStartVariable() == 5)로 하시면 되구요.. 여기서 사용되는 activity는 IloActivity형태입니다.. 모델에 추가 시키시고, solver.solve()를 실행하면 됩니다..
:또한 여러 activity간 선후행 조건에 해당하는 정보도 act1의 정보를 바꾸면서 act1에 물러 있는 다른 activity정보나 resource 정보도 알아서 수정 되어야 할텐데 act1의 정보만 바꾸면 그게 가능한가요? => 당연히, act1의 정보만 바꿔도 제약전파에 의해서 새로운 탐색을 수행하기 때문에 모든 정보들이 바뀝니다..
도움이 되셨으면 좋겠군요.. 수고하세요...
유환주2002-04-09
:하영훈님의 글입니다.
:음 초기해를 구한뒤 특정 activity의 정보를 바꾼다는 의미는 이미 모델링에서 정의되어 있는 선후행 제약이라든가 resource제약에 관련된 정보에도 바꾼 activity의 정보가 영향을 미치도록 해야 하는데 만약 초기해에서 bound된 act1의 시작일이 3이였는데 act1의 시작일을 5로 바꾸고싶다면 어떻게 해야 하나요? :또한 여러 activity간 선후행 조건에 해당하는 정보도 act1의 정보를 바꾸면서 act1에 물러 있는 다른 activity정보나 resource 정보도 알아서 수정 되어야 할텐데 act1의 정보만 바꾸면 그게 가능한가요?
문의하신 기법은 주로 Rescheduling 또는 Scheduling 된 결과를 사용자가 Editing 하거나 현장의 실적이 들어올 때 그 영향을 자동적으로 재 적용 시키는 경우에 많이 사용되는 기법과 유사한 것 같습니다. 만약 그런 경우라면 IloShedulerSolution 객체를 이용하여 결과를 저장하고, 또 필요한 경우에는 저장된 결과를 강제적으로 변경합니다. 그런 후에 기존에 저장된 결과(또는 저장 후 수정된 결과)를 참조하여 새로 스케줄링을 할 수 있습니다. 이때는 주로 저장된 결과에 비해 변경을 최소화하는 Goal을 적용하는 것이 일반적인 방법 입니다. 도움이 되시길...