Laboratorium WDEC. Opis posługiwania się pakietem AMPL

Podobne dokumenty
Podstawowe elementy modelu AMPL problemu liniowego(pl)

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Rozdział 2 PROGRAMOWANIE LINIOWE CAŁKOWITOLICZBOWE

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Rozwiązywanie programów matematycznych

Podstawy Programowania

Zad. 3: Układ równań liniowych

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

1 Podstawy c++ w pigułce.

I. Interfejs użytkownika.

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

Programowanie w języku Python. Grażyna Koba

MATLAB - laboratorium nr 1 wektory i macierze

Przykład wykorzystania dodatku SOLVER 1 w arkuszu Excel do rozwiązywania zadań programowania matematycznego

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Obliczenia iteracyjne

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

WYKORZYSTANIE NARZĘDZIA Solver DO ROZWIĄZYWANIA ZAGADNIENIA Problem przydziału

Programy wykorzystywane do obliczeń

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykorzystanie programów komputerowych do obliczeń matematycznych

Rozwiązywanie problemów z użyciem Solvera programu Excel

Wprowadzenie do Mathcada 1

Instalacja

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

1 Podstawy c++ w pigułce.

Podstawy Programowania C++

Tablice. Jones Stygar na tropie zmiennych

Przykład rozwiązywania problemu w programie DSS1OPT

Krzysztof Trajkowski. Przegląd pakietów do optymalizacji liniowej

łączny czas pracy (1 wariant) łączny koszt pracy (2 wariant) - całkowite (opcjonalnie - dla wyrobów liczonych w szt.)

Microsoft EXCEL SOLVER

Wprowadzenie do programu Mathcad 15 cz. 1

PIERWSZE URUCHOMIENIE PROGRAMU ITNC PROGRAMMING STATION

Programowanie w Turbo Pascal

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Technologie informacyjne: Arkusz kalkulacyjny

Metody numeryczne Laboratorium 2

n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.

Ćwiczenie 3: Wprowadzenie do programu Matlab

Pliki. Informacje ogólne. Obsługa plików w języku C

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

III TUTORIAL Z METOD OBLICZENIOWYCH

Rozdział 6 PROGRAMOWANIE WYPUKŁE I KWADRATOWE

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków

1 Przygotował: mgr inż. Maciej Lasota

1.2. Rozwiązywanie zadań programowania liniowego metodą geometryczną

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Instalacja Pakietu R

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

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

WYKORZYSTANIE NARZĘDZIA Solver DO ROZWIĄZYWANIA ZAGADNIEŃ TRANSPORTOWYCH Z KRYTERIUM KOSZTÓW

Rozpoczynamy import Kreator uruchamiamy przyciskiem Z tekstu, znajdującym się na karcie Dane, w grupie Dane zewnętrzne.

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

Programowanie w języku C++ Grażyna Koba

Instalowanie certyfikatów celem obsługi pracy urządzenia SIMOCODE pro V PN z poziomu przeglądarki internetowej w systemie Android

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Elementy języków programowania

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Metody i analiza danych

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

5. Rozwiązywanie układów równań liniowych

Programowanie obiektowe

Zakład Systemów Rozproszonych

Obrót magazynowy w kasach Farex przy pomocy programu PLU Manager

Obliczenia w programie MATLAB

Przypominacz Instrukcja uŝytkownika

Mikrokontroler ATmega32. Język symboliczny

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Zadanie nr 3: Sprawdzanie testu z arytmetyki

CalendarGenerator v0.1 - instrukcja obsługi

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Formuły formułom funkcji adresowania odwoływania nazwy Funkcja SUMA argumentami SUMA

Programowanie w językach

Trochę o plikach wsadowych (Windows)

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Ćwiczenie 1. Wprowadzenie do programu Octave

Programowanie celowe #1

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

Optymalizacja systemów

Wstęp do Informatyki i Programowania Laboratorium: Lista 1 Środowisko programowania

