Problematyka wyboru firm inwestuj ą cych na danym terenie
3.5. Sposób kodowania czynników
W przypadku problemu plecakowego, a takim właśnie modelem jest przybliŜany rozwaŜany w tej pracy problem wyboru firm inwestujących na danym
terenie, najczęściej stosowanym sposobem kodowania „zbioru wybranych
przedmiotów” jest kodowanie binarne. W kodowaniu tym, kaŜdemu chromosomowi odpowiada pewien koszyk wybranych elementów, w którym gen o wartości „1” oznacza, iŜ dany element został włoŜony do plecaka (firma została wybrana), natomiast „0”, iŜ element ten nie znajduje się w plecaku (firma nie została wybrana). Długość chromosomu to liczba elementów, podlegających procesowi wyboru (liczba firm).
Rys. 9 Chromosom kodujący koszyk firm
Problemu nie stanowi właśnie taka implementacja sposobu kodowania ale odwzorowanie mające na celu przyporządkowanie kaŜdemu genowi – firmy o określonych parametrach. W celu odpowiedniego zamodelowania zaistniałej sytuacji został stworzony meta-model danych zapewniający omawiane odwzorowanie. Wymóg, który został postawiony na początku, iŜ nie będzie z góry narzuconej struktury danych ani typu danych, wymusił konieczność parametryzacji kaŜdego rodzaju danych. Dane wczytywane są więc z pliku postaci XML prezentowanego poniŜej.
<?xml version="1.0" encoding="UTF-8"?>
<firms>
<parameters>
<parameter id="pl.rybarski.firms.water" name="water"
type="java.lang.Double" />
type="java.lang.Double" />
<parameter id="pl.rybarski.firms.transport" name="transport"
type="pl.rybarski.firms.Transport" />
<parameter id="pl.rybarski.firms.trade" name="trade"
type="pl.rybarski.firms.Trade" /> <parameter id="pl.rybarski.firms.contribution"
name="contribution" type="pl.rybarski.firms.Contribute" /> <parameter id="pl.rybarski.firms.enviroment" name="enviroment"
type="pl.rybarski.firms.Enviroment" />
<parameter id="pl.rybarski.firms.power" name="power"
type="java.lang.Double" />
<parameter id="pl.rybarski.firms.investition" name="investition"
type="java.lang.Double" />
<parameter id="pl.rybarski.firms.workers" name="workers"
type="java.lang.Integer" />
<parameter id="pl.rybarski.firms.productionType"
name="productionType" type="pl.rybarski.firms.ProductionType" /> <parameter id="pl.rybarski.firms.production" name="production"
type="java.lang.String" />
<parameter id="pl.rybarski.firms.size" name="size"
type="java.lang.Double" />
</parameters>
<firmset>
<firm id="0">
<name>Cebal Tuba Sp. z o.o.</name>
<data>
<parameter id="pl.rybarski.firms.size">11582.0</parameter> <parameter id="pl.rybarski.firms.power">21.0</parameter> <parameter id="pl.rybarski.firms.gas">32.0</parameter> <parameter id="pl.rybarski.firms.water">21.0</parameter> <parameter id="pl.rybarski.firms.production">tworzywa sztuczne - opakowania polietylenowe</parameter>
<parameter
id="pl.rybarski.firms.trade">chemiczna</parameter> <parameter
id="pl.rybarski.firms.investition">1.12E7</parameter>
<parameter id="pl.rybarski.firms.workers">45</parameter> <parameter id="pl.rybarski.firms.enviroment">
<en id="enviroment" value="średnia" /> <en id="persons" value="średnia" />
</parameter>
<parameter id="pl.rybarski.firms.contribution">
<con country="Francja" value="58.0" />
<con country="Polska" value="42.0" />
</parameter>
<parameter id="pl.rybarski.firms.productionType"> <prod>produkcyjna</prod>
</parameter>
<parameter id="pl.rybarski.firms.transport"> <trans>samochodowy</trans>
</parameter>
</data>
</firm>
<firm id="1">
<name>Steijn Paper Sp. z o.o.</name>
<data>
<parameter id="pl.rybarski.firms.size">
8829.0
</parameter>
<parameter id="pl.rybarski.firms.power">85.0</parameter> <parameter id="pl.rybarski.firms.gas">10.0</parameter> <parameter id="pl.rybarski.firms.water">85.0</parameter>
<parameter id="pl.rybarski.firms.production">
papiernicza - papier transferowy
</parameter> <parameter id="pl.rybarski.firms.trade"> papiernicza </parameter> <parameter id="pl.rybarski.firms.investition"> 2.5E7 </parameter>
<parameter id="pl.rybarski.firms.workers">80</parameter> <parameter id="pl.rybarski.firms.enviroment">
<en id="enviroment" value="średnia" /> <en id="persons" value="średnia" />
</parameter>
<parameter id="pl.rybarski.firms.contribution">
<con country="Holandia" value="100.0" />
</parameter>
<parameter id="pl.rybarski.firms.productionType"> <prod>produkcyjna</prod>
</parameter>
<parameter id="pl.rybarski.firms.transport"> <trans>samochodowy</trans> <trans>PKP</trans> </parameter> </data> </firm> </firmset> </firms>
Listing. 1 Plik zawierający informacje o firmach
Prezentowany plik ten został podzielony na dwie części. W pierwszej znajdują się informacje na temat typu danych oraz ich identyfikatory, pozwalające wczytać określone dane do systemu. Identyfikatory te odpowiadają identyfikatorom funkcji odpowiedzialnych za deserializację (ang. deserialization) danych (odczytywanie danych z dysku). Funkcje wczytujące muszą zostać stworzone indywidualnie dla kaŜdego rodzaju danych, a następnie zostać wczytane do modułu odpowiedzialnego za deserializację. W drugiej części pliku znajdują się konkretne wartości liczbowe bądź opisowe, które zostaną wczytane do systemu. Rozwiązanie, pomimo iŜ umoŜliwia wczytanie danych dowolnego rodzaju, posiada jedną wadę. W momencie pobierania danych z „metamodelu” w celu np. obliczenia wartość koszyka firm, konieczne jest ich rzutowanie do określonego typu (do typu, który jest w stanie obsłuŜyć dana funkcja), co wymusza narzut czasowy, który opóźnia działanie algorytmu.