ILOG (aisa:/software/ilog/solver51/doc/index.html)

Podobné dokumenty
Optimalizace & soft omezení: algoritmy

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

PA163 Programování s omezujícími podmínkami

Programování v C++ 1, 1. cvičení

Obsah: CLP Constraint Logic Programming. u odpovědí typu A, B, C, D, E: jako 0)

CLP(F D) program. Základní struktura CLP programu solve( Variables ) :- 1. definice proměnných a jejich domén declare_variables( Variables),

Standardní algoritmy vyhledávací.

Dynamické rozvrhování

Optimizing Limousine Service with AI. David Marek

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do programovacích jazyků (Java)

Více o konstruktorech a destruktorech

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Logické programování s omezujícími podmínkami. Constraint Logic Programming: CLP

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Vraťme se k základům: DFS = Depth First Search

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Programování v C++ 2, 8. cvičení

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Základy umělé inteligence

1 Nejkratší cesta grafem

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

PROGRAMOVÁNÍ V C++ CVIČENÍ

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Programování v C++ 3, 3. cvičení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programování - Java. Cvičení č.4

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Dotazování nad stromem abstraktní syntaxe

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Umělá inteligence I. Roman Barták, KTIML.

Programy pro ˇreˇsen ı ulohy line arn ıho programov an ı 18. dubna 2011

Opakování programování

Vstupní požadavky, doporučení a metodické pokyny

Dynamické datové struktury III.

IUJCE 07/08 Přednáška č. 1

Algoritmizace a programování

Systém pro optimalizaci a řízení lidských zdrojů

Vzdálenost uzlů v neorientovaném grafu

Základy algoritmizace a programování

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Funkce, intuitivní chápání složitosti

5 Rekurze a zásobník. Rekurzivní volání metody

Programování v jazyce C a C++

bfs, dfs, fronta, zásobník, prioritní fronta, halda

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Programování v C++ 1, 14. cvičení

Výčtový typ strana 67

Co je obsahem? O čem bude přednáška? plánování a rozvrhování. ono se to někde používá? aplikace? řešící algoritmy.

Operační systémy. Cvičení 4: Programování v C pod Unixem

Základní datové struktury

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programování v C++, 2. cvičení

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Rozsáhlé programy = projekty

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Úvod do teorie grafů

Mělká a hluboká kopie

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Automatizované řešení úloh s omezeními

Konstruktory a destruktory

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Algoritmizace prostorových úloh

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Algoritmizace a programování

Dynamické datové struktury I.

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Algoritmizace prostorových úloh

Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

8 Třídy, objekty, metody, předávání argumentů metod

1. Téma 03 - Rozhodování

Úvod do programovacích jazyků (Java)

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Dynamické programování

4EK311 Operační výzkum. 1. Úvod do operačního výzkumu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Základy algoritmizace a programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Obsah. 16. dubna Přehled metodik. Terminologie. Vlastnosti stroje Omezení Optimalizace CVUT FEL, K Klasifikace rozvrhovacích problému

Program a životní cyklus programu

Vector datový kontejner v C++.

Transkript:

ILOG Solver

ILOG (aisa:/software/ilog/solver51/doc/index.html) CSP modelován pomocí C++ tříd, různé sady knihoven napsané v C++ ILOG Solver = základní knihovny pravidelná aktualizace sw na MU definice různých typů proměnných (integer, enum, float, set) základní typy omezení (pro řešení obecnějších problémů) nástroje pro prohledávání stromové prohledávání (včetně LDS apod.) lokální prohledávání Parallel Solver paralelní prohledávání stavového prostoru nástroje pro definici vlastních omezení a prohledávacích metod ILOG Scheduler = rozšíření ILOG Solveru pravidelná aktualizace sw na MU modelování úloh a prostředů v rozvrhování, specializované řešiče pro rozvrhování ILOG Dispatcher = rozšíření ILOG Solveru dostupný na MU ve starší verzi transportní problémy: plány dopravy, rozvrhování osob pro transportní problémy Programování s omezujícími podmínkami I, 18. prosince 2003 2 ILOG Solver

ILOG Dispatcher http://www.ilog.co.uk/products/dispatcher/test.gif Programování s omezujícími podmínkami I, 18. prosince 2003 4 ILOG Solver

Základní kód #include <ilsolver/ilosolverint.h> ILOSTLBEGIN // " // nahrání a inicializace Solveru int main(){ IloEnv env; // inicializace interních dat. struktur IloNumVar x(env, 0, 10, ILOINT); // vytvoření celočíselné doménové proměnné IloConstraint ct = (x!= 0); // vytvoření omezení IloModel model(env); // inicializace modelu model.add(ct); // přidání omezení do modelu IloSolver solver(model); // inicializace řešiče pro daný model solver.solve(); // hledání řešení solver.out() << solver.getintvar(x) << endl; // výstup env.end(); return 0; } Programování s omezujícími podmínkami I, 18. prosince 2003 5 ILOG Solver