Co to jest arkusz kalkulacyjny?

2 Przygotował: mgr inż. Maciej Lasota

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Budowa i oprogramowanie komputerowych systemów sterowania. Laboratorium 4. Metody wymiany danych w systemach automatyki DDE

Część 4 życie programu

Algorytmika i programowanie usystematyzowanie wiadomości

WYSYŁKA EDEKLARACJI 2015

Instrukcja dotycząca konwersji dokumentów LaTeX do plików w formacie RTF

Podstawy Programowania 2

Wprowadzenie do Scilab: macierze

Transkrypt:

Laboratorium WDEC Opis posługiwania się pakietem AMPL Adam Krzemienowski, Grzegorz Płoszajski Instytut Automatyki i Informatyki Stosowanej Politechnika Warszawska Pakiet AMPL Pakiet AMPL jest narzędziem do rozwiązywania liniowych, nieliniowych i całkowitoliczbowych zadań programowania matematycznego. W jego skład wchodzą: algebraiczny język modelowania, różnorodne solwery służące do rozwiązywania modeli programowania matematycznego oraz okienkowy interfejs użytkownika. Pakiet umożliwia korzystanie z danych zawartych w zewnętrznych plikach tekstowych (ASCII). Przygotowanie programu AMPL do pracy Pakiet AMPL działa w środowisku Windows. Pierwszym krokiem przy korzystaniu z pakietu jest uruchomienie programu sw z katalogu AMPL, który otwiera okno tekstowe (z symbolem sw: Scrolling Window w linii poleceń). W pliku README.SW jest pełny opis poleceń programu SW. Można jednak zamiast z SW korzystać z innego okna tekstowego, np. z wiersza poleceń. W oknie poleceń należy wpisać polecenie ampl i nacisnąć Enter. Uruchomienie systemu AMPL potwierdzane jest zmianą symbolu w linii poleceń na ampl:. Od tej chwili polecenia są interpretowane przez program AMPL. Polecenia dla AMPL należy zawsze kończyć średnikiem. Pracę z AMPL kończy się poleceniem quit lub end (ze średnikiem); następuje wówczas powrót do okna tekstowego, z którego AMPL został wywołany. Pracę w oknie tekstowym kończy się przez zamknięcie okna, a w przypadku programu SW także poleceniem CTRL+Z. Wstępne sprawdzenie działania AMPL Można sprawdzić, czy program działa, wpisując następującą sekwencję poleceń: ampl model models\diet.mod; data models\diet.dat; solve; Powinien pojawić się napis: 6 iterations, objective 88.2 W przypadku rozwiązywania zadań ze zmiennymi całkowitoliczbowymi zamiast solvera MINOS należy użyć solvera CPLEX. W tym celu należy wydać polecenie: option solver cplex; W odpowiedzi na wydane następnie polecenie solve powinien się teraz pojawić komunikat: CPLEX 11.2.0: optimal solution; objective 88.2 0 simplex iterations (0 in phase I) 1

