https://github.com/osryde/move-blocks
Project for the Declarative Programming Course at the University of Parma
https://github.com/osryde/move-blocks
answer-set-programming
Last synced: 11 months ago
JSON representation
Project for the Declarative Programming Course at the University of Parma
- Host: GitHub
- URL: https://github.com/osryde/move-blocks
- Owner: osryde
- License: mit
- Created: 2025-02-14T23:28:28.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-02-14T23:43:56.000Z (12 months ago)
- Last Synced: 2025-02-15T00:26:18.980Z (12 months ago)
- Topics: answer-set-programming
- Language: Classic ASP
- Homepage: https://corsi.unipr.it/it/ugov/degreecourse/259949
- Size: 0 Bytes
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Roblocks
In una stanza di dimensioni `m × n` ci sono degli scatoloni `b₁, ..., bₖ`. Gli scatoloni sono tutti quadrati ma hanno dimensioni del lato diversa (intera) `s₁, ..., sₖ`. Sono note le posizioni dei vertici più in basso e a sinistra delle scatole. Il magazziniere ha a disposizione la mossa `move(sᵢ, d)` dove `d` denota la direzione (`n`, `s`, `w`, `o`).
Gli spostamenti sono unitari, ma è possibile **solo spingere**, non tirare. Dunque, se un blocco finisce nel bordo destro o sinistro, non potrà più essere spostato orizzontalmente. Una mossa non si può fare se la posizione di arrivo della mossa stessa è già occupata.
L'obiettivo è quello di ammassare gli scatoloni in basso partendo dall'angolo a sinistra. Se lo spazio nella base non fosse sufficiente, si continua ad inserire via via più in alto (stile tetris). In tal caso, si vuole **minimizzare la massima altezza utilizzata** (con i tipi di blocchi del disegno sotto, se ce ne fossero tanti, sarebbe meglio mettere un blocco piccolo sopra uno piccolo che sopra uno grosso).
Per ogni istanza affronteremo due problemi:
1. Prima si trova una sistemazione ottima indipendentemente dal fatto che si possa raggiungere con le mosse `move` descritte (ignorando quindi la pianificazione).
2. Poi trovate un piano (sequenza di mosse) che **minimizza l'altezza**. Per farlo potreste utilizzare il bound ottenuto al punto precedente.
Ecco un possibile input, la sua visualizzazione e un possibile output:
- `m = 5`, `n = 6`
- Posizioni per le scatole di dimensione 1: `(2, 1)`, `(2, 4)`
- Posizione per la scatola di dimensione 2: `(2, 3)`

Obiettivi:
1. Scrivere un programma ASP che modella e risolve il problema.
2. Prepara 100 casi test di benchmark con dimensioni crescenti di blocchi e dimensioni. Cerca di creare degli scenari ragionevoli.
3. Lanciare il programma ASP su tutte le istanze. Prova diverse strategie di ricerca. Usa un timeout di 5 minuti (es., --time-limit in clingo) per ciascun test.
4. Scegli una configurazione che richiede un paio di minuti per trovare la soluzione. Prova diverse configurazioni del solver. Scegli la configurazione migliore per risolvere le istanze più difficili e documenta il miglioramento.
5. Scrivere un report di 6-10 pagine che descrive i modelli, le scelte implementative fatte, i risultati e i tempi ottenuti. Prepara programmi, dataset e report in un file zip.