forked from s444399/AI
dodanie raportu
This commit is contained in:
parent
9f961c3b25
commit
9c8177b836
@ -2,21 +2,13 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="8264ee8d-5217-4cb6-b982-78f67fabc82e" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/KijowskiM.md" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/WGoracy.md" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/a.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/biohazard.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/electrical.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/flammable.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/kruche.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/demo/radioactive.png" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/yolov3.cfg" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/yolov3.txt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/neurons.py" beforeDir="false" afterPath="$PROJECT_DIR$/neurons.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/LechT.md" beforeDir="false" afterPath="$PROJECT_DIR$/LechT.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/opis/README.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/environment.md" beforeDir="false" afterPath="$PROJECT_DIR$/opis/environment.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/LechT.md" beforeDir="false" afterPath="$PROJECT_DIR$/LechT.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/funkcje.py" beforeDir="false" afterPath="$PROJECT_DIR$/funkcje.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/genetyczne.py" beforeDir="false" afterPath="$PROJECT_DIR$/genetyczne.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/environment.md" beforeDir="false" afterPath="$PROJECT_DIR$/environment.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/opis/route-planning.md" beforeDir="false" afterPath="$PROJECT_DIR$/route-planning.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/program.py" beforeDir="false" afterPath="$PROJECT_DIR$/program.py" afterDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
@ -25,28 +17,6 @@
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="DockManager">
|
||||
<window id="2">
|
||||
<content type="file-editors">
|
||||
<state>
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/LechT.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="170">
|
||||
<caret line="10" selection-start-line="10" selection-end-line="10" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</state>
|
||||
</content>
|
||||
</window>
|
||||
</component>
|
||||
<component name="FavoritesManager">
|
||||
<favorites_list name="AI" />
|
||||
</component>
|
||||
@ -55,8 +25,8 @@
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/program.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="272">
|
||||
<caret line="16" selection-start-line="16" selection-end-line="16" />
|
||||
<state relative-caret-position="52">
|
||||
<caret line="20" selection-start-line="20" selection-end-line="20" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
@ -65,34 +35,13 @@
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Gene.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="136">
|
||||
<caret line="8" selection-start-line="8" selection-end-line="8" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="612">
|
||||
<caret line="36" column="24" selection-start-line="36" selection-start-column="24" selection-end-line="36" selection-end-column="24" />
|
||||
<folding>
|
||||
<element signature="e#0#21#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/AStar.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="595">
|
||||
<caret line="35" selection-start-line="35" selection-end-line="35" />
|
||||
<folding>
|
||||
<element signature="e#0#12#0" expanded="true" />
|
||||
</folding>
|
||||
<entry file="file://$PROJECT_DIR$/KijowskiM.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="652">
|
||||
<caret line="73" column="64" selection-start-line="73" selection-start-column="64" selection-end-line="73" selection-end-column="64" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@ -100,39 +49,20 @@
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/funkcje.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1292">
|
||||
<caret line="81" selection-start-line="81" selection-end-line="81" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/shelf.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-46">
|
||||
<caret line="2" column="11" selection-start-line="2" selection-start-column="6" selection-end-line="2" selection-end-column="11" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/WGoracy.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor />
|
||||
<second_editor />
|
||||
<state relative-caret-position="137">
|
||||
<caret line="183" selection-start-line="183" selection-end-line="183" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/opis/route-planning.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="629">
|
||||
<caret line="37" column="3" lean-forward="true" selection-start-line="37" selection-start-column="3" selection-end-line="37" selection-end-column="3" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
<entry file="file://$PROJECT_DIR$/genetyczne.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="169">
|
||||
<caret line="32" column="13" lean-forward="true" selection-start-line="32" selection-start-column="13" selection-end-line="32" selection-end-column="13" />
|
||||
<folding>
|
||||
<element signature="e#0#21#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@ -148,9 +78,6 @@
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>whereDecision</find>
|
||||
<find>genMa</find>
|
||||
<find>mapfor</find>
|
||||
<find>tmp</find>
|
||||
<find>global</find>
|
||||
<find>cop</find>
|
||||
@ -178,6 +105,9 @@
|
||||
<find>update</find>
|
||||
<find>za</find>
|
||||
<find>data.gen</find>
|
||||
<find>muta</find>
|
||||
<find>mutate</find>
|
||||
<find>od tego mom</find>
|
||||
</findStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
@ -211,16 +141,17 @@
|
||||
<option value="$PROJECT_DIR$/genetyczny/Data.py" />
|
||||
<option value="$PROJECT_DIR$/genetyczny/eee.py" />
|
||||
<option value="$PROJECT_DIR$/genetyczny/genetyczne.py" />
|
||||
<option value="$PROJECT_DIR$/program.py" />
|
||||
<option value="$PROJECT_DIR$/genetyczne.py" />
|
||||
<option value="$PROJECT_DIR$/opis/environment.md" />
|
||||
<option value="$PROJECT_DIR$/program.py" />
|
||||
<option value="$PROJECT_DIR$/funkcje.py" />
|
||||
<option value="$PROJECT_DIR$/genetyczne.py" />
|
||||
<option value="$PROJECT_DIR$/LechT.md" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="1912" />
|
||||
<option name="y" value="-8" />
|
||||
<option name="x" value="2064" />
|
||||
<option name="y" value="-9" />
|
||||
<option name="width" value="606" />
|
||||
<option name="height" value="838" />
|
||||
</component>
|
||||
@ -240,11 +171,6 @@
|
||||
<item name="AI" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="AI" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="AI" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="AI" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="opis" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
@ -258,6 +184,7 @@
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="C:\Users\zwyklak\Desktop\AI" />
|
||||
<recent name="C:\Users\zwyklak\Desktop\AI\images" />
|
||||
<recent name="C:\Users\zwyklak\Desktop\AI\genetyczny" />
|
||||
<recent name="C:\Users\zwyklak\Desktop\AI\opis" />
|
||||
<recent name="C:\Users\zwyklak\Desktop\AI\Mapa" />
|
||||
@ -419,15 +346,15 @@
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="1912" y="-8" width="1216" height="1576" extended-state="6" />
|
||||
<layout>
|
||||
<window_info content_ui="combo" id="Project" order="0" sideWeight="0.4995206" visible="true" weight="0.27854672" />
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.4995206" visible="true" weight="0.45328718" />
|
||||
<window_info id="Structure" order="1" sideWeight="0.5004794" side_tool="true" weight="0.3382353" />
|
||||
<window_info id="Favorites" order="2" sideWeight="0.5011338" side_tool="true" weight="0.27768165" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" weight="0.32640332" />
|
||||
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49932885" visible="true" weight="0.103257105" />
|
||||
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.49932885" visible="true" weight="0.103257105" />
|
||||
<window_info anchor="bottom" id="Cvs" order="3" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="4" weight="0.4" />
|
||||
<window_info anchor="bottom" x="1942" y="641" width="1156" height="277" id="Debug" order="5" sideWeight="0.49932885" weight="0.41359773" />
|
||||
<window_info anchor="bottom" x="1942" y="641" width="1156" height="277" id="Debug" order="5" sideWeight="0.49932885" weight="0.41302842" />
|
||||
<window_info anchor="bottom" id="TODO" order="6" weight="0.32848233" />
|
||||
<window_info anchor="bottom" id="Version Control" order="7" weight="0.32848233" />
|
||||
<window_info anchor="bottom" id="Terminal" order="8" weight="0.32848233" />
|
||||
@ -465,9 +392,9 @@
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/program.py</url>
|
||||
<line>171</line>
|
||||
<option name="timeStamp" value="230" />
|
||||
<url>file://$PROJECT_DIR$/genetyczne.py</url>
|
||||
<line>94</line>
|
||||
<option name="timeStamp" value="231" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
<default-breakpoints>
|
||||
@ -615,7 +542,7 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/opis/environment.md">
|
||||
<entry file="file://$PROJECT_DIR$/environment.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor>
|
||||
@ -625,23 +552,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/program.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="272">
|
||||
<caret line="16" selection-start-line="16" selection-end-line="16" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Gene.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="136">
|
||||
<caret line="8" selection-start-line="8" selection-end-line="8" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="612">
|
||||
@ -662,13 +572,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/funkcje.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1292">
|
||||
<caret line="81" selection-start-line="81" selection-end-line="81" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Data.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="289">
|
||||
@ -676,16 +579,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/genetyczne.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-136">
|
||||
<caret line="1" column="21" selection-start-line="1" selection-start-column="21" selection-end-line="1" selection-end-column="21" />
|
||||
<folding>
|
||||
<element signature="e#0#21#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/shelf.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-46">
|
||||
@ -693,6 +586,46 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/route-planning.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="629">
|
||||
<caret line="37" column="3" lean-forward="true" selection-start-line="37" selection-start-column="3" selection-end-line="37" selection-end-column="3" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/Downloads/Untitled Diagram.xml">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/images/dzialanieAlgorytmu.png">
|
||||
<provider selected="true" editor-type-id="images" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/KijowskiM.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="652">
|
||||
<caret line="73" column="64" selection-start-line="73" selection-start-column="64" selection-end-line="73" selection-end-column="64" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Gene.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="136">
|
||||
<caret line="8" column="31" lean-forward="true" selection-start-line="8" selection-start-column="31" selection-end-line="8" selection-end-column="31" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/funkcje.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="137">
|
||||
<caret line="183" selection-start-line="183" selection-end-line="183" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/WGoracy.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
@ -701,33 +634,33 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/KijowskiM.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="-663">
|
||||
<caret line="6" lean-forward="true" selection-start-line="6" selection-end-line="6" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
<entry file="file://$PROJECT_DIR$/program.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="52">
|
||||
<caret line="20" selection-start-line="20" selection-end-line="20" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/LechT.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="170">
|
||||
<caret line="10" selection-start-line="10" selection-end-line="10" />
|
||||
<first_editor relative-caret-position="57">
|
||||
<caret line="89" column="110" selection-start-line="89" selection-start-column="110" selection-end-line="89" selection-end-column="110" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/opis/route-planning.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="629">
|
||||
<caret line="37" column="3" lean-forward="true" selection-start-line="37" selection-start-column="3" selection-end-line="37" selection-end-column="3" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
<entry file="file://$PROJECT_DIR$/genetyczne.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="169">
|
||||
<caret line="32" column="13" lean-forward="true" selection-start-line="32" selection-start-column="13" selection-end-line="32" selection-end-column="13" />
|
||||
<folding>
|
||||
<element signature="e#0#21#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
311
LechT.md
311
LechT.md
@ -5,7 +5,316 @@
|
||||
|
||||
|
||||
Celem projektu jest znalezienie najoptymalniejszej drogi między zajętymi regałami a miejscami odbioru paczki.
|
||||
Projekt wykorzystuje wcześniej opracowany algorytm AStar, który jest opisany w pliku [route-planning](https://git.wmi.amu.edu.pl/s444399/AI/src/master/route-planning.md)
|
||||
Projekt wykorzystuje wcześniej opracowany algorytm AStar, który jest opisany w pliku [route-planning](https://git.wmi.amu.edu.pl/s444399/AI/src/master/route-planning.md).
|
||||
Moduł podprojektu uruchamia się po uruchomieniu programu oraz kliknięciu **g** na klawiaturze. Omawiany moduł genetyczny podprojektu w dalszej części raportu będzie się pojawiał w skrócie jako **mdg**.
|
||||
|
||||
### Opis składowych elementów wykorzystanych w **mdg**
|
||||
* Gen - jest to najmniejszy wykorzystywany obiekt, reprezentujący zajęty regał, kóry ma określony koszt do danego miejsca odbioru
|
||||
* Chromosom - jest to uporządkowany zbiór Genów, który reprezentuje kolejność odbioru paczek, końcowa długość wynika z ilości paczek na magazynie.
|
||||
* Populacja - jest to zbiór chromosomów.
|
||||
* Funkcja fitness - funkcja obliczająca całkowity koszt chromosomu.
|
||||
* Selekcja - składowa odpowiedzialna za wybór najlepszych chromosomów z pośród populacji.
|
||||
* Crossover - składowa odpowiedzialna za generowanie nowej populacji uwzględniając współczynnik mutacji, wielkość dziedziczonego fragmentu oraz otrzymane podczas selekcji chromosomy.
|
||||
|
||||
|
||||
|
||||
### Dane wejściowe
|
||||
|
||||
Podane przez urzydkownika przed uruchomieniem programu:
|
||||
|
||||
* ileGeneracji - wartość, która definiuje ile generacji ma się wykonać po uruchomieniu modułu **mdg**,
|
||||
* ileWPopulacji - wartość, która definiuje ile chromosomów ma się znajdować w Populacji
|
||||
* fragment - wartość z zakresu (0,1), która względnie do długości chromosomu określa fragment, który będzie dziedziczony, przy tworzeniu nowego chromosomu.
|
||||
* mutacja - wartość z zakresu (0,1), która określa jaka część nowo tworzonego chromosomu, po dziedziczeniu, ma zostać losowo zmieniona.
|
||||
* unbox - wartość określająca do jakiego miejsca odbioru ma się kierować wózek
|
||||
<br/>
|
||||
0 - losowe miejsce odbioru <br/>
|
||||
1 - miejsce odbioru tylko po lewej stronie mapy <br/>
|
||||
2 - miejsce odbioru tylko po prawej stronie mapy <br/>
|
||||
3 - miejsce odbioru wybierane korzystniej na podstawie kosztu
|
||||
<br/><br/>
|
||||
Po uruchomieniu programu:
|
||||
|
||||
* generowanie losowo rozmieszczonych paczek na regałach - za przycisku **r** na klawiaturze.
|
||||
|
||||
|
||||
### Integracja
|
||||
|
||||
|
||||
|
||||
*W pliku program.py* <br/>
|
||||
Uruchomienie **mdg**:
|
||||
|
||||
if event.key == pygame.K_g:
|
||||
start(self.data,self.wheel)
|
||||
|
||||
Po zakończeniu algorytmu, uruchaminy modul który rozwiezie paczki do miejsca odbioru:
|
||||
|
||||
for gen in self.data.best[0]:
|
||||
if(gen.unboxWczesniejszegoGenu == None):
|
||||
kordStartowy = (self.wheel.ns, self.wheel.we)
|
||||
else:
|
||||
kordStartowy = self.data.unbox[gen.unboxWczesniejszegoGenu]
|
||||
|
||||
zbierzBox(gen,self.data, self.moves, kordStartowy)
|
||||
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def start(data, wheel):
|
||||
|
||||
ileGeneracji = 20
|
||||
ileWPopulacji = 16
|
||||
fragment = 0.5
|
||||
mutacja = 0.05
|
||||
unbox = 3
|
||||
|
||||
data.kordyWozka = (wheel.ns, wheel.we)
|
||||
data.jakLiczycKoszt = unbox
|
||||
|
||||
randomPopulation = genRandomPopulation(data, ileWPopulacji)
|
||||
for i in range(ileGeneracji):
|
||||
if i == 0:
|
||||
best2 = dwieNajlepsze(randomPopulation, data)
|
||||
else:
|
||||
x = genPopulacje(data,best2[0], best2[1], ileWPopulacji, fragment, mutacja)
|
||||
best2 = dwieNajlepsze(x, data)
|
||||
del x
|
||||
|
||||
data.histZmian.append(data.best[1])
|
||||
|
||||
|
||||
rysujWykres(data, ileGeneracji, 0, 2000)
|
||||
|
||||
W celu modyfikacji danych wejściowych należy zmienić wartości zmiennych, pamiętając o podanych powyrzej ograniczeniach.
|
||||
|
||||
Powyżej fragment kodu reprezentujący działanie pętli, której iteracje odpowiadają tworzeniom nowych generacji.
|
||||
|
||||
###Sposób działania algorytmu:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[<center> Generowanie <br/> losowego <br/>chromosomu<center/>]
|
||||
B[<center> Generowanie <br/> losowej <br/> populacji <center/>]
|
||||
|
||||
C[<center> Selekcyjny <br/> wybór najlepszych chromosomów <br/>z pośród populacji <center/>]
|
||||
D[Generowanie nowej populacji z podanych chromosomów]
|
||||
E[Ilość generacji]
|
||||
|
||||
A --> B
|
||||
B --> C
|
||||
C --> D
|
||||
D --> E
|
||||
E --> C
|
||||
```
|
||||
###Implementacja
|
||||
#### Generowanie losowego chromosomu
|
||||
*W pliku Gene.py*
|
||||
|
||||
Klasa Gene:
|
||||
|
||||
class Gene:
|
||||
def __init__(self):
|
||||
self.kordy = None
|
||||
self.unbox1 = None
|
||||
self.unbox2 = None
|
||||
self.unboxWczesniejszegoGenu = None
|
||||
self.kordyUnboxa = None
|
||||
|
||||
Odpowiednio:
|
||||
* kordy - krotka z koordynatami regału
|
||||
* unbox1 - koszt potrzebny do przejazdu z miejsca regału do miejsca oddania paczki po lewej stronie mapy
|
||||
* unbox2 - koszty potrzebny do przejazdu z miejsca regału do miejsca oddania paczki po prawej stronie mapy
|
||||
* unboxWczesniejszegoGenu - wartość (0 lub 1) która definiuje z jakiego miejsca oddania paczki jechał wózek do regału reprezentowanego przez ten gen
|
||||
* kordyUnboxa - koordynaty miejsca oddania paczki do którego będzie jechać wózek
|
||||
|
||||
Od tego momentu miejsce oddania paczki będzie określane jako **unbox**
|
||||
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def generateGeny(data):
|
||||
geny = []
|
||||
zajeteRegaly = data.zajeteRegaly[:]
|
||||
for r in zajeteRegaly:
|
||||
g = Gene()
|
||||
g.kordy = r
|
||||
g.unbox1 = policzCost(data.astarMap,r,data.unbox[0])
|
||||
if(len(data.unbox) > 1):
|
||||
g.unbox2 = policzCost(data.astarMap,r,data.unbox[1])
|
||||
geny.append(g)
|
||||
return geny
|
||||
|
||||
def genRandomChromosome(data):
|
||||
chromosome = generateGeny(data)
|
||||
random.shuffle(chromosome)
|
||||
unboxLastGen = None
|
||||
|
||||
for gen in chromosome:
|
||||
gen.unboxWczesniejszegoGenu = unboxLastGen
|
||||
krotkaKosztJakiUnbox = wybierzUnbox(gen, data.jakLiczycKoszt)
|
||||
unboxLastGen = krotkaKosztJakiUnbox[1]
|
||||
gen.kordyUnboxa = data.unbox[krotkaKosztJakiUnbox[1]]
|
||||
return chromosome
|
||||
|
||||
Odpowiednio:
|
||||
* Funkcja *generateGeny* generuje oraz oblicza wartości unboxów dla danego regału oraz zwraca je jako listę genów
|
||||
* Funkcja *genRandomChromosome* losowo miesza wygenerowane geny oraz dla podanej wartości **unbox** (podanej przy uruchomieniu programu) zapisuje w genach wartości odpowiadające koodrynatom unboxa oraz z jakiego unboxa wózek przyjedzie. W przypadku pierwszego genu, do którego wózek będzie jechać z określonego miejsca ta wartość pozostaje *None*. Funkcja zwraca spójny chromosom.
|
||||
|
||||
#### Generowanie Losowej populacji
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def genRandomPopulation(data, ileWPopulacji):
|
||||
populacja = []
|
||||
for i in range(ileWPopulacji):
|
||||
populacja.append(genRandomChromosome(data))
|
||||
return populacja
|
||||
Odpowiednio:
|
||||
* Dla podanej wartości *ileWPopulacji* funkcja generuje losową populację wykorzystując metodę losowego chromosomu, wykonując tyle iteracji ile wynosi wartość.
|
||||
|
||||
#### Selekcyjny wybór najlepszych chromosomów z pośród populacji na podstawie funkcji fitness
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def fitness(chromosome, data):
|
||||
koszt = 0
|
||||
unboxPoprzedniegoGenu = None
|
||||
|
||||
for item, gen in enumerate(chromosome):
|
||||
if(item == 0):
|
||||
koszt += policzCost(data.astarMap, data.kordyWozka, gen.kordy)
|
||||
krotkaKosztJakiUnbox = wybierzUnbox(gen, data.jakLiczycKoszt)
|
||||
koszt += krotkaKosztJakiUnbox[0]
|
||||
unboxPoprzedniegoGenu = krotkaKosztJakiUnbox[1]
|
||||
|
||||
else:
|
||||
if unboxPoprzedniegoGenu == 0:
|
||||
koszt += gen.unbox1
|
||||
elif unboxPoprzedniegoGenu == 1:
|
||||
koszt += gen.unbox2
|
||||
|
||||
krotkaKosztJakiUnbox = wybierzUnbox(gen, data.jakLiczycKoszt)
|
||||
koszt += krotkaKosztJakiUnbox[0]
|
||||
unboxPoprzedniegoGenu = krotkaKosztJakiUnbox[1]
|
||||
|
||||
|
||||
return koszt
|
||||
|
||||
Odpowiednio:
|
||||
* Zmienna *koszt* jest sumą całkowitą kosztów przejechania trasy.
|
||||
* Pętla *for* iteruje się tyle razy ile jest genów w chromosomie.
|
||||
* W pierwszej iteracji koszt jest liczony dla pierwszego genu w chromosomie wywołując AStar, z pozycji początkowej wózka do miejsca regału.
|
||||
* Dla reszty iteracji jest sprawdzane do którego unboxa będzie jechać wózek, i taka wartość kosztu jest dodawana co całkowitej sumy oraz koszt przejechania od unboxa poprzedniego genu do regału (zmienna *unboxPoprzedniegoGenu*)
|
||||
|
||||
|
||||
def dwieNajlepsze(populacja, data):
|
||||
tmpPopulacja = populacja[:]
|
||||
chromFitness = []
|
||||
|
||||
for chrom in populacja:
|
||||
chromFitness.append(fitness(chrom,data))
|
||||
|
||||
bestValue = min(chromFitness)
|
||||
bestChromIndex = chromFitness.index(bestValue)
|
||||
pierwsza = tmpPopulacja[bestChromIndex]
|
||||
if (data.best == None):
|
||||
data.best = (pierwsza[:],bestValue)
|
||||
elif(data.best[1] > bestValue):
|
||||
data.best = (pierwsza[:],bestValue)
|
||||
data.doWykresu.append(bestValue)
|
||||
|
||||
tmpPopulacja.pop(bestChromIndex)
|
||||
chromFitness.pop(bestChromIndex)
|
||||
|
||||
bestValue = min(chromFitness)
|
||||
bestChromIndex = chromFitness.index(bestValue)
|
||||
druga = tmpPopulacja[bestChromIndex]
|
||||
tmpPopulacja.pop(bestChromIndex)
|
||||
chromFitness.pop(bestChromIndex)
|
||||
|
||||
|
||||
return (pierwsza, druga)
|
||||
|
||||
Funkcja selekcji dla której odpowiednio:
|
||||
* W pierwszej pętli *for* tworzy się lista *chromFitness* przetrzymująca wartości kosztów dla danego chromosomu. Wartości w *chromFitness* odpowiadają chromosomom na tych samych indeksach w liście populacja.
|
||||
* Zmienna *bestValue* reprezentuje najlepszy koszt z danej populacji
|
||||
* Zmienna *pierwsza* reprezentuje chromosom o najkorzystniejszym koszcie.
|
||||
* Zmienna *druga* reprezentuje chromosom o drugim co do wartości najkorzystniejszym koszcie.
|
||||
* W zmiennej *best* klasy obiektu *data* zapisywana jest krotka odpowiednio (chromosom,koszt) najlepszego chromosomu.
|
||||
* Funkcja zwraca krotkę z dwoma najlepszymi chromosomami w populacji.
|
||||
|
||||
#### Generowanie nowej populacji - Crossover
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def crossover(data,pierwszy, drugi, fragmentLiczba, wspMutacji):
|
||||
ileWChrom = len(pierwszy)
|
||||
tmp = random.randint(0, ileWChrom-fragmentLiczba)
|
||||
kordyFragment = (tmp,tmp+fragmentLiczba)
|
||||
nowyChrom = [Gene() for q in range(ileWChrom)]
|
||||
iterator = kordyFragment[1]
|
||||
pomIterator = kordyFragment[1]
|
||||
usedKordy = []
|
||||
for i in range(kordyFragment[0],kordyFragment[1]):
|
||||
nowyChrom[i].kordy = pierwszy[i].kordy
|
||||
nowyChrom[i].unbox1 = pierwszy[i].unbox1
|
||||
nowyChrom[i].unbox2 = pierwszy[i].unbox2
|
||||
usedKordy.append(pierwszy[i].kordy)
|
||||
|
||||
for x in range(ileWChrom):
|
||||
if(iterator > ileWChrom - 1):
|
||||
iterator = 0
|
||||
if(pomIterator > ileWChrom - 1):
|
||||
pomIterator = 0
|
||||
if(nowyChrom[iterator].kordy == None and drugi[pomIterator].kordy not in usedKordy):
|
||||
nowyChrom[iterator].kordy = drugi[pomIterator].kordy
|
||||
nowyChrom[iterator].kordy = drugi[pomIterator].kordy
|
||||
nowyChrom[iterator].unbox1 = drugi[pomIterator].unbox1
|
||||
nowyChrom[iterator].unbox2 = drugi[pomIterator].unbox2
|
||||
iterator += 1
|
||||
pomIterator += 1
|
||||
else:
|
||||
pomIterator +=1
|
||||
|
||||
nowyChrom = mutate(wspMutacji, nowyChrom)
|
||||
unboxLastGen = None
|
||||
|
||||
for gen in nowyChrom:
|
||||
gen.unboxWczesniejszegoGenu = unboxLastGen
|
||||
krotkaKosztJakiUnbox = wybierzUnbox(gen, data.jakLiczycKoszt)
|
||||
unboxLastGen = krotkaKosztJakiUnbox[1]
|
||||
gen.kordyUnboxa = data.unbox[krotkaKosztJakiUnbox[1]]
|
||||
|
||||
return nowyChrom
|
||||
|
||||
Odpowiednio:
|
||||
* Dane wejściowe są to:
|
||||
* *pierwszy*, *drugi* - wybrane najkorzystniejsze chromosomy, z których ma powstać nowy chromosom
|
||||
* *fragmentLiczba* - jest to liczba reprezentująca jaki fragment z **pierwszego** chromosomu zostanie bezpośrednio skopiowany do nowego chromosomu, ten fragment jest wybierany losowo spośród chromosomu natomiast jego długość jest określona procentowo i zależy od podanej wartości (oraz ilości genów w chromosomoie)
|
||||
* *wspMutacji* - jest to liczba reprezentująca jak wiele par w chromosomie zostanie zamienionych miejscami.
|
||||
* Zmienne pomocnicze:
|
||||
* *iterator*, *pomIterator* - w pierwszych dwóch instrukcjach warunkowych jest pilnowane aby iterując się nie przekroczyły dopuszczalnej wartości (odpowiadają one indeksom w kolejce). *Iterato* jest indeksem w nowym, tworzonym chromosomie. *pomIterator* jest indeksem który przechodzi przez **drugi** podany chromosom.
|
||||
* lista *usedKordy* - do niej są dodawane koordynaty genów, które zostały skopiowane z **pierwszego** chromosomu, aby geny o tych samych koordynatach z **drugiego** chromosomu nie zostały zapisane w nowym chromosomie.
|
||||
* Następuje skopiowanie fagmentu z **pierwszego** chromosomu, w pierwszej pętli *for* wykonuje się przepisanie wartości do powstającego chromosomu. W drugiej pętli *for* następuje przepisanie pozostałych wartości z **drugiego** chromosomu do powstającego chromosomu.
|
||||
* Po przepisaniu wartości według wspMutacji jest dokonywana zamiana genów w nowym chromosomie.
|
||||
* Ostatnia pętla **for** łączy geny ze sobą (zapisując unbox poprzedniego genu)
|
||||
|
||||
*W pliku genetyczne.py*
|
||||
|
||||
def genPopulacje(data,pierwszy, drugi, ileWPopulacji, fragmentLiczba, wspMutacji):
|
||||
ileWChrom = len(pierwszy)
|
||||
fragment = round(fragmentLiczba*ileWChrom)
|
||||
if(fragment == 1):
|
||||
fragment +=1
|
||||
nowaPopulacja = []
|
||||
|
||||
for i in range(ileWPopulacji):
|
||||
nowaPopulacja.append(crossover(data,pierwszy,drugi,fragment, wspMutacji))
|
||||
|
||||
return nowaPopulacja
|
||||
Odpowiednio:
|
||||
* W pętli *for* tworzone są nowe chromosomy z **pierwszego** oraz **drugiego** najlepszego chromosomu z poprzedniej generacji.
|
||||
* Nowe chromosomy zapisywane są do *nowaPopulacja*
|
||||
* Z powstałej populacji na nowo selekcjonowane są dwa najlepsze, z których będą powstawać nowe populacje w zależności od wartości podanych generacji.
|
||||
|
||||
### Dalsze działanie programu
|
||||
|
||||
Po wykonaniu iteracji uruchamia się okienko pokazujące wykres najlepszych wag otrzymywanych w danej populacji.
|
||||
|
||||
Po zamknięciu okienka wózek zaczyna rozwozić paczki do miejsc oddania paczki.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
12
funkcje.py
12
funkcje.py
@ -181,17 +181,7 @@ def updateMap(data, map, mapForAstar, regals):
|
||||
data.zajeteRegaly = znajdzBox(map, regals)
|
||||
data.astarMap = data.genMap(mapForAstar)
|
||||
|
||||
def mutate(wspMutacji, chrom): #w zaleznosci od tego jak wiele mutwac wybierz pary i zamien miejscami
|
||||
ileWChrom = len(chrom)
|
||||
ileZmian = round(ileWChrom * wspMutacji)
|
||||
for i in range(ileZmian):
|
||||
pom = None
|
||||
pierw = random.randint(0,ileWChrom - 1)
|
||||
drug = random.randint(0,ileWChrom - 1)
|
||||
pom = chrom[pierw]
|
||||
chrom[pierw] = chrom[drug]
|
||||
chrom[drug] = pom
|
||||
return chrom
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -9,7 +9,6 @@ def start(data, wheel):
|
||||
mutacja = 0.05
|
||||
unbox = 3
|
||||
|
||||
|
||||
data.kordyWozka = (wheel.ns, wheel.we)
|
||||
data.jakLiczycKoszt = unbox
|
||||
|
||||
@ -148,6 +147,8 @@ def crossover(data,pierwszy, drugi, fragmentLiczba, wspMutacji):
|
||||
nowyChrom = mutate(wspMutacji, nowyChrom)
|
||||
unboxLastGen = None
|
||||
|
||||
|
||||
|
||||
for gen in nowyChrom:
|
||||
gen.unboxWczesniejszegoGenu = unboxLastGen
|
||||
krotkaKosztJakiUnbox = wybierzUnbox(gen, data.jakLiczycKoszt)
|
||||
@ -168,3 +169,15 @@ def genPopulacje(data,pierwszy, drugi, ileWPopulacji, fragmentLiczba, wspMutacji
|
||||
nowaPopulacja.append(crossover(data,pierwszy,drugi,fragment, wspMutacji))
|
||||
|
||||
return nowaPopulacja
|
||||
|
||||
def mutate(wspMutacji, chrom): #w zaleznosci od tego jak wiele mutwac wybierz pary i zamien miejscami
|
||||
ileWChrom = len(chrom)
|
||||
ileZmian = round(ileWChrom * wspMutacji)
|
||||
for i in range(ileZmian):
|
||||
pom = None
|
||||
pierw = random.randint(0,ileWChrom - 1)
|
||||
drug = random.randint(0,ileWChrom - 1)
|
||||
pom = chrom[pierw]
|
||||
chrom[pierw] = chrom[drug]
|
||||
chrom[drug] = pom
|
||||
return chrom
|
@ -55,8 +55,8 @@ class MainWindow:
|
||||
self.map[i][j] = Shelf(self.screen, self.cell, i, j, (self.map[i][j]-3)%4, (self.map[i][j]-3)//4)
|
||||
self.mapForAStar[i][j] = 1
|
||||
|
||||
self.map = randomBox(self.map, self.regals, 15)
|
||||
updateMap(self.data, self.map, self.mapForAStar, self.regals)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -96,6 +96,9 @@ class MainWindow:
|
||||
kordStartowy = self.data.unbox[gen.unboxWczesniejszegoGenu]
|
||||
|
||||
zbierzBox(gen,self.data, self.moves, kordStartowy)
|
||||
elif(event.key== pygame.K_r):
|
||||
self.map = randomBox(self.map, self.regals, 15)
|
||||
updateMap(self.data, self.map, self.mapForAStar, self.regals)
|
||||
elif len(self.moves)==0:
|
||||
self.wheel.move(event, self.map)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user