W podobny sposób można zmienić solwer na LPSOLVE lub z powrotem na MINOS. Język AMPL Język AMPL (A Mathematical Programming Language) jest algebraicznym językiem modelowania problemów programowania liniowego, nieliniowego lub całkowitoliczbowego. Poniżej zostały opisane podstawowe komendy języka AMPL, definiowanie modelu zadania oraz definiowanie parametrów modelu. Podstawowe komendy programu AMPL Do podstawowych komend należą: data - przejście do trybu pracy data; wstawienie pliku z danymi, display - wypisanie wartości funkcji celu, zmiennych, ograniczeń modelu, include - wstawienie pliku, let - zmiana wartości danych, model - przejście do trybu pracy model; wstawienie pliku z modelem, objective - wybranie zmiennych do funkcji celu, option - ustawienie lub wypisanie opcji, quit - wyjście z AMPL, reset - kasowanie modelu/danych (umożliwia wprowadzenie następnego), solve - rozwiązanie zadania, write - zapisanie problemu do plików na dysk. Definiowanie modelu zadania Podczas definiowania modelu zadania należy określić nazwy parametrów, nazwy i typ zmiennych, funkcję celu, ograniczenia w postaci wyrażeń, zbiory indeksów (opcjonalnie). Ogólne zasady konstruowania modelu są następujące: - każde wyrażenie musi być zakończone średnikiem: `;, - komentarze muszą zaczynać się od znaku: #, - wszystkie zmienne są domyślnie traktowane jako ciągłe, - do konstrukcji wyrażeń są używane operatory: *, /, -, + - kolejność wykonywania działań arytmetycznych jest zgodna z ogólnie przyjętymi zasadami, - zmienne całkowite są dodatkowo określane w deklaracji jako: integer, - zmienne binarne są dodatkowo określane w deklaracji jako: binary, - symbole \infty oraz -\infty są określane w deklaracji jako: Infinity oraz Infinity, - równoważne są dwa sposoby indeksowania danych: {i in A,j in $B$} - wszystkie pary ($i,j$) $i$ z $A$, $j$ z $B$, przy czym $A,B$ zostały wcześniej zadeklarowane jako zbiory, {i in 1..N,j in 1..M} - wszystkie pary (i,j) i od 1 do N,j od 1 do M, przy czym N,M zostały wcześniej zadeklarowane jako parametry, 2

- zbiory i parametry są deklarowane odpowiednio poleceniami: set oraz param, - zmienne są deklarowane poleceniem: var, - funkcja celu jest deklarowana poleceniem: minimize lub maximize, - ograniczenia są deklarowane poleceniem: subject to. Sposób zapisu ZPL w języku AMPL Dane jest następujące ZPL: max 120 X 1 +115 X 2 przy ograniczeniach:\\ 12 X 1-3 X 2 72 -X 1 + 5 X 2 143 2 X 1-3 X 2 21 13 X 1 150 92 X 2 912 X 1, X 1 0, całkowite Jego model w języku AMPL wygląda następująco: param N; param M; param c {1..N}; param l {1..N}; param u {1..N}; param b {1..M}; param a {1..M, 1..N}; var x {j in 1..N} >= l[j], <= u[j], integer; maximize f_celu: sum {j in 1..N} c[j]*x[j]; subject to ogr1 {i in 1..M}: sum{j in 1..N} a[i,j]*x[j] <= b[i]; subject to ogr2 {j in 1..N}: x[j]>=0; W powyższym przykładzie przy pomocy deklaracji param zadeklarowane zostały pojedyncze parametry: N i M, wektory parametrów: c,l,u i b, indeksowane odpowiednio od 1 do N i od 1 do M, oraz macierz parametrów a{m x N} (mająca M wierszy i N kolumn). Wektor zmiennych x indeksowany od 1 do N został zadeklarowany poleceniem var, przy czym narzucone zostały proste ograniczenia dolne i górne na zmienne x i warunek całkowitoliczbowości. Suma po j od 1 do N iloczynów c j x j została zapisana przy pomocy polecenia sum i wprowadzona do funkcji celu f_celu poleceniem maximize. Ograniczenia modelu zostały zapisane przy pomocy poleceń subject to, przy czym ogr1 to M nierówności (i zmienia się od 1 do M), z których każda stanowi sumę po j od 1 do N iloczynów a ij x j niewiększą niż b i (dla i-tego ograniczenia). Ograniczenia ogr2 zawierają warunek nieujemności zmiennych x j dla j od 1 do N. Uwaga, AMPL rozróżnia małe i duże litery. Definiowanie parametrów modelu Biorąc pod uwagę sposób zapisu modelu zadania przedstawiony w poprzednim punkcie, jego parametry można zdefiniować następująco: 3

param N := 2; # liczba zmiennych param M := 3; # liczba ograniczeń param c := 1 120 2 115 ; # wektor współczynników funkcji celu param l := 1 13 2 92 ; # proste ograniczenia dolne na zmienne param u := 1 150 2 912 ; # proste ograniczenia górne na zmienne param a : 1 2 := 1 12-3 2-4 5 3 2-3 ; # macierz współczynników ograniczeń param b := 1 72 2 143 3 21 ; # wektor współczynników prawych stron Wektorom parametrów c,l,u,b przypisano wartości na odpowiednich pozycjach, podając kolejno: numer pozycji oraz wartość parametru na tej pozycji. Macierzy parametrów a przypisano wartości podając po dwukropku numery kolumn macierzy, a następnie po znaku przypisania (:=) kolejno dla każdego wiersza: numer wiersza macierzy, wartości parametrów w kolejnych kolumnach. Przykładowy sposób rozwiązania problemu Procesor języka AMPL rozróżnia pliki ze względu na rozszerzenia. Dla użytkownika najważniejsze są dwa z nich: plik *.mod zawiera zapis modelu - deklaracje zmiennych, parametrów, funkcję celu oraz ograniczenia modelu; plik *.dat zawiera wartości danych modelu; plik *.run zawiera ciągi poleceń (plik batchowy); wszystkie będące plikami tekstowymi. Należy zatem zapisać model w pliku tekstowym nazwa1.mod, a parametry w pliku nazwa2.dat, uruchomić program AMPL i wczytać pliki z modelem i danymi poleceniami: model nazwa1.mod; data nazwa2.dat; Jeżeli nie pojawią się komunikaty błędów, można przystąpić do rozwiązania modelu. Polecenie: solve; spowoduje uruchomienie standardowego solwera MINOS. MINOS 5.5: ignoring integrality of 2 variables 3 iterations, objective 20885 Solwer ten nie obsługuje zmiennych całkowitoliczbowych. Gdyby zatem rozwiązanie nie było całkowitoliczbowe, należałoby zmienić solwer na CPLEX poleceniem: option solver cplex; i ponownie rozwiązać problem poleceniem solve. 4

Do obejrzenia wyników służy polecenie display. Należy w nim wymienić nazwy zmiennych, funkcji, parametrów, np. x, f_celu. display f_celu, x, c; Wyniki można zapisać do pliku dodając przed średnikiem symbol > i nazwę pliku, np.: display f_celu, x, c > nazwa3.out; Zbiory Uwaga, w przypadku zmiennych i parametrów wektorowych poszczególne składowe mogą być identyfikowane nazwami, a nie numerami. Zamiast x[1], x[2] na oznaczenie ilości produkowanych produktów rolnych można operować nazwami kojarzącymi się z poszczególnymi uprawami: ziemniaki, buraki. W modelu nie musi się operować rozmiarem wektorów, lecz bezpośrednio zbiorami i indeksami. Na przykład Model: Dane: set PROD; param profit {PROD}; param market {PROD}; param rate {PROD}; param dostep; var Uprawa {p in PROD} >=0, <=market[p]; maximize total_profit: sum {p in PROD} profit[p]*uprawa[p]; subject to ogr: sum {p in PROD} (1/rate[p])*Uprawa[p]<=dostep; set PROD := ziemniaki buraki; param: rate profit market := ziemniaki 200 25 6000 buraki 140 30 4000 ; param dostep := 40; Jeżeli poprzednio był rozwiązywany inny model, należy najpierw wydać polecenie reset. Po wprowadzeniu modelu i danych zapisanych jak wyżej i rozwiązaniu problemu, w przypadku solvera MINOS potwierdzonym komunikatem: 2 iterations, objective 192000 można odczytać rozwiązanie poleceniem: display Uprawa; W odpowiedzi otrzyma się komunikat: Uprawa [*] := buraki 1400 ziemniaki 6000 ; 5