Prøv gratis

Små problemer kan løses gratis. Du trenger ikke å registrere en bruker. Det er to måter å bruke Alloker på:

  • Excel-opplasting er perfekt for ikke-tekniske brukere som foretrekker å jobbe i Microsoft Excel, Google Sheets, LibreOffice eller andre regneark-programmer. Så lenge du laster opp en .xlsx fil i riktig format så vil algoritmene fungere. Prøv selv med f.eks. algoritmen Utsatt aksept.
  • APIet egner seg for tekniske brukere som foretrekker JSON-formatet. Med APIet kan man koble seg på via annen programvare og automatisere beregninger (f.eks. å kjøre automatisk hver mandag kl 08:00). Prøv selv med f.eks. algoritmen Utsatt aksept.

Når beregningen er gjort får du resultatet tilbake. Du kan anonymisere data slik at personsensitive opplysninger aldri forlater ditt system, men alle data slettes uansett etter én time.

Hvordan bruke Excel-opplasting?

  • Velg en algoritme og trykk på “Excel-opplasting”
  • Last ned og ta en kikk på input-eksemplene
  • Lag et regneark på identisk format som input-eksemplene
  • Last opp ditt regneark, vent i noen sekunder og last ned resultatet

Det er viktig at strukturen i ditt regneark er identisk med eksemplene. Det eneste som skjer automatisk er at ekstra mellomrom før og etter tekst fjernes, f.eks. vil " Ola Nordmann " tolkes som "Ola Nordmann". Men dersom du skriver "Ola Nordmann" i en celle og "ola nordmann" i en annen, så vil dette tolkes som to ulike personer.

Du kan teste Excel-opplasting på f.eks. algoritmen Utsatt aksept.

Hva er et API?

Et API (Application Programming Interface) lar datamaskiner snakke sammen. APIet lar deg løse store problemer, automatisere og integrere med andre IT-systemer.

Hvordan bruke APIet fra nettsiden

Du kan bruke APIet direkte fra nettsiden om du ønsker:

  • Velg en algoritme og trykk på “Prøv APIet”
  • Velg et eksempel fra “examples” i JSON strukturen
  • Send denne inn ved hjelp av skjemaet, formatet må være {"data": {...}, ...}
  • Når du sender inn data starter en “Task”, gå til “Task URL”
  • Hent resultatet

Hvordan bruke APIet med Python

Alle moderne programmeringsspråk gjør det enkelt å jobbe med APIet. Her er et eksempel i språket Python, som viser hvordan man kan kalle APIet både med og uten API-nøkkel.

import requests
import time
import json

# Dersom du har en API nøkkel, legg den inn her for å bruke den
API_KEY = ""
headers = {"X-API-Key": API_KEY} if API_KEY else None

# Data du vil sende inn
data = {
    "data": {
        "persons": [
            {"id": "Ola", "preferences": ["B", "C", "D", "A"]},
            {"id": "Kari", "preferences": ["D", "C", "B", "A"]},
            {"id": "Petter", "preferences": ["D", "A", "B", "C"]},
            {"id": "Lise", "preferences": ["C", "D", "B", "A"]},
        ],
        "groups": [
            {"id": "A", "capacity": 1, "priorities": ["Petter", "Lise", "Kari", "Ola"]},
            {"id": "B", "capacity": 1, "priorities": ["Petter", "Kari", "Lise", "Ola"]},
            {"id": "C", "capacity": 1, "priorities": ["Ola", "Petter", "Kari", "Lise"]},
            {"id": "D", "capacity": 1, "priorities": ["Petter", "Kari", "Ola", "Lise"]},
        ],
    }
}

# Send inn problemet med data
response = requests.post(
    "https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks",
    json=data,
    headers=headers,
)
response.raise_for_status()

# Lagre task ID slik at vi kan hente resultatet
task_id = response.json()["task_id"]
print(f"Opprettet oppgave med ID: {task_id}")

for attempt in range(10):
    # Prøv å hent ut svaret. Hvis ikke, vent litt
    result_response = requests.get(
        f"https://alloker.no/api/v1/tasks/{task_id}", headers=headers
    )
    result_response.raise_for_status()
    response_json = result_response.json()
    if response_json["result"]:
        break

    time.sleep(2**attempt)

