Modell for fagdager

På arbeidsplassen min arrangerer en fagdag hver måned. En god fagdag inneholder et emne som mange personer ønsker å lære mer om (Open Banking API, Kubernetes, React, Maskinlæring, etc). Samtidig er det viktig at noen har kunnskap om emnet og et ønske om å undervise i det. Bildet nedenfor er fra en fagdag der jeg snakket om maskinlæring.

I denne artikkelen presenterer jeg en optimeringsmodell som vi brukte som utgangspunkt for å planlegge fagdager i fremtiden. Vi kan konstruere en god plan ved å formulere problemet som et optimeringsproblem (et såkalt Integer Program). Modellen gjør to ting:

  • Den velger hvilke emner som det blir fagdager av, og hvilke emner det ikke var nok interesse for.
  • Den utnevner personer til å arrangere de ulike fagdagene (undervise i de ulike emnene).

Vi indekserer relevante emner for fagdager med \(i\) og personer med \(j\). Basert på en spørreundersøkelse kan vi avdekke interessen som person \(j\) har for å delta på en fagdag innenfor emne \(i\). Vi kaller dette for \(d_{ij}\). På samme måte bruker vi en spørreundersøkelse til å avdekke \(a_{ij}\), som er interessen som person \(j\) har for å arrangere en fagdag innenfor emne \(i\).

Krav til planen

For å lage en plan trenger vi en målfunksjon å maksimere, samt noen betingelser.

  • Vi definerer \(y_i \in \{ 0, 1 \}\) til å være lik \(1\) hvis emne \(i\) er valgt (mer om dette nedenfor). Hvis et emne er valgt slik at \(y_i = 1\), er gevinsten lik den totale interessen for å delta på en fagdag om emne \(i\). Vi maksimerer derfor følgende:

    \begin{align*} \sum_i y_j \sum_j d_{ij} \end{align*}

  • Definer \(x_{ij} \in \{ 0, 1 \}\) slik at \(x_{ij} = 1\) hvis person \(j\) skal arrangere fagdag i emne \(i\). Om et emne velges skal \(p=2\) personer avholde fagdagen. Her definerer vi også \(y_i \in \{ 0, 1 \}\) til å være lik \(1\) hvis emne \(i\) er valgt.

    \begin{align*} \sum_j x_{ij} = p y_i \quad \forall \, i \end{align*}

  • Hver person skal maksimalt avholde \(k=2\) fagdager:

    \begin{align*} \sum_i x_{ij} \leq k \quad \forall \, j \end{align*}

  • La \(a_{ij} \in \{ 0, 1 \}\) være interessen som person \(j\) har for å arrangere fagdag innenfor emne \(i\). Vi ønsker at alle de \(p\) personene som avholder fagdagen skal være interesserte i emnet:

\begin{align*} \sum_j a_{ij} x_{ij} = p y_i \quad \forall \, i \end{align*}

Modell

Den komplette modellen blir:

\begin{align*} & \text{maximize} && \sum_i y_j \sum_j d_{ij} \\ & \text{subject to} && \sum_j x_{ij} = p y_i && \forall \, i \\ & && \sum_i x_{ij} \leq k && \forall \, j \\ & && \sum_j a_{ij} x_{ij} = p y_i && \forall \, i \\ & && y_i, x_{ij} \in \{0, 1\} \end{align*}

I andre situasjoner trenger man litt andre betingelser. Å modellere noe som dette blir ofte en iterativ prosess, men modellen ovenfor er et bra utgangspunkt.