Я работаю над оптимизацией заказов на работу с матрицей приоритетов.
Например; задание 8 не может быть выполнено до завершения задания 6. Если это так, моя матрица приоритетов на позиции [8,6] показывает единицу. Если нет отношения предшествования, например, для позиции [1,2], то оно показывает ноль.
В моем текущем коде я использую команду «next», чтобы перейти к следующей итерации, если матрица приоритетов показывает 1. Однако, как это запрограммировано сейчас, она просто переходит к следующему j, а я хочу, чтобы перейти к следующему «я» (следующая работа для рассмотрения). Тем не менее, i - это один цикл перед циклом if, где используется «next». Есть ли способ заставить его перейти в цикл for (i in n: jobs) вместо следующего for (j in n: jobs)?
Ниже моего текущего кода
# Initialisatie
nJobs = 10
jobDone = rep(FALSE, nJobs)
currentJob = 1;
jobDone[currentJob] = TRUE;
totalFine = 0;
finishingTime = durations[currentProject]
jobOrder = c(currentJob);
jobFines = c(totalFine);
jobIndFines = c(totalFine)
jobTimes = c(finishingTime)
jobIndTimes = c(durations[currentJob])
for(iter in 1:(nJobs-1))
{
bestFine = -1;
bestOrder = -1;
for(i in 1:nJobs)
{
for(j in 1:nJobs){
if(precedences[i,j] == 1){ next } #hoe kom ik nu naar de volgende i ipv de volgende j?
else{
if( ! jobDone[i] )
{
# If this is the first option or the cheapest option, we update the best option
if(bestOrder == -1 || ((finishingTime+durations[i])-deadlines[i])*fines[i] > bestFine)
{
bestFine = ((finishingTime+durations[i])-deadlines[i])*fines[i];
bestOrder = i;
}
}
}
}
}
# Add the best job to the order of jobs
jobDone[bestOrder] = TRUE;
jobOrder[iter+1] = bestOrder;
# Update the current order of projects
fine = ((finishingTime+durations[bestOrder])-deadlines[bestOrder])*fines[bestOrder]
jobIndFines[iter+1] = fine
if (fine>0){
totalFine = totalFine + fine;
}
jobFines[iter+1] = totalFine;
#jobIndFines[iter+1] = totalFine - jobFines[iter];
finishingTime = finishingTime + durations[bestOrder];
jobTimes[iter+1] = finishingTime
jobIndTimes[iter+1] = durations[bestOrder]
}
totalFine
finishingTime
jobOrder
jobFines
jobTimes
jobIndTimes
jobDone
jobIndFines
Большое спасибо !!