MiniZinc. Technologie programistyczne,

Podobne dokumenty
Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

MATERIAŁY DO ZAJĘĆ II

1 Podstawy c++ w pigułce.

Podstawy Programowania C++

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Wstęp do programowania. Różne różności

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

LibreOffice Calc VBA

1 Podstawy c++ w pigułce.

Algorytmika i Programowanie VBA 1 - podstawy

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Python wstęp do programowania dla użytkowników WCSS

Podstawy programowania

Programowanie Komputerów

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Typy, klasy typów, składnie w funkcji

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Właściwości i metody obiektu Comment Właściwości

Python. Wprowadzenie. Jolanta Bachan

Wstęp do Programowania potok funkcyjny

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

Programowanie obiektowe

Programowanie obiektowe

Informatyka 1. Przetwarzanie tekstów

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Implementacja schematów i statycznej kontroli typów w systemie JLoXiM

Wstęp do Programowania potok funkcyjny

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Oracle PL/SQL. Paweł Rajba.

Język programowania PASCAL

4. Funkcje. Przykłady

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Laboratorium WDEC. Opis posługiwania się pakietem AMPL

Laboratorium nr 1. i 2.

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

Oracle11g: Wprowadzenie do SQL

Bloki anonimowe w PL/SQL

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Instalacja Pakietu R

Oracle PL/SQL. Paweł Rajba.

ZMIENNE. Podstawy PHP

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Programowanie RAD Delphi

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Logika Temporalna i Automaty Czasowe

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

Wprowadzenie do języka Java

Podstawy programowania skrót z wykładów:

PROGRAMOWANIE W PYTHONIE ALGORYTMY TABLICOWE A LISTY

external Data Representation

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

INFORMATYKA Studia Niestacjonarne Elektrotechnika

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Programowanie Delphi obliczenia, schematy blokowe

Visual Basic for Application (VBA)

Wstęp do programowania 2

Podstawy programowania C. dr. Krystyna Łapin

1. Indeksy/indeksowanie : Do elementów wektora, list, macierzy czy ramek, można się odwołać na kilka sposobów.

Proste programy w C++ zadania

- nawiasy kwadratowe oznaczają, że to lista

Algorytmy i struktury danych. wykład 1

Prezentacja o Haskell u(rozdział 3 i 4)

Tworzenie aplikacji w języku Java

Algorytmy i struktury danych

Wstęp do programowania

W powyższym kodzie utworzono wyliczenie dni tygodnia.

Układy VLSI Bramki 1.0

Wstęp do Programowania potok funkcyjny

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Wprowadzenie do programowania w VBA

Microsoft SQL Server Podstawy T-SQL

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Godzina (wtorek)

Zasady Programowania Strukturalnego

Visual Basic for Application (VBA)

SAS Podstawowe informacje przed ćwiczeniem 1

Transkrypt:

MiniZinc Technologie programistyczne, 2018-2019 http://www.minizinc.org

Co to jest MiniZinc? Język do opisów problemów decyzyjnych i optymalizacyjnych z ograniczeniami Zmienne decyzyjne liczbowe (int, float), logiczne (bool) oraz wyliczeniowe (enum) Możliwość współpracy z wieloma specjalizowanymi solverami, także implementacje referencyjne Rozwijany przez Monash University, Data61 Data Science i University of Melbourne (Australia)

MiniZinc i FlatZinc MiniZinc: model FlatZinc: model MiniZinc: dane Solver

Problem 1: kolorowanie mapy parametr jednokrotne przypisanie wartości typy parametrów: int, float, bool, string, także tablice i zbiory zmienne decyzyjne ustalane przez solver (mogą mieć przypisaną wartość początkową), dziedziny takie same, jak dla parametrów, możliwość definiowania przedziałów ograniczenia, jakie muszą spełniać zmienne decyzyjne (rozwiązanie), dostępne typowe operatory relacyjne oraz bardziej złożone predykaty wyświetlenie listy z wynikami (tylko jedno polecenie w programie), możliwość prostego formatowania (funkcje show, show_int oraz show_float), sklejanie łańcuchów przez ++

