---
# System prepended metadata

title: Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 8)

---

# Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 8)

### 13/5/2021 & 20/5/2021


:::danger
Η συγκεκριμένη σελίδα μπορεί να χρησιμοποιηθεί για ερωτήσεις στην ώρα του μαθήματος.
:::


## Περιεχόμενο μαθήματος

Δηλωτικός προγραμματισμός - Κλήση επιλυτών για επίλυση "δύσκολων" προβλημάτων.

* [SWI-Prolog CLPFD](https://www.swi-prolog.org/man/clpfd.html)
* [ORTools by Google](https://developers.google.com/optimization)

## Πρόγραμμα μαθήματος


| Ώρα | Θέμα |
| --- | ---- |
|10:10-10:20| Η βιβλιοθήκη [CLPFD](https://www.swi-prolog.org/man/clpfd.html) της SWI-Prolog |
|10:20-10:30| Απλά παραδείγματα χρήσης της βιβλιοθήκης CLPFD  |
|10:30-10:40| [Άσκηση 1](#Άσκηση-1) Χρωματισμός χάρτη με τη βιβλιοθήκη CLPFD της SWI-Prolog |
|10:40-11:00| Επίλυση προβλημάτων κατασκευάζοντας μοντέλα και καλώντας επιλυτές μέσω του λογισμικού OR-Tools |
|11:00-11:10| Διάλειμμα |
|10:10-11:20| Ο επιλυτής προγραμματισμού με περιορισμούς του OR-Tools |
|11:20-11:30| [Άσκηση 2](#Άσκηση-2) Επίλυση κρυπταριθμητικού παζλ με τον CP solver του OR-Tools |
|11:40-11:50| Σύντομη αναφορά στον επιλυτή CP-SAT  |
|11:40-12:00| [Άσκηση 3](#Άσκηση-3) Επίλυση του προβλήματος των N-βασιλισσών με τον CP solver και με τον CP-SAT solver του OR-Tools|
|>12:00| [Άσκηση 4](#Άσκηση-4) Διαχωρισμός ειδών για μεταφορά |


### Άσκηση 1 

**Χρωματισμός χάρτη με τη βιβλιοθήκη CLPFD της SWI-Prolog**

Δίνεται ένας χάρτης και ζητείται ο χρωματισμός του με 4 ή αν γίνεται με λιγότερα χρώματα υπό τον περιορισμό ότι περιοχές που συνορεύουν δεν πρέπει να χρωματίζονται το ίδιο χρώμα. Δείτε τον κώδικα που δίνεται για τον χρωματισμό της Αυστραλίας. 

[colouring_australia.pl](https://github.com/chgogos/dituoi_agp/blob/main/pl/prolog/clpfd/colouring_australia.pl)

Τροποποιήστε τον κώδικα έτσι ώστε να επιτυγχάνει χρωματισμό του ακόλουθου χάρτη. Χρησιμοποιήστε τον κώδικα https://pastebin.com/37aCpZP9.

![](https://www.mathsisfun.com/activity/images/coloring-europe-blank.svg)
Πηγή: www.mathsisfun.com


Δείτε και το [The Power of Prolog: Map Coloring with Prolog](https://www.youtube.com/watch?v=6XD7vBbywMc)

### Άσκηση 2 

**Επίλυση κρυπταριθμητικού παζλ με τον CP solver του OR-Tools**

Εγκαταστήστε το OR-Tools στην Python με την ακόλουθη εντολή.

```
$ pip install ortools
```

Δείτε τον ακόλουθο κώδικα για την επίλυση ενός κρυπταριθμητικού παζλ με τοn CP-Solver του OR-Tools. 

[cryptarithmetic.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/tools/ortools/cryptarithmetic.ipynb)

Τροποποιήστε τον κώδικα έτσι ώστε να επιλύει το ακόλουθο κρυπταριθμητικό παζλ.

```
   SEND
+  MORE
= MONEY
```

### Άσκηση 3 

**Επίλυση του προβλήματος των N-βασιλισσών με τον CP solver και με τον CP-SAT solver του OR-Tools**

Δίνεται ο ακόλουθος κώδικας για την επίλυση του προβλήματος των N-βασιλισσών.

[nqueens.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/tools/ortools/nqueens.ipynb)

Πόσο χρόνο απαιτεί στον υπολογιστή σας η εύρεση μιας λύσης για ένα ταμπλό μεγέθους 25Χ25 με τον CP επιλυτή και πόσο χρόνο με τον CP-SAT επιλυτή; Για ταμπλό ακόμα μεγαλύτερου μεγέθους;

### Άσκηση 4

**Διαχωρισμός ειδών**

Ένας ζωολογικός κήπος θέλει να μεταφέρει με τρία κλουβιά τα παρακάτω είδη ζώων. Πως θα χωριστούνε με την χρήση του OR-Tools χωρίς κάποιο είδος να κινδυνεύει από κάποιον θηρευτή του.

[foodweb.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/tools/ortools/foodweb.ipynb)

![foodWeb](https://raw.githubusercontent.com/vasnastos/AGP/master/Resources/food-chain-diagram-concept-free-vector.jpg)

Ποιό από τα προηγούμενα προβλήματα σας θυμίζει;

---



:::info
* Πάντα, κάνετε ερωτήσεις στο κάτω μέρος του εγγράφου, ακριβώς πάνω από εδώ
:::
