constraint programming
Főnév
constraint programming (tsz. constraint programmings)
- (informatika, mesterséges intelligencia) A Constraint Programming (korlátozásos programozás, CP) egy erőteljes paradigmája a deklaratív programozásnak, amelyet bonyolult kombinatorikus problémák (pl. ütemezés, erőforrás-kezelés, puzzle-feladatok, konfigurációk stb.) megoldására használnak. Ebben a megközelítésben megoldáskeresés nem algoritmikus lépésekkel, hanem feltételek (korlátozások) megadásával történik, amelyek meghatározzák, milyen tulajdonságokkal rendelkezhet egy érvényes megoldás.
🧩 1. Mi az a Constraint Programming?
A Constraint Programming egy problémamegoldó keretrendszer, ahol:
- Megadunk egy változókészletet.
- Mindegyik változónak van egy tartománya (domain) – lehetséges értékeinek halmaza.
- Különféle korlátozásokat (constraints) definiálunk a változók között.
- A cél: olyan érékadásokat találni a változókhoz, amelyek mindegyik korlátozást kielégítik.
Példa:
Sudoku – a rács minden mezője egy változó, tartományuk: {1,2,…,9}. Korlátozás: minden sorban/oszlopban/blokkban minden szám csak egyszer szerepelhet.
🛠️ 2. A CP modell elemei
2.1 Változók (Variables)
Legyenek változók.
2.2 Tartomány (Domain)
Minden változónak van egy értéktartománya , azaz .
Például:
2.3 Korlátozások (Constraints)
Formálisan: reláció, amely a változók bizonyos kombinációit engedélyezi.
Példák:
🧠 3. CP megoldási folyamat
A constraint programming rendszer a következő lépéseket alkalmazza:
3.1 Keresési tér
Minden lehetséges értékadás a változókhoz. A keresési tér exponenciálisan nagy, de a korlátozások ezt nagymértékben szűkítik.
3.2 Keresési algoritmus (search)
A leggyakoribb módszer a backtracking (visszalépéses keresés), amely:
- Választ egy változót.
- Kipróbálja a lehetséges értékeket.
- Ha valamelyik megsérti a korlátozást, visszalép.
3.3 Korlátozás propagáció (constraint propagation)
Ez egy intelligens tartományszűkítési eljárás. A cél: a változók értéktartományát csökkenteni a korlátozások alapján.
Pl.:
- Ha , és , akkor
- Ha egy AllDifferent korlátozásban csak egy érték maradt, más változók nem vehetik fel azt
3.4 Heurisztikák
Hatékony CP rendszerek változó- és érték-választási heurisztikákat alkalmaznak:
- Minimum Remaining Values (válaszd azt a változót, amelyiknek legkevesebb lehetséges értéke van)
- Most Constraining Variable (válaszd azt, amelyik a legtöbb korlátozásban szerepel)
📚 4. Típusos korlátozások
4.1 Bináris korlátozás
Két változó között (pl. )
4.2 Globális korlátozás
Több változóra ható magas szintű korlátozás. Például:
- AllDifferent: minden változó különböző
- Cumulative: erőforrás-használat korlátozása idő szerint (pl. gépek, memória)
- Element: indexelés (pl. )
💡 5. CP alkalmazások
✅ Ütemezés (Scheduling)
- Iskolai órarendek
- Gyártósor optimalizálás
- Repülőgép-karbantartási időpontok
✅ Erőforrás-kezelés
- Munkafolyamat-elosztás gépek között
- Energiafogyasztás optimalizálása
✅ Konfigurációs problémák
- Hardver-összeszerelés
- Termékopciók érvényessége
✅ Puzzle-k
- Sudoku
- N-queens
- Kakuro
🧮 6. Példa: 4-Queens probléma
Feladat: Tegyünk le 4 királynőt 4×4-es táblára úgy, hogy ne üssék egymást!
Modell:
- Változók: (oszloponként egy királynő, érték: sor)
- Tartomány:
- Korlátozások:
- (nem lehetnek egy sorban)
- (nem lehetnek egy átlóban)
A CP megoldó keres a feltételeket kielégítő értékadásokat.
🧰 7. Constraint Programming rendszerek
Nyelvek / könyvtárak:
- MiniZinc – deklaratív nyelv CP modellezéshez
- Choco Solver – Java alapú CP könyvtár
- Google OR-Tools – támogatja CP-t, MIP-et, SAT-ot
- Gecode – C++ CP könyvtár
- ECLiPSe, SICStus Prolog – logikai programozási nyelvek CP támogatással
🧾 8. CP vs más módszerek
| Paradigma | Leírás | Példa |
|---|---|---|
| Constraint Programming | Korlátozásokkal definiált megoldáskeresés | Sudoku, órarend |
| Matematikai programozás | Célfüggvény maximalizálása/minimalizálása | Lineáris programozás |
| SAT Solving | Boole-formulák kielégíthetősége | Hardververifikáció |
| Heurisztikus módszerek | Keresés, optimalizálás nem garantált | Genetikus algoritmusok |
🔮 9. Jövő és kutatás
A CP folyamatosan fejlődik:
- Hibrid megoldások: CP + MIP/SAT kombinációk
- Tanuló keresés (learning during search)
- Magas szintű modellezőnyelvek
- Magyarázatok (explanations): miért nincs megoldás?
📌 Összefoglalás
A Constraint Programming:
- Deklaratív megközelítés, a “mit”, nem a “hogyan”-t írjuk le.
- Alapja: változók, tartományok, korlátozások.
- Használ: backtracking, propagation, heurisztikák.
- Nagyon rugalmas és általános kombinatorikus problémákra.
- Sokféle ipari és kutatási alkalmazás van rá.
- constraint programming - Szótár.net (en-hu)
- constraint programming - Sztaki (en-hu)
- constraint programming - Merriam–Webster
- constraint programming - Cambridge
- constraint programming - WordNet
- constraint programming - Яндекс (en-ru)
- constraint programming - Google (en-hu)
- constraint programming - Wikidata
- constraint programming - Wikipédia (angol)