Obiekty występujące w ścieżce Ciepło

Poniższy diagram przedstawia obiekty występujące w ścieżce Ciepło oraz zależności w niej występujące. Ze względu na czytelność na obrazku nie zaznaczono, że takie elementy jak piece, liczniki, czujniki, etc. można kupić w Centrum handlowym. Na rysunku występuje element Dom. Jest on tożsamy z osiedlem. W ścieżce Ciepło osiedle i dom różnią się tylko i wyłącznie wielkością budżetu oraz ograniczeniami metrażowymi (większy piec, większy magazyn).

Cieplo-page-001

Pierwszy agent w projekcie typu Maven

Stworzyłem projekt Maven w IntelliJ aby nie ściągać samemu repozytorium. W tym celu utworzyłem pusty projekt typu Maven. Plik pom.xml po zmianach wygląda:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>bocian_karol_agents</groupId>
    <artifactId>Agents</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.tilab.jade</groupId>
            <artifactId>jade</artifactId>
            <version>4.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>com.valchkou.datastax</groupId>
            <artifactId>cassandra-driver-mapping</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.9</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.9</version>
        </dependency>
        <dependency>
            <groupId>org.xerial.snappy</groupId>
            <artifactId>snappy-java</artifactId>
            <version>1.1.1.6</version>
        </dependency>
        <dependency>
            <groupId>net.jpountz.lz4</groupId>
            <artifactId>lz4</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.7</version>
        </dependency>

        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.13</version>
        </dependency>

    </dependencies>

    <repositories>
        <repository>
            <id>tilab</id>
            <url>http://jade.tilab.com/maven/</url>
        </repository>
    </repositories>

</project>

Stworzyłem klasę JadeBootThread, wzorując się na http://stackoverflow.com/a/27621225.

package karol_bocian.solution.agentModule.agentManagement;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class JadeBootThread extends Thread {

    private final String jadeBoot_CLASS_NAME = "jade.Boot";

    private final String MAIN_METHOD_NAME = "main";


    private final String GUI_args = "-gui";

    private final Class<?> secondClass;

    private final Method main;

    private final String[] params;
    private final String agents = "-agents";
    private final String local_port = "1210";
    private final String local_port_args = "-local-port";

    public JadeBootThread(String ACTOR_NAMES_args) throws ClassNotFoundException, SecurityException, NoSuchMethodException {
        secondClass = Class.forName(jadeBoot_CLASS_NAME);
        main = secondClass.getMethod(MAIN_METHOD_NAME, String[].class);
        params = new String[]{GUI_args, local_port_args, local_port, agents, ACTOR_NAMES_args};
    }

    @Override
    public void run() {
        try {
            main.invoke(null, new Object[]{params});
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
            ex.printStackTrace();
        }

    }
}

Dodałem własnego agenta:

package karol_bocian_agents;
import jade.core.Agent;

public class HelloAgent extends Agent {
    protected void setup() {
        System.out.println(&amp;amp;quot;Hello World. &amp;amp;quot;);
        System.out.println(&amp;amp;quot;My name is &amp;amp;quot; + getLocalName());
    }
}

oraz klasę główną (Main):

package karol_bocian_agents;
public class Main {
    public static void main(String[] args) {
        System.out.print(&amp;amp;quot;Hello World&amp;amp;quot;);

        JadeBootThread jadeBootThread = null;
        try {
            jadeBootThread = new JadeBootThread();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        jadeBootThread.run();
    }
}

Musiałem również ściągnąć Mavena. Rozpakowałem go w C:\Program Files\Apache Software Foundation. A następnie w IntelliJ w File->Settings->Build, Execution, Deployment -> Maven w Maven home directory ustawiłem C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 oraz zaznaczyłem Override.

set

Cztery ścieżki

Budowane osiedle będzie skupiało się na czterech aspektach:

  • Ciepło,
  • Woda,
  • Prąd,
  • Ścieki i śmieci.

Ciepło

Wyróżniony został opał w postaci:

  • Gaz,
  • Węgiel,
  • Olej opałowy.

W sekcji Ciepło wyróżniono:

  • Środowisko:
    • Centrum handlowe (węgiel, olej opałowy, urządzenia),
    • Gazownia,
    • Ciepłownia,
    • Wodociągi,
    • Pogoda,
    • Stacja meteorologiczna,
  • Osiedle/dom:
    • Konsument:
      • Piec węglowy,
      • Piec gazowy,
      • Piec na olej opałowy,
    • Zbiornik:
      • Magazyn na węgiel,
      • Zbiornik na olej opałowy,
    • Licznik:
      • Licznik gazu,
    • Czujnik:
      • Czujnik temperatury,
      • Czujnik wilgotności,
  • Aplikacje mobilne:
    • Zmiana temperatury,
    • Zmiana wilgotności.

Woda

W sekcji Woda wyróżniono:

  • Środowisko:
    • Ciepłownia,
    • Wodociągi,
    • Pogoda,
    • Stacja meteorologiczna,
  • Osiedle/dom:
    • Generator:
      • Urządzenie zbierające deszczówkę,
    • Konsument:
      • Pralka,
      • Czajnik,
      • Wanna,
      • Prysznic,
      • Zmywarka,
      • Toaleta,
      • Umywalka,
    • Zbiornik:
      • Zbiornik na deszczówkę,
      • Zbiornik na wodę,
      • Wanna,
    • Licznik:
      • Licznik ciepłej wody,
      • Licznik zimnej wody,
    • Czujnik:
      • Czujnik temperatury,
      • Czujnik wilgotności,
  • Aplikacje mobilne:
    • Zmiana temperatury,
    • Zmiana wilgotności,
    • Włączenie/Wyłączenie urządzenia.

Prąd

W sekcji Prąd wyróżniono:

  • Środowisko:
    • Elektrownia,
    • Centrum handlowe (węgiel, olej opałowy, urządzenia),
  • Osiedle/dom:
    • Generator:
      • Kolektor słoneczny,
      • Wiatrak,
    • Konsument:
      • Pralka,
      • Czajnik,
      • Lampa,
      • Telewizor,
      • Zmywarka,
      • Samochód elektryczny,
    • Zbiornik:
      • Akumulator,
      • Samochód elektryczny,
    • Licznik:
      • Licznik prądu,
    • Czujnik:
      • Czujnik oświetlenia,
      • Czujnik wiatru,
  • Aplikacje mobilne:
    • Włączenie/Wyłączenie urządzenia.

Ścieki i śmieci

W sekcji Ścieki i śmieci wyróżniono:

  • Środowisko:
    • Centrum handlowe (węgiel, olej opałowy, urządzenia),
    • Oczyszczalnia ścieków,
    • Zakład wywozu śmieci,
  • Osiedle/dom:
    • Generator:
      • Człowiek,
      • Zmywarka,
      • Pralka,
    • Konsument:
      • Kompostownik,
      • Przydomowa oczyszczalnia ścieków,
    • Zbiornik:
      • Zbiornik na ścieki,
      • Kosz na śmieci,
      • Zbiornik na brudną wodę,
    • Czujnik:
      • Czujnik poziomu ścieków.

Pierwszy agent

Pierwszego agenta programowego stworzyłem w języku JAVA używając biblioteki JADE oraz oprogramowania IntelliJ IDEA 14.

W tym celu ściągnąłem bibliotekę JADE oraz środowisko programistyczne IntelliJ IDEA do pisania w języku Java.

Następnie stworzyłem w IntelliJ nowy projekt konsolowy z użyciem Java 1.8 oraz do bibliotek dodałem pobraną bibliotekę JADE.  Usunąłem główny plik, a w jego miejsce dodałem następujący plik implementujący mojego pierwszego agenta:

package karol_bocian_agents;

import jade.core.Agent;

public class HelloAgent extends Agent {
    protected void setup() {
        System.out.println(&quot;Hello World. &quot;);
        System.out.println(&quot;My name is &quot; + getLocalName());
    }
}

Musiałem zmienić plik uruchomieniowy. Należy w konfiguracji Run/Debug jako plik główny (main class) wybrać plik jade.Boot z biblioteki JADE. W argumentach programu podałem:
-gui -local-port 1212 -agents AgentTomek:karol_bocian_agents.HelloAgent,
gdzie 1212 to ustawienie portu lokalnego, AgentTomek jest nazwą tworzonego agenta, który jest w pakiecie (package) karol_bocian_agents w klasie HelloAgents (-gui -local-port nr_portu -agents imię_agenta:nazwa_pakietu.nazwa_klasy). Ustawienia przedstawia poniższy obrazek:
config

Po uruchomieniu programu otrzymamy w konsoli wypowiedź naszego agenta:
prog
Otworzy się również okno do zarządzania platformą z agentami. Wśród agentów nie będzie jednak naszego agenta. Jeśli zakomentujemy komendę doDelete() w klasie z naszym agentem, AgentTomek będzie w puli dostępnych agentów:
kons

Funkcje systemu

Celem systemu jest minimalizacja kosztów ogólnych generowanych przez osiedle w perspektywie zadanego okresu czasu oraz zapewnienie ciągłości działania osiedla.

System umożliwia:

