당신의 문제는 ""에이전트 "의 합이 정확히 이산적인 부분의 에너지를 공급하거나 각 단일 수요에 대해 아무것도 공급하지 않아야한다는 것 같지 않습니까?" 아니면 당신은 나를 이해하지 못했습니다. 그래서 해결책을 찾았 기 때문에 문제를 더 잘 설명하려고 노력할 것입니다.
내 문제에는 각 자원에 특정 자원의 예산이 있고 작업 비용을 공유 할 수있는 에이전트 세트가 있습니다. 모든 작업을 "실행"합니다. 태스크 x에 대한 에이전트의 부분 솔루션 합계는 태스크 x의 비용보다 적거나 같아야합니다. 목표는 에이전트가 지불 할 수있는 가장 가치있는 작업 세트를 찾는 것입니다.
게임 소프트웨어로 작업하고 있으므로 게임 스타일로 설명합니다. 에이전트 설정, 작업 매개 변수 비용 (t), 값 (t) 매개 변수 리소스 (a)
작업 비용 t 목표에 대한 에이전트 a의 일부인 양의 변수 y (a, t) (비 int) :
maxvalue =e= sum((a,t), value(t) * y(a,t) / cost(t) );
agentresource_max_constraint(a).. sum(t, y(a,t)) =l= resources(a);
taskcost_max_constraint.. sum(a, y(a,t)) =l= cost(t);
내가 쓴 것처럼 솔루션이 있었지만 부분 작업 솔루션을 분리하는 방법을 몰랐습니다. 하지만 지금은
이진 변수 z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
방정식 공식에서 0과 1 사이의 값이며이 제약 조건에 따라 z
1의 경우 1과 1보다 작은 경우 모두 0입니다.이 taskcost_bin_constraint
목표는 다음과 같습니다.
maxvalue =e= sum(t, value(t) * z(t));
나는 궁금해했지만 이것이 효과가 있고 과제를 완전히 작성하기 위해 제약 조건에서 더 나은 솔루션을 제공합니다.
어쩌면 그런 제약을 추가 할 수 있습니까? 0과 1 사이의 값을 가진 표현식으로 표현하여 요구를 정확하게 채우는 구속 조건