... SEND+MORE=MONEY IloIntVar S(env,1,9), E(env,0,9), N(env,0,9), D(env,0,9), M(env,1,9), O(env,0,9), R(env,0,9), Y(env,0,9); IloIntVarArray AllVars(env, 8, S,E,N,D,M,O,R,Y); IloModel model(env); model.add( IloAllDiff(env, AllVars) ); model.add( 1000*S + 100*E + 10*N + D + 1000*M + 100*O + 10*R + E == 10000*M + 1000*0 + 100*N + 10*E + Y); IloSolver solver(model); solver.solve(ilogenerate(env,allvars)); for (IloInt i=0; i<8; i++) solver.out() << solver.getvalue(allvars[i]) << " "; solver.out() << endl;... Programování s omezujícími podmínkami I, 18. prosince 2003 6 ILOG Solver

Hledání řešení Implementace prohledávacích algoritmů založena na myšlence cílů (goals) umožňují implementace algoritmů, kde není předem známá přesná posloupnost operací IloGenerate: předdefinovaný cíl, jehož parametrem je pole proměnných provádí posloupnost kroků 1. výběr proměnné 2. výběr hodnoty pro proměnnou 3. propagace efektu tohoto přiřazení není známo, které navázání proměnné vede ke konzisteci při nekonzistenci (nebo hledání dalšího řešení) jsou zkoušeny další hodnoty proměnné jedná se o implementaci backtrackingu Programování s omezujícími podmínkami I, 18. prosince 2003 7 ILOG Solver

Použití cílů Příklad deklarace cíle IloEnv env; IloModel model(env); IloNumVar x(env, 0, 2, ILOINT), y(env, 0, 2, ILOINT); model.add(x!= y); IloSolver solver(model); IloGoal goal = IloGenerate(env, IloNumVarArray(env, 2, x, y)); Cíle použity ve funkcích IloSolver::solve a IloSolver::newSearch if (solver.solve(goal)) solver.out() << "x=" << solver.getvalue(x) << " y=" << solver.getvalue(y); else solver.out() << "No solution"; Programování s omezujícími podmínkami I, 18. prosince 2003 8 ILOG Solver

Hledání dalšího řešení IloEnv env; IloModel model(env); IloNumVar x(env, 0, 2, ILOINT), y(env, 0, 2, ILOINT); model.add(x!= y); IloSolver solver(model); IloGoal goal = IloGenerate(env, IloNumVarArray(env, 2, x, y)); solver.startnewsearch(goal); while (solver.next()) solver.out() << "x=" << solver.getvalue(x) << " y=" << solver.getvalue(y); solver.endsearch(); solver.out() << "No more solutions" << endl; Programování s omezujícími podmínkami I, 18. prosince 2003 9 ILOG Solver

