任务再分配算法

2024-09-27 07:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,一个包含要分发的任务(任务id、当前受让人id、进行中的天数、自上次更新以来的天数),另一个包含受让人(受让人id、当前任务量)

import pandas as pd
import numpy as np
np.random.seed(0)

tasks = pd.DataFrame()

tasks['task_id'] = np.arange(1, 101)
tasks['task_id'] = tasks['task_id'].astype('object')

tasks['assignee_id'] = np.random.randint(low=1, high=11, size=100)
tasks['assignee_id'] = tasks['assignee_id'].astype('object')

tasks['days_in_prog'] = np.random.randint(low=11, high=16, size=100)
tasks['days_after_upd'] = np.random.randint(low=6, high=11, size=100)

tasks = tasks.sort_values(['days_in_prog', 'days_after_upd'], ascending=False).reset_index(drop=True)

tasks.head(10)

输出:

    task_id assignee_id days_in_prog days_after_upd
0   28  4   15  10
1   59  5   15  10
2   61  9   15  10
3   64  8   15  9
4   90  2   15  9
5   97  2   15  9
6   21  6   15  8
7   57  5   15  8
8   72  4   15  7
9   78  5   15  7
assignees = pd.DataFrame()

assignees['assignee_id'] = np.arange(1, 11)
assignees['assignee_id'] = assignees['assignee_id'].astype('object')

assignees['tasks'] = np.random.randint(low=5, high=16, size=10)

assignees = assignees.sort_values('tasks').reset_index(drop=True)

assignees

输出:

    assignee_id tasks
0   4   5
1   7   5
2   2   9
3   5   9
4   10  9
5   9   11
6   3   12
7   1   13
8   6   14
9   8   15

现在,我正在寻找一种方法,在几乎没有条件的情况下,将任务平均分配给受让人:

  1. 当前受让人!=新受让人
  2. 从进行中时间较长的任务开始
  3. 从任务较少的受让人开始

我从合并帧和创建函数开始:

df = tasks.merge(assignees, on='assignee_id')

def new_assignee_func(row):
    if row

df['new_assignee'] = df.apply(new_assignee_func, axis=1)

但我找不到正确的算法


Tags: idtasksizenprandomdayslowtasks

热门问题