  • Liczenie bieżącego zużycia zasobów,
  • Generowanie raportów z działania osiedla,
  • Generowanie prognoz zużycia zasobów,
  • Minimalizowanie kosztów poprzez zakup usług, urządzeń, korzystanie z promocji i otaczającego środowiska (wiatr, deszczówka, słońce).

Funkcje dostępne z poziomu aplikacji mobilnych:

  • Tworzenie harmonogramu użytkowania urządzeń,
  • Zmiana temperatury,
  • Przeglądanie raportów,
  • Włączenie/wyłączenie urządzeń.

Obiekty występujące w systemie

Schemat
Do systemu należą następujące obiekty:

  • Środowisko:
    • Elektrownia,
    • Gazownia,
    • Wodociągi,
    • Zakład wywozu śmieci,
    • Oczyszczalnia ścieków,
    • Ciepłownia,
    • Stacja meteorologiczna,
    • Centrum handlowe,
    • Centrum firm,
    • Pogoda,
  • Osiedle:
    • Dom:
      • Urządzenia zużywające zasoby (pralka, lodówka),
      • Generatory zasobów (kolektor słoneczny, wiatrak),
      • Urządzenia przechowujące zasoby (akumulator, komórka na węgiel, samochód elektryczny),
      • Urządzenia zmieniające jeden zasób w inny (piec na gaz daje ciepło oraz ciepłą wodę),
      • Miejsca parkingowe,
      • Śmietniki,
      • Garaże,
      • Lampy,
      • Czujniki:
        • Temperatury,
        • Światła,
        • Dymu,
        • Ruchu,
        • Wilgotności,
      • Liczniki:
        • Prądu,
        • Wody,
        • Gazu,
    • Osiedle może posiadać niektóre obiekty wymienione w sekcji Dom. Posiada ono większe możliwości, co daje możliwość zakupu np. większego zbiornika na wodę.

Elementy systemu – przekrój ze względu na pełnione funkcje

Srodowisko-page-001

Strukturę budowanego systemu przedstawia poniższy rysunek:  Na budowany system składają się następujące elementy:

  • Środowisko — moduł odpowiada za generowanie i zużywanie zasobów (prąd, woda, podgrzanie wody, opał), tworzenie prognoz pogody oraz ustalanie cen usług i zasobów. Na moduł składają się:
    • Elektrownia,
    • Gazownia,
    • Wodociągi,
    • Ciepłownia,
    • Zakład wywozu śmieci,
    • Oczyszczalnia ścieków,
    • Stacja meteorologiczna,
    • Centrum handlowe,
    • Centrum firm,
    • Zmiany pogodowe,
    • Urządzenie zużywające zasoby,
    • Generatory zasobów,
  • Sensory — moduł odpowiedzialny za ukazywanie zmian w środowisku. Składa się z:
    • Czujników temperatury,
    • Czujników światła,
    • Czujników dymu,
    • Czujników ruchu,
    • Czujników wilgotności,
    • Liczników zużycia zasobów (prądu, wody, etc.),
  • Aktywatory — moduł odpowiedzialny za generowanie zmian w środowisku poprzez aktywowanie urządzeń, zamawianie usług i zasobów. Składa się z:
    • Urządzeń (lodówka, pralka, latarnia),
    • Obiektów służących do zamawiania usług,
  • System agentowy — moduł odpowiedzialny za zbieranie, analizowanie i przetwarzanie informacji pochodzących z sensorów oraz aplikacji mobilnych i oddziaływaniu na aktywatorach oraz udostępnianiu informacji aplikacjom mobilnym. Oparty jest na systemie agentów programowych.
  • Aplikacje mobilne — moduł zawierający aplikacje mobilne, które służą do zarządzania osiedlem oraz domem.

Temat i ramy czasowe

Na niniejszym blogu będę zamieszczał kolejne etapy tworzenia mojej pracy magisterskiej. Niektóre posty będą uaktualnione. Niektóre zaś po jakimś czasie staną się nieaktualne, gdyż może się okazać, że moja praca poszła w innym kierunku. Tematem mojej pracy magisterskiej jest:

Agentowy system zarządzania inteligentnym osiedlem/ Agent system for management of an intelligent neighborhood

Podczas tworzenia pracy współpracuję z profesorem IBS PAN dr hab. Marcinem Paprzyckim oraz profesorem IBS PAN dr hab. Maria Ganzha.

Termin złożenia pracy upływa w czerwcu 2015 r.