Guida sull'algoritmo di pianificazione delle risorse VBA di Excel?

1

Questo è stato pubblicato originariamente su StackOverflow sebbene suggerito di postare qui.

Sto cercando di creare una soluzione VBA di Excel che creerà una rotazione / pianificazione che alloca il personale per servire gli utenti utilizzando un algoritmo. Credo che esistano già nomi esistenti per questo tipo di problemi / algoritmi ma non sono del tutto sicuro di cosa riferirsi ad esso.

Ecco il mio scenario:

Un collega mi ha contattato con un problema di pianificazione dello staff rispetto alle visite richieste. Attualmente questo è un processo manuale fatto ogni settimana ed è laborioso. I set di dati sono piccoli, in media ci sarebbero 20 utenti del servizio che richiedono ciascuno 2 visite al giorno con 5 membri dello staff disponibili ogni giorno.

Ho un foglio di lavoro che contiene l'elenco del personale disponibile per la settimana successiva. Ogni riga di dati contiene il loro nome, genere, livello di competenza, codice postale di casa, giorno di lavoro, ora di inizio e ora di fine. Un membro del personale può essere elencato più di una volta nello stesso giorno in cui potrebbe essere disponibile per ore al mattino e anche di sera.

Un altro foglio di lavoro contiene l'elenco degli utenti del servizio e le visite richieste per la settimana successiva. Ogni riga di dati contiene il nome, il codice postale, il giorno di visita, l'orario di visita, la durata della visita, il genere richiesto (cioè deve essere visto da un maschio / femmina), il livello di abilità richiesto (cioè qualsiasi, certificato) e il numero di personale richiesto per quella visita (cioè 1 o 2). Anche in questo caso un utente di servizio può apparire più di una volta nello stesso giorno in cui potrebbe richiedere più visite in momenti diversi della giornata (cioè mattina e sera)

Ho già creato alcune funzioni VBA per gestire la gestione dei codici postali e ottenere le coordinate di latitudine / longitudine insieme a una funzione per calcolare la distanza tra due punti in linea d'aria. Allo stato attuale i valori distinti dei codici postali con le loro coordinate sono memorizzati su un foglio di supporto per il riferimento di VBA.

Quello che cerco davvero è una guida su come persino la creazione di una procedura / algoritmo che produrrà una rotazione / pianificazione suggerita, questa potrebbe essere una semplice tabella con accoppiamenti tra il personale e le visite. Il processo deve sempre effettuare abbinamenti adeguati basati su:

  • Livello di abilità richiesto
  • Sesso richiesto
  • Disponibilità dello staff

Meno importante è che le partite tengano in considerazione la distanza necessaria per viaggiare tra una visita e l'altra. Credo che questo sia chiamato Algoritmo Genetico?

Potrebbero esserci casi in cui ci sono troppi utenti del servizio per il personale disponibile e viceversa. L'utilizzo di tutto il personale non è necessario a condizione che tutte le visite siano gestite, se tutte le visite non possono essere abbinate a causa della mancanza di disponibilità del personale, allora questo deve essere elencato come non soddisfatto.

Posso utilizzare SQL Server se necessario, ma alla fine la soluzione deve essere presentata in Excel all'utente finale, in quanto questo è ciò che è più familiare.

Penso che la procedura / processo debba andare in questo modo:

  1. Per ogni giorno, ordina le visite per orario di inizio
  2. Per ogni visita, determinare quali membri dello staff incontrano il genere e requisito di livello di abilità ed è disponibile in quel giorno
  3. Per ogni membro del personale sopra determinato, sono disponibili a il tempo richiesto?
  4. Per ogni membro dello staff che è disponibile calcola la distanza da la loro posizione attuale dove devono essere
  5. Classifica in ordine di preferenza in base alla distanza richiesta per viaggiare
  6. Una volta che questo è stato fatto per ogni giorno, trovare un suggerimento assegnazione del personale alle visite utilizzando una sorta di metodo di punteggio

Non sono un esperto VBA e gestisco SQL Server come lavoro giornaliero, ma sono disposto a provare a trovare una soluzione adeguata, ho solo bisogno di alcune indicazioni su come iniziare al meglio.

    
posta mheptinstall 12.12.2013 - 15:00
fonte

1 risposta

1

Ho una certa esperienza con il tipo di problema di pianificazione che si presenta e lo stack tecnico che si sta utilizzando, quindi posso parlare dall'autorità e dire questo è un problema di database e appartiene a SQL Server, non a Excel ! .

Supponendo che si tratti di visite regolari già programmate e che è necessario solo assegnare il personale alle varie attività (e il personale deve tornare al proprio ufficio domestico tra una visita e l'altra), si consiglia il seguente processo:

  1. Migrazione dell'elenco del personale in una struttura di tabella normalizzata, con tabelle Employee e Availability separate.
  2. Fai lo stesso con gli utenti del servizio, con Customer e Visit tabelle. (Come si popolano le visite è una domanda diversa.)
  3. Crea una tabella Assignment distinta, che rispecchia i compiti che dai al tuo staff. Questa tabella includerà sia i turni effettivi, sia gli incarichi di non visita necessari (come "guidare attraverso la città"). Il tuo programma genererà suggerimenti, ma dovrai consentire a un utente di modificare l'elenco.
  4. Genera un punteggio di "complessità" per ogni visit , aggiungendo tutti i requisiti necessari insieme. ("Deve essere visto da due donne certificate per 3 ore" può essere sette punti, per esempio.)
  5. Per il più alto valore di complessità, effettua tutti i compiti per il tuo periodo di tempo per tutte le visite su quel compito. Fai una riga alla volta, con tie-break in base alla lunghezza della visita e all'ora di inizio. Seleziona lo staff che soddisfa le esigenze in base alla disponibilità e quindi un certo valore di ordinamento ragionevole (anzianità o "tempi completati".)
  6. Contrassegna una voce del tempo di viaggio per il personale assegnato tra la sede del cliente e la sede centrale del dipendente.
  7. Ripeti dal n. 5 in alto, fino a quando tutte le visite sono soddisfatte.
  8. Ritorna in Excel due elenchi, uno di Customer Visits che indica il / i dipendente / i assegnato / i e uno di Employee assignments che prende in considerazione i tempi di assegnazione di ciascun dipendente. Includi qualsiasi evidenziazione in entrambi gli elementi non assegnati.

Esistono sistemi professionali per la gestione della forza lavoro che faranno la maggior parte di questo per voi, ma che richiedono diverse decine di migliaia di dollari per l'acquisto e presupponiamo che un dipendente svolga gran parte del lavoro manualmente. Se lo facessero in Excel a mano, l'automazione qualsiasi sarà di aiuto e potrai migliorare man mano che prosegui.

(E dare un'occhiata a .NET o Access per sostituire Excel in alcuni casi: i dati di ritorno su tondo da Excel a SQL Server sono molto più difficili di un semplice modulo per una tabella di server SQL in Access.)

    
risposta data 14.12.2013 - 19:46
fonte

Leggi altre domande sui tag