Алгоритм циклического перебора для назначения задач конкретным пользователям в зависимости от их возможностей - PullRequest
0 голосов
/ 08 марта 2019

У меня есть список пользователей, а также их объем работы, которую они могут выполнять, а также у меня есть список задач, которые необходимо назначить пользователям в соответствии с их возможностями с использованием алгоритма циклического перебора.

Для EX: -

Если пользователь 1 имеет емкость 7 задач , пользователь 2 имеет 3 задачи , пользователь 3 имеет 5 задач. и общее количество заданий равно 10, тогда оно должно быть поровну распределено между пользователями, как показано ниже.

  • пользователь 1 имеет емкость 7 задач, и назначается только 4 задачи.

  • пользователь 2 имеет 3 задания, и назначено только 3 задания.

  • пользователь 3 имеет емкость 5 задач, и назначается только 3 задачи.

Я использую приведенные ниже фрагменты кода и не уверен, является ли это идеальным решением для назначения задачи в соответствии с пропускной способностью с использованием алгоритма циклического перебора. это будет очень полезно, если некоторые из них могут помочь и оптимизировать код.

Список пользователей: -

var userList = new List<User> {
               new User { userId = "U0", TotalCap=7 } ,
               new User { userId = "U1" , TotalCap=3} ,               
               new User { userId = "U3" , TotalCap=5}                                
};

Список заданий: -

var TaskList = new List<Task> {
                    new Task { TaskId = "T1", TaskDetails="first task" } ,
                    new Task { TaskId = "T2" , TaskDetails="2nd task"} ,
                    new Task { TaskId = "T3", TaskDetails="3rd task" } ,
                    new Task { TaskId = "T4" , TaskDetails="4th task"} ,
                    new Task { TaskId = "T5", TaskDetails="5th task" } ,
                    new Task { TaskId = "T6" , TaskDetails="6th task"} ,
                    new Task { TaskId = "T7" , TaskDetails="7th task"},
                    new Task { TaskId = "T8", TaskDetails="8th task" } ,
                    new Task { TaskId = "T9", TaskDetails="9th task" } ,
                    new Task { TaskId = "T10" , TaskDetails="10th task"} ,
                    new Task { TaskId = "T11", TaskDetails="11th task" } 
                };

Логика для назначения задач пользователям по их емкости

List<taskAssignationdetails> objtaskAssignationdetails = new List<taskAssignationdetails>();
int a = 0; int x = 0;
for (int i = 0; i < TaskList.Count(); ++i)
{
for (int q = 0; q < userList.Count(); q++)
{
    taskAssignationdetails objnewTask = new taskAssignationdetails();
    int count = 0;
    var ss = objtaskAssignationdetails.Where(p => p.userId == userList[q].userId).ToList().OrderByDescending(s => s.TotalCap).FirstOrDefault();
    if (ss == null) { count = 0; } else { count = ss.TotalCap; }

    if (userList[q].TotalCap > count)
    {
        if (i <= TaskList.Count())
        {
            objnewTask.AllDetails = "UserID:- " + userList[q].userId + "| UserCap:- " + userList[q].TotalCap + " |CurrentCap:-" + Convert.ToInt32(a + 1) +
                                        "| TaskID:- " + TaskList[x].TaskId + " |TaskDetails:-" + TaskList[x].TaskDetails;
            objnewTask.Details = TaskList[x].TaskId + "_" + TaskList[x].TaskDetails;
            objnewTask.TaskId = TaskList[x].TaskId;
            objnewTask.TotalCap = Convert.ToInt32(a + 1);
            objnewTask.userId = userList[q].userId;
            objnewTask.userCap = userList[q].TotalCap;
            objtaskAssignationdetails.Add(objnewTask);
            x++;
        }
    }
}
a++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...