Další rozšíření prohledávání Další volitelný parametr IloGenerate určuje výběr proměnné IloGoal goal = IloGenerate(env, vars, IlcChooseMinSizeInt); Návrat až na výběr proměnné (IloGenerate se vrací na výběr hodnoty) nutné použít jiný cíl, a to IloBestGenerate Definice vlastního kriteria pro výběr proměnné IlcInt getevaluation(ilcintvar x) return (x.getmin() + x.getmax())/2; IlcChooseIndex1(myCriteria,getEvaluation(var),IlcIntVar) IloGenerate(vars, mycriteria); Optimalizace je realizována přidáním speciálního omezení model.add(ilomaximize(ilosum(profitvars)); Programování s omezujícími podmínkami I, 18. prosince 2003 10 ILOG Solver

Lokální prohledávání (LS) Metoda největšího stoupání v ILOGu 1. začni s iniciálním řešením S 2. ulož cenu řešení S jako CurrCost 3. změň S 4. jestliže S nesplňuje omezení nebo má Cost >= CurrCost, vrat se k původnímu S 5. běž na krok 2. Programování s omezujícími podmínkami I, 18. prosince 2003 11 ILOG Solver

Lokální prohledávání (LS) Metoda největšího stoupání v ILOGu 1. začni s iniciálním řešením S 2. ulož cenu řešení S jako CurrCost 3. změň S 4. jestliže S nesplňuje omezení nebo má Cost >= CurrCost, vrat se k původnímu S 5. běž na krok 2. Řešení vždy splňuje všechna nadefinovaná omezení LS se používá pouze k optimalizaci pokud chceme LS použít pro splňování omezení, pak musíme omezení zahrnout do kriteriální funkce např. maximalizace (váženého) součtu splněných omezení v CLP lze omezení zahrnout do objektivní funkce pomocí reifikace př. X#>Y #<=> BoolVarI, Obj #= Cost1*BoolVar1 + + CostN*BoolVarN Programování s omezujícími podmínkami I, 18. prosince 2003 11 ILOG Solver

Příklad: barvení grafu Obarvěte země dvěma různými barvami, tak aby France!= Belgium; France!= Germany; Belgium!= Netherlands; Germany!= Netherlands; Germany!= Denmark; maximalizuj cenu: 257*(France!= Luxembourg) + 9043*(Luxembourg!= Germany) + 568*(Luxembourg!= Belgium); Programování s omezujícími podmínkami I, 18. prosince 2003 12 ILOG Solver

Barvení grafu IloIntVar Belgium(env, 0, 1), Denmark(env, 0, 1), France(env, 0, 1), Germany(env, 0, 1), Netherlands(env, 0, 1), Luxembourg(env, 0, 1); IloIntVarArray AllVars(env, 6, Belgium, Denmark, France, Germany, Netherlands, Luxembourg); model.add(france!= Belgium); model.add(france!= Germany); základní model model.add(belgium!= Netherlands); model.add(germany!= Netherlands); model.add(germany!= Denmark); IloObjective obj = IloMaximize(env, 257 * (France!= Luxembourg) + 9043 * (Luxembourg!= Germany) + 568 * (Luxembourg!= Belgium)); Programování s omezujícími podmínkami I, 18. prosince 2003 13 ILOG Solver

Barvení grafu: backtracking IloIntVar Belgium(env, 0, 1), Denmark(env, 0, 1), France(env, 0, 1), Germany(env, 0, 1), Netherlands(env, 0, 1), Luxembourg(env, 0, 1); IloIntVarArray AllVars(env, 6, Belgium, Denmark, France, model.add(france!= Belgium); model.add(france!= Germany); model.add(belgium!= Netherlands); model.add(germany!= Netherlands); model.add(germany!= Denmark); Germany, Netherlands, Luxembourg); IloObjective obj = IloMaximize(env, 257 * (France!= Luxembourg) + 9043 * (Luxembourg!= Germany) základní model + 568 * (Luxembourg!= Belgium));... model.add(obj); IloSolver solver(model); solver.solve(); backtracking Programování s omezujícími podmínkami I, 18. prosince 2003 13 ILOG Solver

Lokální prohledávání: nový stav Cíl IloSingleMove prochází okolí (nhood) současného řešení (solution). Metaheuristika (mh) vybírá akceptovatelné stavy z okolí solution a jeden konkrétní z nich je vybrán pomocí sel. IloGoal IloSingleMove(IloEnv env, IloSolution solution, IloNHood nhood, IloMetaHeuristic mh, IloSearchSelector sel); // řešení // definice okolí // definice metaheuristiky // výběr řešení z okolí (volitelně) Definice okolí pomocí převrácení hodnoty boolean proměnné IloNHood nhood = IloFlip(env, AllVars) Metoda největšího stoupání IloImprove IloGoal move = IloSingleMove(env, soln, nhood, IloImprove(env)); Lokální prohledávání while (solver.solve(move)) solver.out() << soln.getobjectivevalue() << endl; Programování s omezujícími podmínkami I, 18. prosince 2003 14 ILOG Solver

Barvení grafu: lokální prohledávání Lokální prohledávání = dvoufázový proces jednoduchý základ nalezení úplného řešení pomocí iniciálního prohledávání (např. IloGenerate) cena současného řešení je vylepšována lokálním prohledáváním IloSolver solver(model); IloGoal generate = IloGenerate(env, AllVars); solver.solve(generate); IloSolution soln(env, "Colors"); soln.add(allvars); soln.add(obj); soln.store(solver); // uložení řešení solver.out() << "1st solution: " << soln.getobjectivevalue() << endl; IloNHood nhood = IloFlip(env, AllVars); IloGoal move = IloSingleMove(env, soln, nhood, IloImprove(env)); while (solver.solve(move)) solver.out() << "Move made: " << soln.getobjectivevalue() << endl; Programování s omezujícími podmínkami I, 18. prosince 2003 15 ILOG Solver

ILOG: shrnutí Komerční software nejnovější zveřejněné aplikace: Chile: aukční systém pro výběr nejlepší zásobovací společnosti pro 1.3 miliónů studentů, úspora 25% ceny, tj. 40 miliónů USD ročně National Football League: vytvoření rozvrhu pro 256 her, sezóna 2003, použit ILOG Solver ILOG umožňuje použít širokou škálu nástrojů řada modelovacích jazyků a balíků, kromě uvedených např. matematické programování (CPLEX) podpora kombinace se Solver modelování problémů pomocí OPL Studio metoda řešení skryta, vhodnější pro méně rozsáhlé problémy Pro efektivni využití nutná znalost rozsáhlých knihoven Programování s omezujícími podmínkami I, 18. prosince 2003 16 ILOG Solver