Problem 1: kolorowanie mapy wykorzystanie solvera finite domain do znalezienia rozwiązań

Problem 2: planowanie wypieków ograniczenia na zasoby: mąka, banany, cukier, masło, kakao definicja funkcji celu: typowe operatory arytmetyczne, div i mod, typowe funkcje matematyczne

Zbiory danych i asercje Możliwość zewnętrznego ustawienia wartości parametrów oraz zmiennych decyzyjnych Zewnętrzny plik danych (.dzn) albo linia poleceń (opcja -D) Asercje służące do sprawdzania poprawności danych wejściowych (także do ustalania wartości)

Problem 2: planowanie wypieków (wydzielone dane) polecenie output można opuścić wyjście w formacie zgodnym z formatem pliku danych

Problem 3: spłata pożyczki parametry i zmienne decyzyjne typu float możliwość ograniczenia wartości do przedziału możliwość formatowania zmiennych decyzyjnych osadzonych w łańcuchu znakowym (takie samo, jak przy użyciu funkcji show_...)

Problem 3: spłata pożyczki wykorzystanie solvera mixed integer programming do znalezienia rozwiązania

Tablice i zbiory Tablice (wielowymiarowe) złożone struktury z parametrami oraz zmiennymi decyzyjnymi Zbiory definiowanie nowych typów danych, np. służących do indeksowania tablic Podstawowe operacje na zbiorach, np.: in, subset, superset, union, intersect, diff, symdiff, card

Problem 4: temperatura arkusza metalu tablica zmiennych decyzyjnych metoda elementów skończonych, równanie Laplace a

Problem 4: temperatura arkusza metalu wykorzystanie solvera mixed integer programming do znalezienia rozwiązania

Problem 5: planowanie produkcji Rozszerzenie problemu wypieku ciasta na dowolną listę produktów oraz zasobów (dane wejściowe) Rozdzielenie deklaracji i definicji typu wyliczeniowego Wykorzystanie typów wyliczeniowych do indeksowania tablic

Problem 5: planowanie produkcji tabele z parametrami, sprawdzenie poprawności danych wejściowych oszacowanie maksymalnej liczby wyprodukowanych produktów tabele ze zmiennymi decyzyjnymi i ograniczenia narzucone na zmienne funkcja celu

Problem 5: planowanie produkcji definicje typów wyliczeniowych oraz wartości parametrów definicja tabeli dwuwymiarowej, także funkcje arraynd(indeksy, lista) Sklejanie tabel jednowymiarowych (list) za pomocą operatora ++

Definiowanie list i zbiorów ( List and set comprehension) [ <expr> <generator-expr> ] <generator> <generator> where <bool-expr> <identifier>,..., <identifier> in <array-expr> [i + j i,j in 1..3 where i < j] [1+2, 1+3, 2+3] [3, 4, 5]

Wywoływanie generatorów ( Generator call expressions) <agg-func> (<generator-expr>) (<expr>) <agg-func> ([<expr> <generator-expr>]) Funkcje agregujące tablice liczbowe: sum, product, min, max tablice logiczne: forall, exists, xorall, iffall (nieparzysta i parzysta liczba spełnionych warunków) forall([a[i]!= a[j] i,j in 1..3 where i < j])

Problem 6: send more money predefiniowany predykat sprawdzający unikalność poszczególnych wartości

Wyrażenia warunkowe if <bool-expr> then <expr-1> else <expr-2> endif int: r = if y!= 0 then x div y else 0 endif; constraint forall(i,j in PuzzleRange) ( if start[i,j] > 0 then puzzle[i,j] = start[i,j] else true endif ); if j mod S == 0 then " " else "" endif

