Suponha que haja n
linhas para uma linha direta.
Sempre que um cliente liga para a linha direta, a chamada é encaminhada para uma das n
linhas. E eu quero atribuir porcentagem de chamadas para cada uma das n linhas. Suponha que haja duas linhas e uma linha seja atribuída a 60% e a outra a 40%, o número total de chamadas é 10, para que a primeira linha receba 6 chamadas e a segunda receba 4 chamadas.
Conheço a porcentagem de chamadas com antecedência para cada linha, mas o problema é que não sei o número de chamadas que seriam recebidas em um dia.
Como posso distribuir o número de chamadas sem conhecer o total de chamadas?
design
algorithms
akku
fonte
fonte
Respostas:
Faça alguma contabilidade sobre as chamadas já realizadas e calcule sua distribuição nas n linhas. Isso fornece n valores percentuais (sua distribuição já alcançada), que podem ser comparados às n porcentagens que você deseja atingir. Sempre que uma nova chamada chegar, atribua-a à linha com o desvio mais alto do valor desejado (observe que, desde que você não atinja exatamente a distribuição especificada, sempre haverá uma linha com poucas ligações até o momento, quando comparado à distribuição de destino).
Por exemplo: depois de atribuir a primeira chamada à linha 1:
...
EDIT: Essa abordagem pode ser melhorada ainda mais se não for usada a diferença absoluta, mas escolhendo a linha que minimiza a soma dos quadrados de todos os desvios. Isso também daria um resultado melhor caso você atingisse exatamente os valores desejados.
fonte
fonte
Concordo com a solução da @ DocBrown. Colocando-o em um formulário de algoritmo:
O delta é determinado pela porcentagem real menos a porcentagem esperada de uma linha. Dessa forma, aqueles com o maior delta negativo são os que mais necessitam de uma chamada para estar em conformidade com a porcentagem esperada.
Por exemplo, no caso em que as porcentagens esperadas para as linhas 1 e 2 são respectivamente 60% e 40% e as porcentagens reais são 50% e 50%, você veria a linha de pedidos 1 seguida pela linha 2, desde -10 % é inferior a 10%. Portanto, a linha 1 seria atendida.
Eu recomendo o uso da classificação por inserção, pois ela apresenta melhor desempenho quando a matriz já está classificada principalmente.
Além disso, como uma otimização menor, se você acompanhar o número total de chamadas até o momento, em vez de precisar calcular a porcentagem real de cada linha, poderá simplesmente calcular o número total de chamadas para essa linha menos a porcentagem esperada para essa linha. linha vezes o número total de chamadas (delta = t_i - p_i * T). Nesse caso, o delta é simplesmente o número negativo de chamadas para atingir a porcentagem esperada.
Espero que esclareça quaisquer outras dúvidas.
fonte
O(n)
é o que você pode esperar classificando uma lista já classificada com classificação por inserção eO(n)
é o que você precisa usar para encontrar o menor valor. Apenas suponho que seja resolvido.Premissas conforme o OP declarado
Design de algoritmo
Defina cada linha pelo seu%
Classifique cada linha pela sua posição, afastando-se de 0 definido como (% atual de trabalhadores -% atribuído de trabalhadores) ou por atribuição aleatória se todas as linhas = 0
Encaminhe cada chamada para a maior linha longe de 0
Exemplo: 3 linhas com% de 20, 30 e 50, respectivamente. No ponto x, no momento em que uma pessoa liga, e como cada linha está 0 longe de 0, ela é atribuída aleatoriamente - diga a linha 2, que deve conter 30% de todas as chamadas. Como a linha 2 deve conter 30% de todas as chamadas e agora retém 100% de todas as chamadas, sua posição de 0 aumenta. O próximo chamador agora seria atribuído à linha 1 ou linha 3, etc, até o equilíbrio (0) e, assim, o loop se repetirá.
fonte
Esta é uma solução ingênua e não assume nada, mas permitiria a distribuição baseada em porcentagem. Essa solução pode ser aprimorada de várias maneiras, mas essa é a essência. Não tenho certeza se é isso que você está procurando, mas daria uma verdadeira distribuição.
código psuedo ...
fonte