assert response_json["task"]["status"] == "SUCCESS"
print("Resultat:")
print(json.dumps(response_json, indent=2))

Hvordan bruke APIet fra terminalen

Fra terminalen kan du bruke verktøy som curl (eller wget) til å kalle APIet. Dersom du har en fil data.json med input-data og en fil api_key.txt med din API-nøkkel, så kan du kalle APIet slik:

$ curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $(cat api_key.txt)" \
  -d @data.json

Du vil få et svar som ligner på dette:

{"task_url":"https://alloker.no/api/v1/tasks/f5181f12-d26d-4236-8822-fdd16de53eaa",
 "task_id":"f5181f12-d26d-4236-8822-fdd16de53eaa"}

Du kan hente resultatet med en GET request:

$ curl -X GET https://alloker.no/api/v1/tasks/f5181f12-d26d-4236-8822-fdd16de53eaa \
       -H "Content-Type: application/json" \
       -H "X-API-Key: $(cat api_key.txt)"

Dersom du har jq installert (et verktøy for å jobbe med JSON), kan du automatisere hele prosessen:

# Send inn oppgave og lagre task ID
curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $(cat api_key.txt)" \
  -d @data.json

TASK_ID=$(curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $(cat api_key.txt)" \
  -d @data.json | jq -r '.taskId')

# Vent litt for å være sikker å at beregningen er ferdig
sleep 2

# Hent resultatet
curl -X GET https://alloker.no/api/v1/tasks/${TASK_ID} \
     -H "Content-Type: application/json" \
     -H "X-API-Key: $(cat api_key.txt)" | jq '.'
{
  "task": {
    "id": "f5181f12-d26d-4236-8822-fdd16de53eaa",
    "status": "SUCCESS",
    "algorithm": "top-trading-cycles",
    "submitted": "2025-11-29T12:06:33.835742Z",
    "started": "2025-11-29T12:06:33.874989Z",
    "finished": "2025-11-29T12:06:33.888530Z",
    "submittedBy": "test",
    "errorMessage": null,
    "errorType": null
  },
  "result": {
    "Kari": "C",
    "Lise": "A",
    "Ola": "B",
    "Petter": "D"
  }
}

Anonymisering

Vår policy er å lagre minst mulig data. Input-data og det tilhørende resultatet lagres maksimalt i én time og slettes deretter fra serveren. Grunnen til at det lagres i én time er for å gi deg tid til å hente resultatene.

Selv om IT-sikkerhet er en prioritet, så er sannheten at alle IT-systemer kan kompromitteres: banker, pasientsystemer og kjernekraftverk har alle blitt hacket. Heldigvis finnes det en enkel løsning: dersom du har bekymringer rundt personvern, så anbefales det å konvertere navn til heltall.

  • “Ola Nordmann” => 0
  • “Kari Nordmann” => 1
  • “Jens Nordmann” => 2

Du kan eventuelt konvertere til unike tilfeldige tall, eller til UUIDer. Uansett vil det være umulig for utenforstående å vite hva slags problem du bruker APIet til å løse. Da trenger du ikke å stole på IT-sikkerheten til denne tjenesten for å bruke den.

I regneark kan du bruke VLOOKUP-funksjonen for å konvertere mellom navn og tall.

Nedenfor er en Python-kodesnutt som viser hvordan konvertering kan gjøres programmatisk.

class Anonymizer:
    """Map data to integers 0, 1, 2, 3, ... and back."""

    def __init__(self):
        self._map: dict = {}
        self._reverse_map: dict = {}
        self._idx: int = 0

    def map(self, value) -> int:
        if value not in self._map:
            self._map[value] = self._idx
            self._reverse_map[self._idx] = value
            self._idx += 1
        return self._map[value]

    def reverse_map(self, index: int):
        return self._reverse_map[index]

anonymizer = Anonymizer()
names = ["full_name_A", "full_name_B", "full_name_C", "full_name_A"]
unique_ids = [anonymizer.map(name) for name in names]  # [0, 1, 2, 0]
names_again = [anonymizer.reverse_map(_id) for _id in unique_ids]
assert names == names_again