Problem 7: sudoku

Problem 7: sudoku

Typy wyliczeniowe enum <enum-name> = { } / anon_enum [var] <enum-name> : <var-name> [var] <l>..<u> : <var-name> Specjalizowane funkcje do obsługi enum enum_next(x, x) poprzednia wartość przed x enum_next(x, x) następna wartość po x to_enum(x, i) konwersja liczby i do wartości z X Standardowe funkcje stosowalne do enum card(x) liczba elementów w typie X min(x) pierwszy element w typie X max(x) ostatni element w typie X

Złożone ograniczenia Złożone wyrażenia logiczne w ograniczeniach Zastosowanie składni matematycznej true, false not koniunkcja (/\) i dysjunkcja (\/) only-if (<-), implies (->), if-and-only-if (<->)

Problem 8: warsztat (jobshop) zastosowanie typów enum jako indeksów w tablicach (konwersja jednostronna)

Problem 8: warsztat (jobshop)

Problem 9: planowanie stabilnych małżeństw wymuszenie stabilności z punktu widzenia rankingu (preferencji)

Problem 9: planowanie stabilnych małżeństw

Problem 10: problem plecakowy (knapsack) zbiór jako złożona zmienna decyzyjna

Problem 11: planowanie miejsc przy stole weselnym 1 2 3 4 5 6 Stół prostokątny, 12-miejscowy Wymagania ogólne (np. państwo młodzi razem) Antypatie i fobie gości Maksymalizacja odległości pomiędzy antypatiami 12 11 10 9 8 7

Problem 11: planowanie miejsc przy stole weselnym antypatie wśród gości panie siedzą na miejscach parzystych, panowie na nieparzystych Ed ma fobie nie może siedzieć na miejscu z brzegu stołu państwo młodzi muszą siedzieć obok siebie, po tej samej stronie stołu maksymalizacja odległości pomiędzy gośćmi, którzy za sobą nie przepadają

Problem 11: planowanie miejsc przy stole weselnym Ron Alice Ed Rona Bestman Clara Carol Bob Bridesmaid Groom Bride Ted

Definiowanie własnych predykatów predicate <pred-name>(<arg-def>,,<arg-def>) = <bool-expr> predicate lookup(array[int] of var int:x, int: i, var int: y) = assert(i in index_set(x), "index out of range in lookup" y = x[i]); predicate no_overlap(var int:s1, int:d1, var int:s2, int:d2) = s1 + d1 <= s2 \/ s2 + d2 <= s1;

Definiowanie własnych predykatów jobshop

Definiowanie własnych funkcji function <ret-type> <func-name>(<arg-def>,,<arg-def>) = <expr> function var int: manhattan( var int: x1, var int: y1, var int: x2, var int: y2) = abs(x1 - x2) + abs(y1 - y2); function int: posn(int: a, int: a1) = (a-1)*s + a1;

Definiowanie własnych funkcji sudoku

Zmienne lokalne let {<var-def>,, <var-def>} in <expr> constraint let {var int: s = x1 + x2 + x3 + x4} in l <= s /\ s <= u;

Zmienne lokalne wedding

Wykorzystanie samodzielne Proste środowisko do edycji plików (.mzn,.dzn) i uruchamiania obliczeń Zestaw narzędzi do uruchamia z linii poleceń

Integracja z własnym oprogramowaniem Uruchomienie referencyjnych narzędzi z poziomu Python-a Możliwość przekazania danych z poziomu aplikacji oraz przejęcia wyników ( surowe i sformatowane) http://paolodragone.com/pymzn

Integracja z własnym oprogramowaniem

Podsumowanie MiniZinc język do (czytelnego) modelowania problemów decyzyjnych i optymalizacyjnych Dostępne solvery referencyjne, możliwa integracja z wieloma istniejącymi solverami Możliwość integracji z własnymi aplikacjami (Python, Java, )