From 1dbabd4db38b9b705310ebf60e6f2e1e08ed6c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Garc=C3=ADa=20Rodr=C3=ADguez?= Date: Thu, 21 Sep 2017 22:11:01 +0200 Subject: [PATCH] New App, Simulink Models, Runge-Kutta simulation method for TSP and GQKP, improved documentation, new examples, minor bugs and enhancements Bug fixing: #35 Checkpoint fails when using divide-conquer simulation method Enhancements: #10 Enable phase visualization in Divide-and-Conquer #28 Create Hopfield Network for Simulink #50 Update Hopfield Net TSP solver App #51 Runge-Kutta simulation method #52 energyplot function for HopfieldNetworkGQKP #53 Improve documentation #54 New examples for 2-opt, simulink models and GQKP Tasks: #23 TSPLIB help page not linked in User's Guide --- Hopfield Net TSP solver.prj | 382 ++++------------ Hopfield Network Toolbox.prj | 52 ++- README.md | 7 +- .../HopfieldNetworkTSPApp.m | 9 +- .../@HopfieldNetworkTSPApp/cb_closeApp.m | 14 + .../@HopfieldNetworkTSPApp/cb_findTour.m | 12 +- chn/+apps/@HopfieldNetworkTSPApp/cb_scheme.m | 37 ++ chn/+apps/@HopfieldNetworkTSPApp/cb_simFcn.m | 40 +- .../cb_tabPolygonNcities.m | 2 +- .../@HopfieldNetworkTSPApp/cb_tabTSPLIBmenu.m | 4 + chn/+apps/@HopfieldNetworkTSPApp/cleanState.m | 3 + .../@HopfieldNetworkTSPApp/createFigure.m | 26 +- .../createTspHopfieldNet.m | 2 +- .../verifyProblemIsSelected.m | 12 + .../HopfieldNetworkGQKP.m | 4 + .../@HopfieldNetworkGQKP/energyplot.m | 22 + chn/+network/@HopfieldNetworkGQKP/sim.m | 73 +++- chn/+network/@HopfieldNetworkGQKP/train.m | 2 +- .../@HopfieldNetworkTSP/HopfieldNetworkTSP.m | 2 +- chn/+network/@HopfieldNetworkTSP/energyplot.m | 25 +- chn/+network/@HopfieldNetworkTSP/plot.m | 3 +- chn/+network/@HopfieldNetworkTSP/saddle.m | 2 +- chn/+network/@HopfieldNetworkTSP/setOptions.m | 3 +- chn/+network/@HopfieldNetworkTSP/sim.m | 94 ++-- chn/+options/HopfieldNetworkOptions.m | 2 +- chn/+options/HopfieldNetworkTSPOptions.m | 11 +- chn/+utils/+checkpoint/createFilename.m | 4 +- chn/+utils/+checkpoint/loggingData.m | 6 +- chn/+utils/@TSPLIB/{tsplib.m => TSPLIB.m} | 2 +- ...dOptimumTour.m => findOptimumTourLength.m} | 2 +- chn/+utils/@TSPLIB/plot.m | 2 +- chn/+utils/@TSPLIB/problemNames.m | 4 + chn/continuousHopfieldNetwork.slx | Bin 0 -> 23928 bytes chn/discreteHopfieldNetwork.slx | Bin 0 -> 24018 bytes chn/hopfieldNetworkTSPApp.m | 5 + help/Example_GQKPusingCHN.m | 63 +++ help/Example_SimulinkContinuous.m | 40 ++ help/Example_SimulinkDiscrete.m | 37 ++ help/Example_tsp2opt.m | 42 ++ help/Example_tspDivideConquer.m | 14 +- help/Example_tspUsingCoords.m | 2 +- help/Example_tspUsingDistance.m | 2 +- help/Example_tspUsingRegularPolygons.m | 4 + help/Example_tspUsingTSPLIB.m | 8 +- help/demos.xml | 31 +- help/html/CHN_TSP_APP_Tabs.png | Bin 60674 -> 63344 bytes help/html/Example_GQKPusingCHN.html | 159 +++++++ help/html/Example_GQKPusingCHN.png | Bin 0 -> 1600 bytes help/html/Example_GQKPusingCHN_01.png | Bin 0 -> 10062 bytes ...le_GQKPusingCHN_eq00402117310426221833.png | Bin 0 -> 3253 bytes ...le_GQKPusingCHN_eq01573304657958675695.png | Bin 0 -> 1056 bytes ...le_GQKPusingCHN_eq04048434318454198067.png | Bin 0 -> 2744 bytes ...le_GQKPusingCHN_eq06393315845928486594.png | Bin 0 -> 3253 bytes ...le_GQKPusingCHN_eq07602426813975653007.png | Bin 0 -> 5140 bytes ...le_GQKPusingCHN_eq07876467921963818138.png | Bin 0 -> 3008 bytes ...le_GQKPusingCHN_eq14361763071227683630.png | Bin 0 -> 6785 bytes ...le_GQKPusingCHN_eq15343366408291104280.png | Bin 0 -> 1056 bytes ...le_GQKPusingCHN_eq16350391703841992777.png | Bin 0 -> 6785 bytes help/html/Example_SimulinkContinuous.html | 138 ++++++ help/html/Example_SimulinkContinuous.png | Bin 0 -> 1971 bytes help/html/Example_SimulinkContinuous_01.png | Bin 0 -> 16092 bytes help/html/Example_SimulinkDiscrete.html | 127 ++++++ help/html/Example_SimulinkDiscrete.png | Bin 0 -> 1001 bytes help/html/Example_SimulinkDiscrete_01.png | Bin 0 -> 12937 bytes help/html/Example_SimulinkDiscrete_02.png | Bin 0 -> 2740 bytes help/html/Example_tsp2opt.html | 143 ++++++ help/html/Example_tsp2opt.png | Bin 0 -> 4237 bytes help/html/Example_tsp2opt_01.png | Bin 0 -> 41511 bytes help/html/Example_tspDivideConquer.html | 34 +- help/html/Example_tspDivideConquer.png | Bin 4594 -> 4363 bytes help/html/Example_tspDivideConquer_01.png | Bin 42967 -> 42725 bytes help/html/Example_tspReducingC.html | 6 +- help/html/Example_tspReducingC.png | Bin 4549 -> 4354 bytes help/html/Example_tspReducingC_01.png | Bin 22943 -> 23410 bytes help/html/Example_tspReducingC_02.png | Bin 50450 -> 49467 bytes help/html/Example_tspReducingC_03.png | Bin 43466 -> 43343 bytes help/html/Example_tspSaddlePoint.html | 4 +- help/html/Example_tspUsingCoords.html | 8 +- help/html/Example_tspUsingCoords.png | Bin 2796 -> 2578 bytes help/html/Example_tspUsingCoords_01.png | Bin 12880 -> 12257 bytes help/html/Example_tspUsingCoords_02.png | Bin 20411 -> 19371 bytes help/html/Example_tspUsingDistance.html | 6 +- .../html/Example_tspUsingRegularPolygons.html | 18 +- help/html/Example_tspUsingRegularPolygons.png | Bin 2323 -> 2127 bytes .../Example_tspUsingRegularPolygons_01.png | Bin 9833 -> 9175 bytes .../Example_tspUsingRegularPolygons_02.png | Bin 15807 -> 15002 bytes help/html/Example_tspUsingTSPLIB.html | 26 +- help/html/Example_tspUsingTSPLIB.png | Bin 4688 -> 4409 bytes help/html/Example_tspUsingTSPLIB_01.png | Bin 22943 -> 23410 bytes help/html/Example_tspUsingTSPLIB_02.png | Bin 44640 -> 44606 bytes help/html/chn_TSP_APP.html | 14 +- help/html/chn_about.html | 25 +- help/html/chn_concepts.html | 24 +- .../chn_concepts_eq00332925750071872080.png | Bin 0 -> 2526 bytes .../chn_concepts_eq05860965440882434386.png | Bin 0 -> 2633 bytes .../chn_concepts_eq06405532840228356056.png | Bin 0 -> 11387 bytes .../chn_concepts_eq09644380179947857907.png | Bin 0 -> 752 bytes .../chn_concepts_eq12495267164290845698.png | Bin 0 -> 2776 bytes .../chn_concepts_eq14648233979557833510.png | Bin 0 -> 354 bytes .../chn_concepts_eq16806024536423796716.png | Bin 0 -> 1871 bytes .../chn_concepts_eq17093030862495231050.png | Bin 0 -> 3418 bytes .../chn_concepts_eq18358848390578784380.png | Bin 0 -> 2031 bytes help/html/chn_product_page.html | 9 +- help/html/chn_references.html | 136 ++++++ help/html/chn_release_notes.html | 25 +- help/html/chn_system_requirements.html | 9 +- help/html/chn_users_guide.html | 15 +- ...ml => chn_users_guide_SimulinkModels.html} | 13 +- help/html/chn_users_guide_TSP.html | 8 +- help/html/chn_users_guide_hopfieldnet.html | 21 +- ...chn_users_guide_howToUseCreateOptions.html | 379 ---------------- ...s_guide_howToUseTsphopfieldnetOptions.html | 407 ++++++++++++++++++ ...sers_guide_howToUsehopfieldnetOptions.html | 315 ++++++++++++++ help/html/chn_users_guide_improve.html | 2 +- help/html/chn_users_guide_improveHybrid.html | 8 +- help/html/chn_users_guide_tsplib.html | 2 +- help/html/helpsearch-v3/_2t.cfe | Bin 0 -> 268 bytes help/html/helpsearch-v3/_2t.cfs | Bin 0 -> 96162 bytes help/html/helpsearch-v3/_2t.si | Bin 0 -> 258 bytes help/html/helpsearch-v3/_z.cfe | Bin 268 -> 0 bytes help/html/helpsearch-v3/_z.cfs | Bin 55950 -> 0 bytes help/html/helpsearch-v3/_z.si | Bin 255 -> 0 bytes help/html/helpsearch-v3/segments.gen | Bin 20 -> 20 bytes help/html/helpsearch-v3/segments_10 | Bin 81 -> 0 bytes help/html/helpsearch-v3/segments_2u | Bin 0 -> 82 bytes help/html/helptoc.xml | 18 +- help_source/chn_TSP_APP.m | 10 +- help_source/chn_about.m | 21 +- help_source/chn_concepts.m | 16 +- help_source/chn_product_page.m | 5 +- help_source/chn_references.m | 64 +++ help_source/chn_release_notes.m | 11 + help_source/chn_system_requirements.m | 5 +- help_source/chn_users_guide.m | 11 +- help_source/chn_users_guide_SimulinkModels.m | 8 + help_source/chn_users_guide_TSP.m | 4 +- help_source/chn_users_guide_hopfieldnet.m | 17 +- .../chn_users_guide_howToUseCreateOptions.m | 173 -------- ...sers_guide_howToUseTsphopfieldnetOptions.m | 191 ++++++++ ...n_users_guide_howToUsehopfieldnetOptions.m | 145 +++++++ help_source/chn_users_guide_improveHybrid.m | 4 +- help_source/publishingHelpFiles.m | 14 +- 142 files changed, 2745 insertions(+), 1166 deletions(-) create mode 100644 chn/+apps/@HopfieldNetworkTSPApp/cb_closeApp.m create mode 100644 chn/+apps/@HopfieldNetworkTSPApp/cb_scheme.m create mode 100644 chn/+apps/@HopfieldNetworkTSPApp/verifyProblemIsSelected.m create mode 100644 chn/+network/@HopfieldNetworkGQKP/energyplot.m rename chn/+utils/@TSPLIB/{tsplib.m => TSPLIB.m} (99%) rename chn/+utils/@TSPLIB/{findOptimumTour.m => findOptimumTourLength.m} (90%) create mode 100644 chn/continuousHopfieldNetwork.slx create mode 100644 chn/discreteHopfieldNetwork.slx create mode 100644 chn/hopfieldNetworkTSPApp.m create mode 100644 help/Example_GQKPusingCHN.m create mode 100644 help/Example_SimulinkContinuous.m create mode 100644 help/Example_SimulinkDiscrete.m create mode 100644 help/Example_tsp2opt.m create mode 100644 help/html/Example_GQKPusingCHN.html create mode 100644 help/html/Example_GQKPusingCHN.png create mode 100644 help/html/Example_GQKPusingCHN_01.png create mode 100644 help/html/Example_GQKPusingCHN_eq00402117310426221833.png create mode 100644 help/html/Example_GQKPusingCHN_eq01573304657958675695.png create mode 100644 help/html/Example_GQKPusingCHN_eq04048434318454198067.png create mode 100644 help/html/Example_GQKPusingCHN_eq06393315845928486594.png create mode 100644 help/html/Example_GQKPusingCHN_eq07602426813975653007.png create mode 100644 help/html/Example_GQKPusingCHN_eq07876467921963818138.png create mode 100644 help/html/Example_GQKPusingCHN_eq14361763071227683630.png create mode 100644 help/html/Example_GQKPusingCHN_eq15343366408291104280.png create mode 100644 help/html/Example_GQKPusingCHN_eq16350391703841992777.png create mode 100644 help/html/Example_SimulinkContinuous.html create mode 100644 help/html/Example_SimulinkContinuous.png create mode 100644 help/html/Example_SimulinkContinuous_01.png create mode 100644 help/html/Example_SimulinkDiscrete.html create mode 100644 help/html/Example_SimulinkDiscrete.png create mode 100644 help/html/Example_SimulinkDiscrete_01.png create mode 100644 help/html/Example_SimulinkDiscrete_02.png create mode 100644 help/html/Example_tsp2opt.html create mode 100644 help/html/Example_tsp2opt.png create mode 100644 help/html/Example_tsp2opt_01.png create mode 100644 help/html/chn_concepts_eq00332925750071872080.png create mode 100644 help/html/chn_concepts_eq05860965440882434386.png create mode 100644 help/html/chn_concepts_eq06405532840228356056.png create mode 100644 help/html/chn_concepts_eq09644380179947857907.png create mode 100644 help/html/chn_concepts_eq12495267164290845698.png create mode 100644 help/html/chn_concepts_eq14648233979557833510.png create mode 100644 help/html/chn_concepts_eq16806024536423796716.png create mode 100644 help/html/chn_concepts_eq17093030862495231050.png create mode 100644 help/html/chn_concepts_eq18358848390578784380.png create mode 100644 help/html/chn_references.html rename help/html/{chn_users_guide_howToUse.html => chn_users_guide_SimulinkModels.html} (75%) delete mode 100644 help/html/chn_users_guide_howToUseCreateOptions.html create mode 100644 help/html/chn_users_guide_howToUseTsphopfieldnetOptions.html create mode 100644 help/html/chn_users_guide_howToUsehopfieldnetOptions.html create mode 100644 help/html/helpsearch-v3/_2t.cfe create mode 100644 help/html/helpsearch-v3/_2t.cfs create mode 100644 help/html/helpsearch-v3/_2t.si delete mode 100644 help/html/helpsearch-v3/_z.cfe delete mode 100644 help/html/helpsearch-v3/_z.cfs delete mode 100644 help/html/helpsearch-v3/_z.si delete mode 100644 help/html/helpsearch-v3/segments_10 create mode 100644 help/html/helpsearch-v3/segments_2u create mode 100644 help_source/chn_references.m create mode 100644 help_source/chn_users_guide_SimulinkModels.m delete mode 100644 help_source/chn_users_guide_howToUseCreateOptions.m create mode 100644 help_source/chn_users_guide_howToUseTsphopfieldnetOptions.m create mode 100644 help_source/chn_users_guide_howToUsehopfieldnetOptions.m diff --git a/Hopfield Net TSP solver.prj b/Hopfield Net TSP solver.prj index b30b19e..cf29f1b 100644 --- a/Hopfield Net TSP solver.prj +++ b/Hopfield Net TSP solver.prj @@ -1,5 +1,5 @@ - + Hopfield Net TSP solver Lucas García Rodríguez lucasgarciarodriguez@ucm.es @@ -12,11 +12,13 @@ The Hopfield Network TSP Solver App allows to solve the Traveling Salesman Problem using Continuous Hopfield Networks <b>The Hopfield Network TSP Solver App</b> allows to solve the Traveling Salesman Problem using Continuous Hopfield Networks by using several of the solver algorithms available in Hopfield Network Toolbox: -<ul><li>euler</li><li>talavan-yanez</li><li>divide-conquer</li></ul> +<ul><li>euler</li><li>runge-kutta</li><li>talavan-yanez</li></ul> +The Toolbox allows to create several network models or architectures, including: +<ul><li>classic</li><li>classic&2opt</li><li>divide-conquer</li><li>divide-conquer&2opt</li></ul> Find more information in the documentation of the toolbox or in the <a href="https://github.com/mathinking/HopfieldNetworkToolbox">GitHub repository</a> ${PROJECT_ROOT}\help\html\network.png - 1.1.1 + 2.0 MATLAB Statistics and Machine Learning Toolbox @@ -37,304 +39,90 @@ Find more information in the documentation of the toolbox or in the <a href=" - ${PROJECT_ROOT}\@tsphopfieldnetApp\tsphopfieldnetApp.m + ${PROJECT_ROOT}\chn\hopfieldNetworkTSPApp.m - ${PROJECT_ROOT}\@hopfieldnetwork\addDefaultOptionValues.m - ${PROJECT_ROOT}\@hopfieldnetwork\createOptions.m - ${PROJECT_ROOT}\@hopfieldnetwork\getResults.m - ${PROJECT_ROOT}\@hopfieldnetwork\getSetting.m - ${PROJECT_ROOT}\@hopfieldnetwork\getSimFcn.m - ${PROJECT_ROOT}\@hopfieldnetwork\getTrainFcn.m - ${PROJECT_ROOT}\@hopfieldnetwork\getTrainParam.m - ${PROJECT_ROOT}\@hopfieldnetwork\hopfieldnetwork.m - ${PROJECT_ROOT}\@hopfieldnetwork\init.m - ${PROJECT_ROOT}\@hopfieldnetwork\invsatlin.m - ${PROJECT_ROOT}\@hopfieldnetwork\isValidSetting.m - ${PROJECT_ROOT}\@hopfieldnetwork\satlin.m - ${PROJECT_ROOT}\@hopfieldnetwork\setOptions.m - ${PROJECT_ROOT}\@hopfieldnetwork\setResults.m - ${PROJECT_ROOT}\@hopfieldnetwork\setSetting.m - ${PROJECT_ROOT}\@hopfieldnetwork\setTrainParam.m - ${PROJECT_ROOT}\@tsphopfieldnet\addDefaultOptionValues.m - ${PROJECT_ROOT}\@tsphopfieldnet\city.m - ${PROJECT_ROOT}\@tsphopfieldnet\cityTextGeneration.m - ${PROJECT_ROOT}\@tsphopfieldnet\computeDistance.m - ${PROJECT_ROOT}\@tsphopfieldnet\createChain.m - ${PROJECT_ROOT}\@tsphopfieldnet\createOptions.m - ${PROJECT_ROOT}\@tsphopfieldnet\disp.m - ${PROJECT_ROOT}\@tsphopfieldnet\energyplot.m - ${PROJECT_ROOT}\@tsphopfieldnet\fixedCities.m - ${PROJECT_ROOT}\@tsphopfieldnet\getCities.m - ${PROJECT_ROOT}\@tsphopfieldnet\getName.m - ${PROJECT_ROOT}\@tsphopfieldnet\init.m - ${PROJECT_ROOT}\@tsphopfieldnet\isValidSetting.m - ${PROJECT_ROOT}\@tsphopfieldnet\loggingV.m - ${PROJECT_ROOT}\@tsphopfieldnet\modulo.m - ${PROJECT_ROOT}\@tsphopfieldnet\neighbourDistance.m - ${PROJECT_ROOT}\@tsphopfieldnet\plot.m - ${PROJECT_ROOT}\@tsphopfieldnet\polygonCoords.m - ${PROJECT_ROOT}\@tsphopfieldnet\reinit.m - ${PROJECT_ROOT}\@tsphopfieldnet\saddle.m - ${PROJECT_ROOT}\@tsphopfieldnet\setCities.m - ${PROJECT_ROOT}\@tsphopfieldnet\setOptions.m - ${PROJECT_ROOT}\@tsphopfieldnet\setSimFcn.m - ${PROJECT_ROOT}\@tsphopfieldnet\setTrainFcn.m - ${PROJECT_ROOT}\@tsphopfieldnet\sim.m - ${PROJECT_ROOT}\@tsphopfieldnet\storeResultsinPDF.m - ${PROJECT_ROOT}\@tsphopfieldnet\train.m - ${PROJECT_ROOT}\@tsphopfieldnet\tsphopfieldnet.m - ${PROJECT_ROOT}\@tsphopfieldnet\verifyIfValidSubtours.m - ${PROJECT_ROOT}\@tsphopfieldnet\viewConvergence.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_findTour.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_parameterCEdit.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_seedFixed.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_seedShuffle.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_simFcn.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_tabOtherChooseFromWs.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_tabOtherCoordsDist.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_tabPolygonNcities.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cb_tabTSPLIBmenu.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\cleanState.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\createFigure.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\createTspHopfieldNet.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\defaultSettings.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\getScreenSize.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\timeElapsed.m - ${PROJECT_ROOT}\@tsphopfieldnetApp\updateTspHopfieldNet.m - ${PROJECT_ROOT}\@tsplib\computeTour.m - ${PROJECT_ROOT}\@tsplib\convert2LatLon.m - ${PROJECT_ROOT}\@tsplib\findOptimumTour.m - ${PROJECT_ROOT}\@tsplib\plot.m - ${PROJECT_ROOT}\@tsplib\problemNames.m - ${PROJECT_ROOT}\@tsplib\tsplib.m - ${PROJECT_ROOT}\TSPFiles\a280.tsp - ${PROJECT_ROOT}\TSPFiles\ali535.tsp - ${PROJECT_ROOT}\TSPFiles\att48.tsp - ${PROJECT_ROOT}\TSPFiles\att532.tsp - ${PROJECT_ROOT}\TSPFiles\bayg29.tsp - ${PROJECT_ROOT}\TSPFiles\bays29.tsp - ${PROJECT_ROOT}\TSPFiles\berlin52.tsp - ${PROJECT_ROOT}\TSPFiles\bier127.tsp - ${PROJECT_ROOT}\TSPFiles\brazil58.tsp - ${PROJECT_ROOT}\TSPFiles\brd14051.tsp - ${PROJECT_ROOT}\TSPFiles\brg180.tsp - ${PROJECT_ROOT}\TSPFiles\burma14.tsp - ${PROJECT_ROOT}\TSPFiles\ch130.tsp - ${PROJECT_ROOT}\TSPFiles\ch150.tsp - ${PROJECT_ROOT}\TSPFiles\d1291.tsp - ${PROJECT_ROOT}\TSPFiles\d15112.tsp - ${PROJECT_ROOT}\TSPFiles\d1655.tsp - ${PROJECT_ROOT}\TSPFiles\d18512.tsp - ${PROJECT_ROOT}\TSPFiles\d198.tsp - ${PROJECT_ROOT}\TSPFiles\d2103.tsp - ${PROJECT_ROOT}\TSPFiles\d493.tsp - ${PROJECT_ROOT}\TSPFiles\d657.tsp - ${PROJECT_ROOT}\TSPFiles\dantzig42.tsp - ${PROJECT_ROOT}\TSPFiles\dsj1000.tsp - ${PROJECT_ROOT}\TSPFiles\eil101.tsp - ${PROJECT_ROOT}\TSPFiles\eil51.tsp - ${PROJECT_ROOT}\TSPFiles\eil76.tsp - ${PROJECT_ROOT}\TSPFiles\fl1400.tsp - ${PROJECT_ROOT}\TSPFiles\fl1577.tsp - ${PROJECT_ROOT}\TSPFiles\fl3795.tsp - ${PROJECT_ROOT}\TSPFiles\fl417.tsp - ${PROJECT_ROOT}\TSPFiles\fnl4461.tsp - ${PROJECT_ROOT}\TSPFiles\fri26.tsp - ${PROJECT_ROOT}\TSPFiles\gil262.tsp - ${PROJECT_ROOT}\TSPFiles\gr120.tsp - ${PROJECT_ROOT}\TSPFiles\gr137.tsp - ${PROJECT_ROOT}\TSPFiles\gr17.tsp - ${PROJECT_ROOT}\TSPFiles\gr202.tsp - ${PROJECT_ROOT}\TSPFiles\gr21.tsp - ${PROJECT_ROOT}\TSPFiles\gr229.tsp - ${PROJECT_ROOT}\TSPFiles\gr24.tsp - ${PROJECT_ROOT}\TSPFiles\gr431.tsp - ${PROJECT_ROOT}\TSPFiles\gr48.tsp - ${PROJECT_ROOT}\TSPFiles\gr666.tsp - ${PROJECT_ROOT}\TSPFiles\gr96.tsp - ${PROJECT_ROOT}\TSPFiles\hk48.tsp - ${PROJECT_ROOT}\TSPFiles\kroA100.tsp - ${PROJECT_ROOT}\TSPFiles\kroA150.tsp - ${PROJECT_ROOT}\TSPFiles\kroA200.tsp - ${PROJECT_ROOT}\TSPFiles\kroB100.tsp - ${PROJECT_ROOT}\TSPFiles\kroB150.tsp - ${PROJECT_ROOT}\TSPFiles\kroB200.tsp - ${PROJECT_ROOT}\TSPFiles\kroC100.tsp - ${PROJECT_ROOT}\TSPFiles\kroD100.tsp - ${PROJECT_ROOT}\TSPFiles\kroE100.tsp - ${PROJECT_ROOT}\TSPFiles\lin105.tsp - ${PROJECT_ROOT}\TSPFiles\lin318.tsp - ${PROJECT_ROOT}\TSPFiles\linhp318.tsp - ${PROJECT_ROOT}\TSPFiles\nrw1379.tsp - ${PROJECT_ROOT}\TSPFiles\p654.tsp - ${PROJECT_ROOT}\TSPFiles\pa561.tsp - ${PROJECT_ROOT}\TSPFiles\pcb1173.tsp - ${PROJECT_ROOT}\TSPFiles\pcb3038.tsp - ${PROJECT_ROOT}\TSPFiles\pcb442.tsp - ${PROJECT_ROOT}\TSPFiles\pla33810.tsp - ${PROJECT_ROOT}\TSPFiles\pla7397.tsp - ${PROJECT_ROOT}\TSPFiles\pla85900.tsp - ${PROJECT_ROOT}\TSPFiles\pr1002.tsp - ${PROJECT_ROOT}\TSPFiles\pr107.tsp - ${PROJECT_ROOT}\TSPFiles\pr124.tsp - ${PROJECT_ROOT}\TSPFiles\pr136.tsp - ${PROJECT_ROOT}\TSPFiles\pr144.tsp - ${PROJECT_ROOT}\TSPFiles\pr152.tsp - ${PROJECT_ROOT}\TSPFiles\pr226.tsp - ${PROJECT_ROOT}\TSPFiles\pr2392.tsp - ${PROJECT_ROOT}\TSPFiles\pr264.tsp - ${PROJECT_ROOT}\TSPFiles\pr299.tsp - ${PROJECT_ROOT}\TSPFiles\pr439.tsp - ${PROJECT_ROOT}\TSPFiles\pr76.tsp - ${PROJECT_ROOT}\TSPFiles\rat195.tsp - ${PROJECT_ROOT}\TSPFiles\rat575.tsp - ${PROJECT_ROOT}\TSPFiles\rat783.tsp - ${PROJECT_ROOT}\TSPFiles\rat99.tsp - ${PROJECT_ROOT}\TSPFiles\rd100.tsp - ${PROJECT_ROOT}\TSPFiles\rd400.tsp - ${PROJECT_ROOT}\TSPFiles\rl11849.tsp - ${PROJECT_ROOT}\TSPFiles\rl1304.tsp - ${PROJECT_ROOT}\TSPFiles\rl1323.tsp - ${PROJECT_ROOT}\TSPFiles\rl1889.tsp - ${PROJECT_ROOT}\TSPFiles\rl5915.tsp - ${PROJECT_ROOT}\TSPFiles\rl5934.tsp - ${PROJECT_ROOT}\TSPFiles\si1032.tsp - ${PROJECT_ROOT}\TSPFiles\si175.tsp - ${PROJECT_ROOT}\TSPFiles\si535.tsp - ${PROJECT_ROOT}\TSPFiles\st70.tsp - ${PROJECT_ROOT}\TSPFiles\swiss42.tsp - ${PROJECT_ROOT}\TSPFiles\ts225.tsp - ${PROJECT_ROOT}\TSPFiles\tsp225.tsp - ${PROJECT_ROOT}\TSPFiles\TSPLIBproblems.mat - ${PROJECT_ROOT}\TSPFiles\TSPTours\a280.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ali535.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\att48.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\att532.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\bayg29.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\bays29.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\berlin52.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\bier127.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\brazil58.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\brd14051.469388.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\brg180.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\burma14.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ch130.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ch150.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d1291.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d15112.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d1655.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d18512.645244.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d198.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d2103.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d493.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\d657.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\dantzig42.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\dsj1000.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\eil101.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\eil51.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\eil76.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fl1400.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fl1577.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fl3795.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fl417.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fnl4461.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\fri26.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gil262.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr120.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr137.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr17.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr202.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr21.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr229.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr24.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr431.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr48.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr666.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\gr96.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\hk48.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroA100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroA150.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroA200.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroB100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroB150.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroB200.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroC100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroD100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\kroE100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\lin105.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\lin318.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\linhp318.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\nrw1379.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\p654.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pa561.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pcb1173.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pcb3038.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pcb442.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pla33810.66050599.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pla7397.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pla85900.142393738.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr1002.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr107.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr124.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr136.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr144.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr152.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr226.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr2392.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr264.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr299.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr439.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\pr76.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rat195.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rat575.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rat783.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rat99.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rd100.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rd400.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl11849.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl1304.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl1323.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl1889.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl5915.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\rl5934.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\si1032.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\si175.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\si535.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\st70.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\swiss42.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ts225.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\tsp225.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u1060.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u1432.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u159.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u1817.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u2152.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u2319.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u574.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\u724.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ulysses16.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\ulysses22.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\usa13509.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\vm1084.opt.tour - ${PROJECT_ROOT}\TSPFiles\TSPTours\vm1748.opt.tour - ${PROJECT_ROOT}\TSPFiles\u1060.tsp - ${PROJECT_ROOT}\TSPFiles\u1432.tsp - ${PROJECT_ROOT}\TSPFiles\u159.tsp - ${PROJECT_ROOT}\TSPFiles\u1817.tsp - ${PROJECT_ROOT}\TSPFiles\u2152.tsp - ${PROJECT_ROOT}\TSPFiles\u2319.tsp - ${PROJECT_ROOT}\TSPFiles\u574.tsp - ${PROJECT_ROOT}\TSPFiles\u724.tsp - ${PROJECT_ROOT}\TSPFiles\ulysses16.tsp - ${PROJECT_ROOT}\TSPFiles\ulysses22.tsp - ${PROJECT_ROOT}\TSPFiles\usa13509.tsp - ${PROJECT_ROOT}\TSPFiles\vm1084.tsp - ${PROJECT_ROOT}\TSPFiles\vm1748.tsp - ${PROJECT_ROOT}\TSPFiles\xray.problems + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_closeApp.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_findTour.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_parameterCEdit.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_scheme.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_seedFixed.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_seedShuffle.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_simFcn.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_tabOtherChooseFromWs.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_tabOtherCoordsDist.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_tabPolygonNcities.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cb_tabTSPLIBmenu.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\cleanState.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\createFigure.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\createTspHopfieldNet.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\defaultSettings.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\getScreenSize.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\HopfieldNetworkTSPApp.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\timeElapsed.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\updateTspHopfieldNet.m + ${PROJECT_ROOT}\chn\+apps\@HopfieldNetworkTSPApp\verifyProblemIsSelected.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getResults.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getScheme.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getSetting.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getSimFcn.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getTrainFcn.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\getTrainParam.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\HopfieldNetwork.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\init.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\invsatlin.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\satlin.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\setOptions.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\setResults.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetwork\setSetting.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\city.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\cityTextGeneration.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\computeDistance.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\createChain.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\disp.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\energyplot.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\fixedCities.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\getCities.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\getName.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\HopfieldNetworkTSP.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\init.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\loggingV.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\modulo.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\neighbourDistance.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\plot.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\polygonCoords.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\reinit.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\saddle.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setCities.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setOptions.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setScheme.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setSimFcn.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setTrainFcn.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\setTrainParam.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\sim.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\storeResultsinPDF.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\train.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\verifyIfValidSubtours.m + ${PROJECT_ROOT}\chn\+network\@HopfieldNetworkTSP\viewConvergence.m + ${PROJECT_ROOT}\chn\+options\HopfieldNetworkGQKPOptions.m + ${PROJECT_ROOT}\chn\+options\HopfieldNetworkOptions.m + ${PROJECT_ROOT}\chn\+options\HopfieldNetworkTSPOptions.m + ${PROJECT_ROOT}\chn\+utils\+checkpoint\createFilename.m + ${PROJECT_ROOT}\chn\+utils\+checkpoint\loggingData.m + ${PROJECT_ROOT}\chn\+utils\+checkpoint\trimToSimulatedData.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\computeTour.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\convert2LatLon.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\findOptimumTourLength.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\plot.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\problemNames.m + ${PROJECT_ROOT}\chn\+utils\@TSPLIB\TSPLIB.m + ${PROJECT_ROOT}\chn\hopfieldnetOptions.m + ${PROJECT_ROOT}\chn\tsphopfieldnet.m + ${PROJECT_ROOT}\chn\tsphopfieldnetOptions.m + ${PROJECT_ROOT}\chn\tsplib.m - ${PROJECT_ROOT}\TSPFiles + ${PROJECT_ROOT}\data\TSPFiles diff --git a/Hopfield Network Toolbox.prj b/Hopfield Network Toolbox.prj index 6582833..edf2f63 100644 --- a/Hopfield Network Toolbox.prj +++ b/Hopfield Network Toolbox.prj @@ -5,20 +5,23 @@ lucasgarciarodriguez@ucm.es mathinking.github.com A Hopfield Network Toolbox for MATLAB - The Hopfield Network Toolbox can solve combinatorial optimization problems by using Hopfield Neural Networks. The Hopfield Network Toolbox is focused in Continuous Hopfield Networks. + The Hopfield Network Toolbox can solve combinatorial optimization problems by using Hopfield Neural Networks. The Hopfield Network Toolbox is mainly focused in Continuous Hopfield Networks. ${PROJECT_ROOT}\help\html\hopfieldnet.png - 1.1.2 + 2.0 ${PROJECT_ROOT}\Hopfield Network Toolbox.mltbx MATLAB + Simulink Statistics and Machine Learning Toolbox 1 + 2 19 9.2 + 8.9 11.1 @@ -48,10 +51,16 @@ help_source/ Hopfield Net TSP solver_resources/ README.md setup_hopfieldNetwork.m -BuildInstructions.m +BuildInstructions.m +automateTests.m +slprj +tau +Simulations +runMultipleTSPLIBproblems.m +script_runMultipleTSPLIBproblems.m <?xml version="1.0" encoding="utf-8"?> <examples> - <exampleCategory name="Solving the Traveling Salesman Problem using Hopfield Networks"> + <exampleCategory name="Solving the Optimization problems using Hopfield Networks"> <example name="Solving the TSP with cities in Polygon Vertices" type="html"> <file type="source">/help/html/Example_tspUsingRegularPolygons.html</file> <file type="main">/help/Example_tspUsingRegularPolygons.m</file> @@ -78,6 +87,27 @@ BuildInstructions.m <file type="main">/help/Example_tspUsingDistance.m</file> <file type="thumbnail"/> </example> + <example name="Solving a GQKP problem using a Hopfield Network" type="html"> + <file type="source">/help/html/Example_GQKPusingCHN.html</file> + <file type="main">/help/Example_GQKPusingCHN.m</file> + <file type="thumbnail">/help/html/Example_GQKPusingCHN.png</file> + <file type="image">/help/html/Example_GQKPusingCHN_01.png</file> + </example> + </exampleCategory> + <exampleCategory name="Solving Hopfield Networks using Simulink"> + <example name="Solving Discrete Hopfield Networks using Simulink" type="html"> + <file type="source">/help/html/Example_SimulinkDiscrete.html</file> + <file type="main">/help/Example_SimulinkDiscrete.m</file> + <file type="thumbnail">/help/html/Example_SimulinkDiscrete.png</file> + <file type="image">/help/html/Example_SimulinkDiscrete_01.png</file> + <file type="image">/help/html/Example_SimulinkDiscrete_02.png</file> + </example> + <example name="Solving Continuous Hopfield Networks using Simulink" type="html"> + <file type="source">/help/html/Example_SimulinkContinuous.html</file> + <file type="main">/help/Example_SimulinkContinuous.m</file> + <file type="thumbnail">/help/html/Example_SimulinkContinuous.png</file> + <file type="image">/help/html/Example_SimulinkContinuous_01.png</file> + </example> </exampleCategory> <exampleCategory name="Improving Hopfield Network performance when applied to the TSP"> <example name="Reduce the free parameter C" type="html"> @@ -99,6 +129,12 @@ BuildInstructions.m <file type="thumbnail">/help/html/Example_tspDivideConquer.png</file> <file type="image">/help/html/Example_tspDivideConquer_01.png</file> </example> + <example name="CHN as a 2-opt Algorithm" type="html"> + <file type="source">/help/html/Example_tsp2opt.html</file> + <file type="main">/help/Example_tsp2opt.m</file> + <file type="thumbnail">/help/html/Example_tsp2opt.png</file> + <file type="image">/help/html/Example_tsp2opt_01.png</file> + </example> </exampleCategory> </examples> @@ -119,16 +155,12 @@ BuildInstructions.m E:\Users\Lucas\Documents\GitHub\HopfieldNetworkToolbox - ${PROJECT_ROOT}\@hopfieldnet - ${PROJECT_ROOT}\@hopfieldnetwork - ${PROJECT_ROOT}\@tsphopfieldnet - ${PROJECT_ROOT}\@tsphopfieldnetApp - ${PROJECT_ROOT}\@tsplib + ${PROJECT_ROOT}\chn + ${PROJECT_ROOT}\data ${PROJECT_ROOT}\help ${PROJECT_ROOT}\Hopfield Net TSP solver.mlappinstall ${PROJECT_ROOT}\LICENSE ${PROJECT_ROOT}\setup_TSPLIB.m - ${PROJECT_ROOT}\TSPFiles diff --git a/README.md b/README.md index b7fad71..b353e96 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ The Continuous Hopfield Network (CHN) is a **recurrent neural network** with an As the Lyapunov function is associated with an objective function of the optimization problem (i.e. the mapping process), the equilibrium, or stable point, helps identify a local optimum for the optimization problem. The dynamics of the CHN is described by a **differential equation**: -![\frac{du}{dt} = - \frac{u}{\Lambda} + T v + i^b](http://mathurl.com/hzhnzj5.png) +![\frac{du}{dt} = - \frac{u}{\lambda} + T v + i^b](http://mathurl.com/ycfv6hhd.png) and the output function is a hyperbolic tangent: ![v_i = g(u_i) = \frac{1}{2} \left( 1 + \tanh \left( \frac{u_i}{u_0} \right) \right), \qquad u_0 > 0](http://mathurl.com/zdeg52h.png) -The existence of an equilibrium point is guaranteed if a Lyapunov or energy function exists. The idea is that the network's Lyapunov function, when ![\Lambda \rightarrow{} \infty](http://mathurl.com/hl2t4by.png), is associated with the cost function to be minimized in the combinatorial problem. +The existence of an equilibrium point is guaranteed if a Lyapunov or energy function exists. The idea is that the network's Lyapunov function, when ![\lambda \rightarrow{} \infty](http://mathurl.com/ydye9fha.png), is associated with the cost function to be minimized in the combinatorial problem. The CHN will solve those combinatorial problems which can be expressed as the constrained minimization of: @@ -37,11 +37,12 @@ Want to contribute? Great! Feel free to fork the repository and contact us for i ## Questions? Open a new Issue and label it as a question. We will get back to you. -## References +## Major References - [Neural computation of decisions in optimization problems](http://www.ams.org/mathscinet-getitem?mr=824597) - [A continuous Hopfield network equilibrium points algorithm](http://www.sciencedirect.com/science/article/pii/S0305054804000243) - [Parameter setting of the Hopfield network applied to TSP](http://www.sciencedirect.com/science/article/pii/S0893608002000217) - [Improving the Hopfield model performance when applied to the traveling salesman problem: A divide-and-conquer scheme](http://link.springer.com/article/10.1007/s00500-016-2039-8) + - [Attractor basin analysis of the Hopfield model: The Generalized Quadratic Knapsack Problem. In International Work-Conference on Artificial Neural Networks (2017)](https://link.springer.com/chapter/10.1007%2F978-3-319-59153-7_37) ## Contact us Send us an [Email](mailto:lucasgarciarodriguez@ucm.es) with your comments/suggestions. diff --git a/chn/+apps/@HopfieldNetworkTSPApp/HopfieldNetworkTSPApp.m b/chn/+apps/@HopfieldNetworkTSPApp/HopfieldNetworkTSPApp.m index fb584d9..e996dce 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/HopfieldNetworkTSPApp.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/HopfieldNetworkTSPApp.m @@ -26,7 +26,8 @@ tabOtherCoordinates; tabOtherDistance; - simulation; + simulation; + schemeMenu; simFcnMenu; ExecutionEnvironment; @@ -83,7 +84,7 @@ function app = HopfieldNetworkTSPApp() createFigure(app); defaultSettings(app); - drawnow nocallbacks; +% drawnow; app.figure.Visible = 'on'; end end @@ -100,9 +101,13 @@ cb_parameterCEdit(app); cb_findTour(app); cb_simFcn(app); + cb_scheme(app); timeElapsed(app,obj,event); cleanState(app); createTspHopfieldNet(app,varargin); updateTspHopfieldNet(app,C); + problemIsSelected = verifyProblemIsSelected(app); + cb_closeApp(app); end + end diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_closeApp.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_closeApp.m new file mode 100644 index 0000000..7866e01 --- /dev/null +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_closeApp.m @@ -0,0 +1,14 @@ +function cb_closeApp(app,~) + + selection = questdlg('Close Hopfield Net TSP solver App?',... + 'Close App?',... + 'Yes','No','Yes'); + switch selection + case 'Yes' + warning('on','tsphopfieldnet:NotSimulated'); + warning('on','MATLAB:MKDIR:DirectoryExists'); + delete(app.figure); + case 'No' + return; + end +end \ No newline at end of file diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_findTour.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_findTour.m index f50efd3..a51b00b 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/cb_findTour.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_findTour.m @@ -18,15 +18,9 @@ function cb_findTour(app,~) end end -if app.simFcnMenu.Value == 1 - msgbox('Please choose an algorithm for the Hopfield Network simulation', 'Error', 'error'); +if app.schemeMenu.Value == 1 + msgbox('Please choose a scheme for the Hopfield Network simulation', 'Error', 'error'); return; -else - algorithms = app.simFcnMenu.String; - setSimFcn(app.net,algorithms{app.simFcnMenu.Value}); - if strcmp(algorithms{app.simFcnMenu.Value},'divide-conquer') - setCities(app.net,'Tau',max(3,round(getTrainParam(app.net,'N')/10))); %#TODO Bring to APP - end end u0 = str2double(app.settings_u0Edit.String); @@ -35,6 +29,7 @@ function cb_findTour(app,~) dt = str2double(app.settings_dtEdit.String); e = str2double(app.settings_eEdit.String); q = str2double(app.settings_qEdit.String); +tau = str2double(app.cities_tauEdit.String); try setSetting(app.net,'U0',u0) @@ -43,6 +38,7 @@ function cb_findTour(app,~) setSetting(app.net,'Dt',dt) setSetting(app.net,'E',e) setSetting(app.net,'Q',q) + setCities(app.net,'Tau',tau) catch me msgbox(me.message) return; diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_scheme.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_scheme.m new file mode 100644 index 0000000..78c2b41 --- /dev/null +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_scheme.m @@ -0,0 +1,37 @@ +function cb_scheme(app,~) + + problemIsSelected = verifyProblemIsSelected(app); + if ~problemIsSelected + msgbox('Please select first the problem to solve', 'Error', 'error'); + app.schemeMenu.Value = 1; + return; + end + schemes = app.schemeMenu.String; + + chosenScheme = schemes{app.schemeMenu.Value}; + + if strncmp(chosenScheme,'divide-conquer',14) + app.cities_tauEdit.Enable = 'on'; + tau = max(3,round(getTrainParam(app.net,'N')/10)); + setCities(app.net,'Tau',tau); + app.cities_tauEdit.String = num2str(tau); + + train(app.net); + trainParams = getTrainParam(app.net); + + app.parameterAEdit.String = num2str(trainParams.A); + app.parameterBEdit.String = num2str(trainParams.B); + app.parameterDEdit.String = num2str(1/trainParams.dUaux); + + app.parameterNEdit.String = num2str(trainParams.N); + app.parameterNpEdit.String = num2str(trainParams.Np); + app.cities_tauEdit.String = num2str(getCities(app.net,'Tau')); + else + app.cities_tauEdit.Enable = 'off'; + end + + if ~isempty(app.net) && ~strcmp(chosenScheme,'Scheme') + setScheme(app.net, chosenScheme) + end + +end diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_simFcn.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_simFcn.m index b36bbb7..91f9595 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/cb_simFcn.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_simFcn.m @@ -1,21 +1,32 @@ function cb_simFcn(app,~) + problemIsSelected = verifyProblemIsSelected(app); + if ~problemIsSelected + msgbox('Please select first the problem to solve', 'Error', 'error'); + app.simFcnMenu.Value = 1; + return; + end + if app.schemeMenu.Value == 1 + msgbox('Please select first the Hopfield Network scheme to solve the problem', 'Error', 'error'); + app.simFcnMenu.Value = 1; + return; + end + algorithms = app.simFcnMenu.String; - chosenAlgorithm = algorithms(app.simFcnMenu.Value); + chosenAlgorithm = algorithms{app.simFcnMenu.Value}; app.elapsedTime.String = ''; - - if strcmp(chosenAlgorithm,'euler') + + if strcmp(chosenAlgorithm,'euler') || strcmp(chosenAlgorithm,'runge-kutta') app.settings_u0Edit.Enable = 'on'; app.settings_dtEdit.Enable = 'on'; app.settings_maxIterEdit.Enable = 'on'; app.settings_eEdit.Enable = 'on'; app.settings_R_ITEREdit.Enable = 'on'; app.settings_qEdit.Enable = 'on'; - app.cities_tauEdit.Enable = 'off'; if ~isempty(app.net) - setSimFcn(app.net,'euler') + setSimFcn(app.net,chosenAlgorithm) end elseif strcmp(chosenAlgorithm,'talavan-yanez') @@ -25,23 +36,9 @@ function cb_simFcn(app,~) app.settings_eEdit.Enable = 'on'; app.settings_R_ITEREdit.Enable = 'on'; app.settings_qEdit.Enable = 'on'; - app.cities_tauEdit.Enable = 'off'; if ~isempty(app.net) setSimFcn(app.net,'talavan-yanez') - end - - elseif strcmp(chosenAlgorithm,'divide-conquer') - app.settings_u0Edit.Enable = 'on'; - app.settings_dtEdit.Enable = 'off'; - app.settings_maxIterEdit.Enable = 'on'; - app.settings_eEdit.Enable = 'on'; - app.settings_R_ITEREdit.Enable = 'on'; - app.settings_qEdit.Enable = 'on'; - app.cities_tauEdit.Enable = 'on'; - if ~isempty(app.net) - setSimFcn(app.net,'divide-conquer') - end - + end else app.settings_u0Edit.Enable = 'off'; app.settings_dtEdit.Enable = 'off'; @@ -49,7 +46,6 @@ function cb_simFcn(app,~) app.settings_eEdit.Enable = 'off'; app.settings_R_ITEREdit.Enable = 'off'; app.settings_qEdit.Enable = 'off'; - app.cities_tauEdit.Enable = 'off'; end - + end diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_tabPolygonNcities.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_tabPolygonNcities.m index 7511ba3..4ef620d 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/cb_tabPolygonNcities.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_tabPolygonNcities.m @@ -1,5 +1,5 @@ function cb_tabPolygonNcities(app) - + N = str2double(app.tabPolygonnCitiesEdit.String); if isnan(N) || N < 2 msgbox('You must provide a value for number of cities greater than 2', 'Error', 'error'); diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cb_tabTSPLIBmenu.m b/chn/+apps/@HopfieldNetworkTSPApp/cb_tabTSPLIBmenu.m index 48979b2..eeebe60 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/cb_tabTSPLIBmenu.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/cb_tabTSPLIBmenu.m @@ -3,6 +3,10 @@ function cb_tabTSPLIBmenu(app) problems = app.tabTSPLIBmenu.String; problemSelected = app.tabTSPLIBmenu.Value; +app.schemeMenu.Value = 1; +app.simFcnMenu.Value = 1; +app.cities_tauEdit.Enable = 'off'; + % Useful for problems that take longer to compute tsplib % and training app.tabTSPLIBnCitiesEdit.String = '- - - '; diff --git a/chn/+apps/@HopfieldNetworkTSPApp/cleanState.m b/chn/+apps/@HopfieldNetworkTSPApp/cleanState.m index 0703e46..dc97d9a 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/cleanState.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/cleanState.m @@ -8,6 +8,9 @@ function cleanState(app) defaultSettings(app); + app.simFcnMenu.Value = 1; + app.schemeMenu.Value = 1; + app.settings_u0Edit.Enable = 'off'; app.settings_dtEdit.Enable = 'off'; app.settings_maxIterEdit.Enable = 'off'; diff --git a/chn/+apps/@HopfieldNetworkTSPApp/createFigure.m b/chn/+apps/@HopfieldNetworkTSPApp/createFigure.m index 2c697a4..3682081 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/createFigure.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/createFigure.m @@ -1,7 +1,9 @@ function createFigure(app) - app.figure = figure; - app.figure.Visible = 'off'; + warning('off','tsphopfieldnet:NotSimulated'); + warning('off','MATLAB:MKDIR:DirectoryExists'); + + app.figure = figure('Visible','off'); app.figure.ToolBar = 'None'; app.figure.MenuBar = 'None'; app.figure.Units = 'normalized'; @@ -11,6 +13,7 @@ function createFigure(app) app.figure.Resize = 'on'; app.figure.HandleVisibility = 'off'; app.figure.Name = 'Hopfield Net TSP solver App'; + app.figure.CloseRequestFcn = @(src,evt)cb_closeApp(app); problems = utils.TSPLIB.problemNames(true,false); @@ -131,7 +134,7 @@ function createFigure(app) app.tabOtherChooseFromWs.FontUnits = 'normalized'; app.tabOtherChooseFromWs.FontSize = 0.15; app.tabOtherChooseFromWs.Callback = @(~,~) cb_tabOtherChooseFromWs(app); - app.tabOtherChooseFromWs.String = 'Choose from workspace'; + app.tabOtherChooseFromWs.String = {'Choose from workspace'}; % ---- Simulation ---- % app.simulation = uibuttongroup(app.figure); @@ -142,14 +145,23 @@ function createFigure(app) app.simulation.FontAngle = 'italic'; app.simulation.FontWeight = 'bold'; + app.schemeMenu = uicontrol(app.simulation,'Style','popupmenu'); + app.schemeMenu.Units = 'normalized'; + app.schemeMenu.Position = [0.1,0.85,0.45,0.1]; + app.schemeMenu.FontSize = 8; + app.schemeMenu.FontUnits = 'normalized'; + app.schemeMenu.String = ' '; + app.schemeMenu.Callback = @(~,~)cb_scheme(app); + app.schemeMenu.String = {'Scheme';'classic';'classic&2opt';'divide-conquer';'divide-conquer&2opt'}; + app.simFcnMenu = uicontrol(app.simulation,'Style','popupmenu'); app.simFcnMenu.Units = 'normalized'; - app.simFcnMenu.Position = [0.1,0.85,0.8,0.1]; - app.simFcnMenu.FontSize = 9; + app.simFcnMenu.Position = [0.575,0.85,0.325,0.1]; + app.simFcnMenu.FontSize = 8; app.simFcnMenu.FontUnits = 'normalized'; app.simFcnMenu.String = ' '; app.simFcnMenu.Callback = @(~,~)cb_simFcn(app); - app.simFcnMenu.String = {'Algorithm';'euler';'talavan-yanez';'divide-conquer'}; + app.simFcnMenu.String = {'Algorithm';'euler';'runge-kutta';'talavan-yanez'}; app.ExecutionEnvironment = uibuttongroup(app.simulation); app.ExecutionEnvironment.Units = 'normalized'; @@ -228,7 +240,7 @@ function createFigure(app) app.settings_maxIter.Units = 'normalized'; app.settings_maxIter.Position = [0.05,0.52,0.25,0.15]; app.settings_maxIter.FontUnits = 'normalized'; - app.settings_maxIter.String = 'maxIter'; + app.settings_maxIter.String = 'MaxIter'; app.settings_maxIter.HorizontalAlignment = 'right'; app.settings_maxIterEdit = uicontrol(app.settings,'Style','edit'); diff --git a/chn/+apps/@HopfieldNetworkTSPApp/createTspHopfieldNet.m b/chn/+apps/@HopfieldNetworkTSPApp/createTspHopfieldNet.m index d3b370c..8659085 100644 --- a/chn/+apps/@HopfieldNetworkTSPApp/createTspHopfieldNet.m +++ b/chn/+apps/@HopfieldNetworkTSPApp/createTspHopfieldNet.m @@ -43,7 +43,7 @@ function createTspHopfieldNet(app,varargin) end app.parameterNEdit.String = num2str(trainParams.N); app.parameterNpEdit.String = num2str(trainParams.Np); - app.cities_tauEdit.String = num2str(round(getTrainParam(app.net,'N')/10)); + app.cities_tauEdit.String = num2str(getCities(app.net,'Tau')); plot(app.net,'empty',[],app.plot); diff --git a/chn/+apps/@HopfieldNetworkTSPApp/verifyProblemIsSelected.m b/chn/+apps/@HopfieldNetworkTSPApp/verifyProblemIsSelected.m new file mode 100644 index 0000000..29b2d1b --- /dev/null +++ b/chn/+apps/@HopfieldNetworkTSPApp/verifyProblemIsSelected.m @@ -0,0 +1,12 @@ +function problemIsSelected = verifyProblemIsSelected(app) + + problemIsSelected = true; + if isequal(app.tabgroup.SelectedTab,app.tabTSPLIB) && app.tabTSPLIBmenu.Value == 1 + problemIsSelected = false; + elseif isequal(app.tabgroup.SelectedTab,app.tabPolygon) && isnan(str2double(app.tabPolygonnCitiesEdit.String)) + problemIsSelected = false; + elseif isequal(app.tabgroup.SelectedTab,app.tabOther) && strcmp(app.tabOtherChooseFromWs.String{app.tabOtherChooseFromWs.Value},'Choose from workspace') + problemIsSelected = false; + end + +end \ No newline at end of file diff --git a/chn/+network/@HopfieldNetworkGQKP/HopfieldNetworkGQKP.m b/chn/+network/@HopfieldNetworkGQKP/HopfieldNetworkGQKP.m index 183e896..932672e 100644 --- a/chn/+network/@HopfieldNetworkGQKP/HopfieldNetworkGQKP.m +++ b/chn/+network/@HopfieldNetworkGQKP/HopfieldNetworkGQKP.m @@ -129,4 +129,8 @@ methods (Hidden = false, Access = protected) net = init(net); end + methods (Hidden = false, Access = public) + energyplot(net,varargin) + end + end diff --git a/chn/+network/@HopfieldNetworkGQKP/energyplot.m b/chn/+network/@HopfieldNetworkGQKP/energyplot.m new file mode 100644 index 0000000..e9b03d4 --- /dev/null +++ b/chn/+network/@HopfieldNetworkGQKP/energyplot.m @@ -0,0 +1,22 @@ +function energyplot(net,varargin) + if nargin > 1 + ax = varargin{1}; + else + ax = []; + end + if net.Results.ValidSolution + if isempty(ax) + ax = gca; + end + toBePlotted = 1:net.Results.ItersReached-1; + plot(ax,net.Results.Time(toBePlotted), net.Results.Energy(toBePlotted), '.b-'); + title(ax,'Energy Function'); + if nargin == 1 + xlabel(ax,'Time'); + end + axis(ax,'tight') + ylim([min(net.Results.Energy(toBePlotted)), max(net.Results.Energy(toBePlotted))]) + else + error('tsphopfieldnet:energyplot','Unvalid energy results. Possibly no path has been found or training has not taken place yet.'); + end +end diff --git a/chn/+network/@HopfieldNetworkGQKP/sim.m b/chn/+network/@HopfieldNetworkGQKP/sim.m index 713181b..1100928 100644 --- a/chn/+network/@HopfieldNetworkGQKP/sim.m +++ b/chn/+network/@HopfieldNetworkGQKP/sim.m @@ -22,7 +22,7 @@ if ~isempty(net.Setting.CheckpointPath) net.Results.CheckpointFilename = ... - utils.checkpoint.createFilename(net.Setting.CheckpointPath,net.SimFcn); + utils.checkpoint.createFilename(net.Setting.CheckpointPath,net.Scheme,net.SimFcn); else net.Results.CheckpointFilename = ''; end @@ -35,20 +35,35 @@ end % Classic Scheme support only - if strcmp(net.SimFcn,'euler') - [net,V,~,iter] = simEuler(net,V,U,isSaddle); - - elseif strcmp(net.SimFcn,'talavan-yanez') - [net,V,~,iter] = simTalavanYanez(net,V,U,isSaddle); + switch net.SimFcn + case 'euler' + [net,V,~,iter] = simEuler(net,V,U,isSaddle); + case 'runge-kutta' + [net,V,~,iter] = simRungeKutta(net,V,U,isSaddle); + case 'talavan-yanez' + [net,V,~,iter] = simTalavanYanez(net,V,U,isSaddle); + otherwise % Shouldn't be reached by users + error('HopfieldNetworkGQKP:InvalidSimFcn', ... + 'Make sure you provide a valid SimFcn function by using ''hopfieldnetOptions'' or ''options.HopfieldNetworkGQKPOptions''.'); end - net = computeSolution(net,V,iter); + + [net,V] = computeSolution(net,V,iter); net.Results.CompTime = toc(timeID); end +% Euler Simulation Algorithm +function [net,V,U,iter] = simEuler(net, V, U, isSaddle) + [net,V,U,iter] = simODE(net,V,U,isSaddle); +end -% Euler Algorithm -function [net,V,U,iter] = simEuler(net,V,U,isSaddle) +% Runge-Kutta Simulation Algorithm +function [net,V,U,iter] = simRungeKutta(net,V,U,isSaddle) + [net,V,U,iter] = simODE(net,V,U,isSaddle); +end + +% ODE Simulation Algorithm (used by Euler and Runge-Kutta) +function [net,V,U,iter] = simODE(net,V,U,isSaddle) % Stopping criteria stopC1 = power(10, -1 * net.Setting.E); @@ -83,22 +98,42 @@ end dt = net.Setting.Dt; - net.Results.Time(iter) = dt; + net.Results.Energy(iter) = NaN; maxDiffV = 1; while iter <= net.Setting.MaxIter && (maxDiffV > stopC1 || ... (maxDiffV > stopC2 && unstable)) unstable = false; - net.Results.Energy(iter+1) = 0; - dU = T*V + ib; + if strcmp(net.SimFcn,'euler') + dU = (T*V + ib)*net.Setting.Dt; + elseif strcmp(net.SimFcn,'runge-kutta') + S1 = computeSi(V,T,ib,net.Setting.Dt); + S2 = computeSi(net.Setting.TransferFcn(U + S1/2),T,ib,net.Setting.Dt/2); + S3 = computeSi(net.Setting.TransferFcn(U + S2/2),T,ib,net.Setting.Dt/2); + S4 = computeSi(net.Setting.TransferFcn(U + S3),T,ib,net.Setting.Dt); + + dU = 1/6*S1 + 1/3*S2 + 1/3*S3 + 1/6*S4; + else + error('HopfieldNetworkGQKP:sim:simODE:UnknownSimFcn',... + 'Unknown simulation method') + end + Vprev = V; - U = U + dU * net.Setting.Dt; + U = U + dU; %Dt already included in dU V = net.Setting.TransferFcn(U); maxDiffV = max(abs(Vprev-V)); + % Energy update + if strcmp(net.Setting.ExecutionEnvironment,'gpu') + net.Results.Energy(iter+1) = gather(-0.5 * sum(sum(V'.*T*V)) - sum(sum((V'*ib)))); + else + net.Results.Energy(iter+1) = -0.5 * sum(sum(V'.*T*V)) - sum(sum((V'*ib))); + end + net.Results.Time(iter+1) = net.Results.Time(iter) + ... + net.Setting.Dt; iter = iter + 1; if ~isSaddle % Logging Checkpoint and plotting Simulation process @@ -323,11 +358,21 @@ end -function net = computeSolution(net,V,iter) +% --- Auxiliar Functions for Simulation Algorithms --- % +function Si = computeSi(S,T,ib,Dt) + Si = (T*S + ib) * Dt; +end + +function [net,V] = computeSolution(net,V,iter) V(V > 1 - power(10, -1 * net.Setting.E)) = 1; V(V < power(10, -1 * net.Setting.E)) = 0; + if strcmp(net.SimFcn,'euler') || strcmp(net.SimFcn,'runge-kutta')% More relaxed criteria + V(V > 0.99) = 1; + V(V < 0.01) = 0; + end + if isequal(net.ProblemParameters.R*V,net.ProblemParameters.b) net.Results.ValidSolution = true; net.Results.ExitFlag = 1; diff --git a/chn/+network/@HopfieldNetworkGQKP/train.m b/chn/+network/@HopfieldNetworkGQKP/train.m index 1c7b7b8..2bb715f 100644 --- a/chn/+network/@HopfieldNetworkGQKP/train.m +++ b/chn/+network/@HopfieldNetworkGQKP/train.m @@ -33,7 +33,7 @@ % T = -(alpha * P + R'*Phi*R - 2*diag(gamma)); net.TrainParam.T = -(net.TrainParam.alpha * net.ProblemParameters.P + net.ProblemParameters.R'*net.TrainParam.Phi*net.ProblemParameters.R - 2*net.TrainParam.gamma); - % ib = -(alpha * q + R'*beta + gamma); + % ib = -(alpha * q + R'*beta + diag(gamma)); net.TrainParam.ib = -(net.TrainParam.alpha * net.ProblemParameters.q + net.ProblemParameters.R'*net.TrainParam.beta + diag(net.TrainParam.gamma)); end diff --git a/chn/+network/@HopfieldNetworkTSP/HopfieldNetworkTSP.m b/chn/+network/@HopfieldNetworkTSP/HopfieldNetworkTSP.m index 5af3db4..3c75b4d 100644 --- a/chn/+network/@HopfieldNetworkTSP/HopfieldNetworkTSP.m +++ b/chn/+network/@HopfieldNetworkTSP/HopfieldNetworkTSP.m @@ -63,7 +63,6 @@ methods (Hidden = true, Access = private) net = setOptions(net,options); [net,V,U] = fixedCities(net); - thisCity = city(net,cityPosition); [modifiedDistance,Ng] = neighbourDistance(net, tau_or_p); end @@ -73,6 +72,7 @@ methods (Hidden = true, Access = public) net = reinit(net); + thisCity = city(net,cityPosition); end methods (Static = true, Hidden = true, Access = private) diff --git a/chn/+network/@HopfieldNetworkTSP/energyplot.m b/chn/+network/@HopfieldNetworkTSP/energyplot.m index 5c348a4..970593a 100644 --- a/chn/+network/@HopfieldNetworkTSP/energyplot.m +++ b/chn/+network/@HopfieldNetworkTSP/energyplot.m @@ -6,20 +6,19 @@ function energyplot(net,varargin) end if net.Results.ValidPath if isempty(ax) - figure; + ax = axes; end - toBePlotted = ~isnan(net.Results.Energy) & net.Results.Time < 10^100; - if isempty(ax) - semilogy(net.Results.Time(toBePlotted), net.Results.Energy(toBePlotted), '.b-'); - title('Energy Function'); - xlabel('Time'); - axis tight; - else - semilogy(ax,net.Results.Time(toBePlotted), net.Results.Energy(toBePlotted), '.b-'); - title(ax,'Energy Function'); - % xlabel(ax,'Time'); - axis(ax,'tight') - end + toBePlotted = ~isnan(net.Results.Energy) & net.Results.Time < 10^5; + if ~isempty(varargin) + toBePlotted(1) = 0; % Not plotting t = 0 + end + plot(ax,net.Results.Time(toBePlotted), net.Results.Energy(toBePlotted), '.b-'); + title(ax,'Energy Function'); + if nargin == 1 + xlabel(ax,'Time'); + end + axis(ax,'tight') + ylim(ax, [min(net.Results.Energy(toBePlotted)), max(net.Results.Energy(toBePlotted))]) else error('tsphopfieldnet:energyplot','Unvalid energy results. Possibly no path has been found or training has not taken place yet.'); end diff --git a/chn/+network/@HopfieldNetworkTSP/plot.m b/chn/+network/@HopfieldNetworkTSP/plot.m index 30002bb..5fadf0b 100644 --- a/chn/+network/@HopfieldNetworkTSP/plot.m +++ b/chn/+network/@HopfieldNetworkTSP/plot.m @@ -97,13 +97,14 @@ function plot(net, type, chains, ax, varargin) error('tsphopfieldnet:UnvalidPath','Unvalid TSP Path'); end if ~isempty(myTitle) - title(ax,['\bf', myTitle]); + title(ax, myTitle, 'Interpreter', 'latex'); else title(ax,['\bf Tour length: ', num2str(net.Results.TourLength)]); end end adjustPlot(h,coords); + axis(ax,'equal'); end function adjustPlot(h,coords) diff --git a/chn/+network/@HopfieldNetworkTSP/saddle.m b/chn/+network/@HopfieldNetworkTSP/saddle.m index efa575f..c883ce3 100644 --- a/chn/+network/@HopfieldNetworkTSP/saddle.m +++ b/chn/+network/@HopfieldNetworkTSP/saddle.m @@ -22,7 +22,7 @@ for i = 1:net.TrainParam.K JK(2*i-1:2*i,2*i-1:2*i) = ones(2) - eye(2); end - DK = net.Cities.DistanceMatrix * JK; + DK = JK * net.Cities.DistanceMatrix; DK(logical(I)) = 0; IK = (net.TrainParam.K > 0) * JK + I; diff --git a/chn/+network/@HopfieldNetworkTSP/setOptions.m b/chn/+network/@HopfieldNetworkTSP/setOptions.m index 637b576..9f91e85 100644 --- a/chn/+network/@HopfieldNetworkTSP/setOptions.m +++ b/chn/+network/@HopfieldNetworkTSP/setOptions.m @@ -95,7 +95,8 @@ if isempty(opts.Cities.Tau) && ~strcmp(opts.SimFcn,'divide-conquer') net.Cities.Tau = net.TrainParam.N - 1; end - + net.Cities.PlotPhases = opts.Cities.PlotPhases; + net.Cities = orderfields(net.Cities); end diff --git a/chn/+network/@HopfieldNetworkTSP/sim.m b/chn/+network/@HopfieldNetworkTSP/sim.m index 83b4d3d..467c225 100644 --- a/chn/+network/@HopfieldNetworkTSP/sim.m +++ b/chn/+network/@HopfieldNetworkTSP/sim.m @@ -1,6 +1,6 @@ function V = sim(net,V,U,isSaddle) - if nargin == 1 % Start in the center of the Hypercube. Replace for saddle? + if nargin == 1 % Start in the center of the Hypercube. Replace for saddle in a future release U = rand(net.TrainParam.N,net.TrainParam.N-net.TrainParam.K)-.5; V = 0.5 + 1e-7*U; elseif nargin == 2 @@ -22,7 +22,7 @@ if ~isempty(net.Setting.CheckpointPath) net.Results.CheckpointFilename = ... - utils.checkpoint.createFilename(net.Setting.CheckpointPath,net.SimFcn); + utils.checkpoint.createFilename(net.Setting.CheckpointPath,net.Scheme,net.SimFcn); else net.Results.CheckpointFilename = ''; @@ -98,23 +98,22 @@ otherwise % Shouldn't be reached by users error('HopfieldNetworkTSP:InvalidSimFcn', ... - 'Make sure you provide a valid SimFcn function by using ''tsphopfieldnet'' or ''options.HopfieldNetworkOptionsTSP''.'); + 'Make sure you provide a valid SimFcn function by using ''tsphopfieldnet'' or ''options.HopfieldNetworkTSPOptions''.'); end end function [net,V,U,iter] = schemeDivideConquer(net,V,U) % Determine weather to plot the two phases of the problem. Consider % bringing this to createOptions - plotPhases = false; myPlot.myCitiesColorP1 = [0.8,0.8,0.8]; myPlot.myCitiesTextColor = [0,0,0]; myPlot.myInsideColorP1 = [0,0,0.8]; - myPlot.myTitleP1 = 'Divide and Conquer. Phase 1 problem (TSP_1^{\tau})'; + myPlot.myTitleP1 = 'Divide and Conquer. Phase 1 problem $(TSP_1^{\tau})$'; myPlot.myCitiesColorP2 = [1,0,0]; myPlot.myInsideColorP2 = [0.8,0.8,0.8]; myPlot.myCitiesTextColor = [0,0,0]; - myPlot.myTitleP2 = 'Divide and Conquer. Phase 2 problem (TSP_2^{*})'; - myPlot.myTitle = 'Divide and Conquer. TSP_1^{\tau} + TSP_2^{*}'; + myPlot.myTitleP2 = 'Divide and Conquer. Phase 2 problem $(TSP_2^{k})$'; + myPlot.myTitle = 'Divide and Conquer. $TSP_1^{\tau} + TSP_2^{k}$'; % The Phase 1 problem. TSP^tau_1 % 2 possible methods: @@ -126,16 +125,16 @@ V = saddle(net) + (rand(net.TrainParam.N) - 0.5) * 1e-5; U = net.Setting.InvTransferFcn(V); end - [chains,V] = simDivideConquerPhase1(net,V,U,plotPhases,myPlot); + [chains,V] = simDivideConquerPhase1(net,V,U,myPlot); % Reached max number of iterations if net.Results.ExitFlag == 0 mkdir('Phase1_InsuficientIterations'); save(fullfile(pwd,'Phase1_InsuficientIterations',regexprep(datestr(datetime),{':',' ','-'},'_'))) while net.Results.ExitFlag <= 0 - V = V + (rand(net.TrainParam.N) - 0.5) * 1e-5; + V = max(0,V + (rand(net.TrainParam.N) - 0.5) * 1e-5); U = net.Setting.InvTransferFcn(V); - [chains,V] = simDivideConquerPhase1(net,V,U,plotPhases,myPlot); + [chains,V] = simDivideConquerPhase1(net,V,U,myPlot); end % Possible saddle point reached @@ -143,9 +142,9 @@ mkdir('Phase1_PossibleSaddlePoint'); save(fullfile(pwd,'Phase1_PossibleSaddlePoint',regexprep(datestr(datetime),{':',' ','-'},'_'))) while net.Results.ExitFlag <= 0 - V = V + (rand(net.TrainParam.N) - 0.5) * 1e-5; + V = max(0,V + (rand(net.TrainParam.N) - 0.5) * 1e-5); U = net.Setting.InvTransferFcn(V); - [chains,V] = simDivideConquerPhase1(net,V,U,plotPhases,myPlot); + [chains,V] = simDivideConquerPhase1(net,V,U,myPlot); end end % TODO Add correct number of iterations @@ -163,7 +162,7 @@ % a. fixing cities % b. using new distance % c. connecting subtours with greedy - [netPhase2,V2] = simDivideConquerPhase2(net,chains,plotPhases,myPlot); + [netPhase2,V2] = simDivideConquerPhase2(net,chains,myPlot); % Building final V V = zeros(net.TrainParam.N); iNew = 1; @@ -172,9 +171,9 @@ % Reached max number of iterations if netPhase2.Results.ExitFlag == 0 mkdir('Phase2_InsuficientIterations'); - save(fullfile(pwd,'Phase2_InsuficientIterations',regexprep(datestr(datetime),{':',' ','-'},'_'))) + save(fullfile(pwd,'Phase2_InsuficientIterations',['tau_',num2str(net.Cities.Tau),'_',regexprep(datestr(datetime),{':',' ','-'},'_'),'_rand',num2str(randi(net.TrainParam.N))])) while netPhase2.Results.ExitFlag <= 0 - V2 = V2 + (rand(netPhase2.TrainParam.N,netPhase2.TrainParam.N-netPhase2.TrainParam.K) - 0.5) * 1e-5; + V2 = max(0,V2 + (rand(netPhase2.TrainParam.N,netPhase2.TrainParam.N-netPhase2.TrainParam.K) - 0.5) * 1e-5); U = netPhase2.Setting.InvTransferFcn(V2); V2 = sim(netPhase2, V2, U); end @@ -182,10 +181,10 @@ % Possible saddle point reached elseif netPhase2.Results.ExitFlag == -1 mkdir('Phase2_PossibleSaddlePoint'); - save(fullfile(pwd,'Phase2_PossibleSaddlePoint',regexprep(datestr(datetime),{':',' ','-'},'_'))) + save(fullfile(pwd,'Phase2_PossibleSaddlePoint',['tau_',num2str(net.Cities.Tau),'_',regexprep(datestr(datetime),{':',' ','-'},'_'),'_rand',num2str(randi(net.TrainParam.N))])) % Stuck in a saddle point. Perturbation required. while netPhase2.Results.ExitFlag <= 0 - V2 = V2 + (rand(netPhase2.TrainParam.N,netPhase2.TrainParam.N-netPhase2.TrainParam.K) - 0.5) * 1e-5; + V2 = max(0,V2 + (rand(netPhase2.TrainParam.N,netPhase2.TrainParam.N-netPhase2.TrainParam.K) - 0.5) * 1e-5); U = netPhase2.Setting.InvTransferFcn(V2); V2 = sim(netPhase2, V2, U); end @@ -222,7 +221,7 @@ U = net.Setting.InvTransferFcn(V); iter = net.Results.ItersReached + netPhase2.Results.ItersReached - 1; - if plotPhases + if net.Cities.PlotPhases if isempty(net.Results.TourLength) %#ok init(net); net = computeTour(net,V,iter); % Needed for plot phase1 + phase2 to output correctly @@ -274,6 +273,26 @@ [net,V,U,iter] = simODE(net,V,U,isSaddle); end +% Runge-Kutta Simulation Algorithm +function [net,V,U,iter] = simRungeKutta(net,V,U,isSaddle) + [net,V,U,iter] = simODE(net,V,U,isSaddle); + +% U = U(:); +% [t,U]=ode45(@(t,u)func(t,U,net.TrainParam.C*net.TrainParam.Np),[0,0.1],U); +% V = net.Setting.TransferFcn(U(end,:)); +% V = reshape(V,net.TrainParam.N,net.TrainParam.N-net.TrainParam.K); +% function dU = func(t,U,ib) +% V = net.Setting.TransferFcn(U); +% V = reshape(V,net.TrainParam.N,net.TrainParam.N-net.TrainParam.K); +% sumVcol = sum(V); +% sumVrow = sum(V,2); +% sumV = sum(sumVcol); +% dU = weightMatrixTimesVvectorized(net, V, sumVrow, sumVcol, sumV) + ib; +% dU = dU(:); +% end + +end + % ODE Simulation Algorithm (used by Euler and Runge-Kutta) function [net,V,U,iter] = simODE(net,V,U,isSaddle) @@ -328,7 +347,7 @@ dU = 1/6*S1 + 1/3*S2 + 1/3*S3 + 1/6*S4; else - error('HopfieldNetTSP:sim:simODE:UnknownSimFcn',... + error('HopfieldNetworkTSP:sim:simODE:UnknownSimFcn',... 'Unknown simulation method') end @@ -347,7 +366,11 @@ sumV = sum(sumVcol); % Energy update - net.Results.Energy(iter+1) = -0.5 * sum(sum(V.*TV)) - sum(sum((V*ib))); + if strcmp(net.Setting.ExecutionEnvironment,'gpu') + net.Results.Energy(iter+1) = gather(-0.5 * sum(sum(V.*TV)) - sum(sum((V*ib)))); + else + net.Results.Energy(iter+1) = -0.5 * sum(sum(V.*TV)) - sum(sum((V*ib))); + end net.Results.Time(iter+1) = net.Results.Time(iter) + ... net.Setting.Dt; iter = iter + 1; @@ -380,25 +403,6 @@ end -% Runge-Kutta Simulation Algorithm -function [net,V,U,iter] = simRungeKutta(net,V,U,isSaddle) - [net,V,U,iter] = simODE(net,V,U,isSaddle); - -% U = U(:); -% [t,U]=ode45(@(t,u)func(t,U,net.TrainParam.C*net.TrainParam.Np),[0,0.1],U); -% V = net.Setting.TransferFcn(U(end,:)); -% V = reshape(V,net.TrainParam.N,net.TrainParam.N-net.TrainParam.K); -% function dU = func(t,U,ib) -% V = net.Setting.TransferFcn(U); -% V = reshape(V,net.TrainParam.N,net.TrainParam.N-net.TrainParam.K); -% sumVcol = sum(V); -% sumVrow = sum(V,2); -% sumV = sum(sumVcol); -% dU = weightMatrixTimesVvectorized(net, V, sumVrow, sumVcol, sumV) + ib; -% dU = dU(:); -% end - -end % Talavn-Yez Simulation Algorithm function [net,V,U,iter] = simTalavanYanez(net,V,U,isSaddle) @@ -605,7 +609,7 @@ end % Divide and Conquer algorithm -function [chains,V] = simDivideConquerPhase1(net,V,U,plotPhases,myPlot) +function [chains,V] = simDivideConquerPhase1(net,V,U,myPlot) p_or_tau = net.Cities.Tau; % Backing up distances @@ -691,8 +695,8 @@ end if ~isempty(chains) - if plotPhases - h = plot(net); + if net.Cities.PlotPhases + plot(net); hold on; end if length(chains) == 1 && length(chains{1}) > net.TrainParam.N @@ -708,13 +712,13 @@ % Consider case with unique chain and all cities included % Visualize Chains - if plotPhases + if net.Cities.PlotPhases plot(net,'phase1',chains,[],myPlot.myCitiesColorP1,myPlot.myCitiesTextColor,myPlot.myInsideColorP1,myPlot.myTitleP1); end end end -function [netPhase2,V] = simDivideConquerPhase2(net,chains,plotPhases,myPlot) +function [netPhase2,V] = simDivideConquerPhase2(net,chains,myPlot) noChains = length(chains); method = 'phase2'; @@ -777,7 +781,7 @@ return; end - if plotPhases + if net.Cities.PlotPhases fixedChainsFromPhase1 = cell(size(chains)); for i = 1:length(fixedChainsFromPhase1) fixedChainsFromPhase1{i} = [2*i-1,2*i]; diff --git a/chn/+options/HopfieldNetworkOptions.m b/chn/+options/HopfieldNetworkOptions.m index d02e437..6099031 100644 --- a/chn/+options/HopfieldNetworkOptions.m +++ b/chn/+options/HopfieldNetworkOptions.m @@ -78,7 +78,7 @@ defaultSettingU0 = 0.3; defaultSettingTransferFcn = 'tanh'; defaultSettingVerbose = false; - defaultSettingVerboseFrequency = NaN; + defaultSettingVerboseFrequency = 25; defaultSettingExecutionEnvironment = 'CPU'; defaultSettingMaxIter = 2000; defaultSettingE = 13; diff --git a/chn/+options/HopfieldNetworkTSPOptions.m b/chn/+options/HopfieldNetworkTSPOptions.m index 8b82290..f29b441 100644 --- a/chn/+options/HopfieldNetworkTSPOptions.m +++ b/chn/+options/HopfieldNetworkTSPOptions.m @@ -91,6 +91,7 @@ defaultCitiesSubtours = ''; defaultCitieSubtoursPositions = []; defaultCitiesTau = []; + defaultCitiesPlotPhases = false; parser.addParameter('TrainFcn', defaultTrainFcn, @opts.iIsChar); parser.addParameter('SimFcn', defaultSimFcn, @opts.iIsChar); @@ -103,6 +104,7 @@ parser.addParameter('Subtours', defaultCitiesSubtours, @opts.iIsCellStr) parser.addParameter('SubtoursPositions', defaultCitieSubtoursPositions, @opts.iIsInteger) parser.addParameter('Tau', defaultCitiesTau, @opts.iIsIntegerScalarGreaterOrEqualThanZero) + parser.addParameter('PlotPhases', defaultCitiesPlotPhases, @opts.iIsScalarAndLogicalOneOrZero); % Parsing remaining options parser.parse(opts.Unmatched); @@ -122,7 +124,8 @@ opts.Cities.Subtours = parser.Results.Subtours; opts.Cities.SubtoursPositions = opts.iMatchWithSubtoursLength(parser.Results.SubtoursPositions, opts.Cities.Subtours); opts.Cities.Tau = parser.Results.Tau; - + opts.Cities.PlotPhases = parser.Results.PlotPhases; + opts.Cities = orderfields(opts.Cities); end end @@ -148,6 +151,12 @@ function tf = iIsRealNumericSquareMatrix(x) tf = options.HopfieldNetworkTSPOptions.iIsRealNumeric(x) && (size(x,1) == size(x,2)); end + function tf = iIsScalarAndLogicalOneOrZero(x) + tf = isscalar(x) && options.HopfieldNetworkTSPOptions.iIsLogicalOneOrZero(x); + end + function tf = iIsLogicalOneOrZero(x) + tf = islogical(x) || (x == 1) || (x == 0); + end function chosenTrainFcn = iMatchWithValidTrainFcn(inputTrainFcn) validTrainFcn = {'trainty'}; diff --git a/chn/+utils/+checkpoint/createFilename.m b/chn/+utils/+checkpoint/createFilename.m index 4c81388..c3b0326 100644 --- a/chn/+utils/+checkpoint/createFilename.m +++ b/chn/+utils/+checkpoint/createFilename.m @@ -1,9 +1,9 @@ -function checkpointFilename = createFilename(checkpointPath,simFcn) +function checkpointFilename = createFilename(checkpointPath,scheme,simFcn) warning('off','MATLAB:MKDIR:DirectoryExists'); mkdir(checkpointPath); warning('on','MATLAB:MKDIR:DirectoryExists'); - checkpointFilename = ['checkpoint_',simFcn,'_',... + checkpointFilename = ['checkpoint_',scheme,'_',simFcn,'_',... datestr(datetime(now,'ConvertFrom','datenum'),... 'yyyy_mm_dd_HH_MM_SS'),'.mat']; diff --git a/chn/+utils/+checkpoint/loggingData.m b/chn/+utils/+checkpoint/loggingData.m index 191683e..13c3d0a 100644 --- a/chn/+utils/+checkpoint/loggingData.m +++ b/chn/+utils/+checkpoint/loggingData.m @@ -5,8 +5,8 @@ function loggingData(checkpointFilename,maxIter,iter,V,dU) Vlog = nan([N,maxIter]); %#ok dUlog = nan([N,maxIter]); %#ok save(checkpointFilename,'Vlog','dUlog','-v7.3'); - V = zeros(N); - dU = zeros(N); +% V = zeros(N); +% dU = zeros(N); end data = matfile(checkpointFilename,'Writable',true); if isa(V,'gpuArray') @@ -16,4 +16,4 @@ function loggingData(checkpointFilename,maxIter,iter,V,dU) data.Vlog(:,:,iter) = V; data.dUlog(:,:,iter) = dU; -end \ No newline at end of file +end diff --git a/chn/+utils/@TSPLIB/tsplib.m b/chn/+utils/@TSPLIB/TSPLIB.m similarity index 99% rename from chn/+utils/@TSPLIB/tsplib.m rename to chn/+utils/@TSPLIB/TSPLIB.m index d57c41c..e3220b7 100644 --- a/chn/+utils/@TSPLIB/tsplib.m +++ b/chn/+utils/@TSPLIB/TSPLIB.m @@ -121,7 +121,7 @@ % --- Methods definitions --- % methods (Hidden = false, Access = public) plot(problem); - [tourLength,optimumTour] = findOptimumTour(problem); + [tourLength,optimumTour] = findOptimumTourLength(problem); end methods (Static = true, Hidden = false, Access = public) diff --git a/chn/+utils/@TSPLIB/findOptimumTour.m b/chn/+utils/@TSPLIB/findOptimumTourLength.m similarity index 90% rename from chn/+utils/@TSPLIB/findOptimumTour.m rename to chn/+utils/@TSPLIB/findOptimumTourLength.m index cd7c78b..d2d4fec 100644 --- a/chn/+utils/@TSPLIB/findOptimumTour.m +++ b/chn/+utils/@TSPLIB/findOptimumTourLength.m @@ -1,4 +1,4 @@ -function [tourLength,optimumTour] = findOptimumTour(problem) +function [tourLength,optimumTour] = findOptimumTourLength(problem) fid = fopen([problem.Name,'.opt.tour'],'rt'); if fid < 0 diff --git a/chn/+utils/@TSPLIB/plot.m b/chn/+utils/@TSPLIB/plot.m index 3051a60..cbc0ed0 100644 --- a/chn/+utils/@TSPLIB/plot.m +++ b/chn/+utils/@TSPLIB/plot.m @@ -31,7 +31,7 @@ function plot(problem) problem.Coordinates(optimTour,2),... dispText,'fontsize',10,... 'color',[0.5,0.5,0.5],'margin',20,'Clipping','on'); - title(['\bf Optimum our length: ',... + title(['\bf Optimum tour length: ',... num2str(optimTourLength)]); hold off; else diff --git a/chn/+utils/@TSPLIB/problemNames.m b/chn/+utils/@TSPLIB/problemNames.m index f5e75b3..1fe9bf7 100644 --- a/chn/+utils/@TSPLIB/problemNames.m +++ b/chn/+utils/@TSPLIB/problemNames.m @@ -1,5 +1,9 @@ function problems = problemNames(hasOptimumTourFile, saveMATfile) +if nargin < 2 + saveMATfile = false; +end + filedir = fileparts(fileparts(which('tsphopfieldnet.m'))); TSPFilesDir = 'TSPFiles'; TSPToursDir = 'TSPTours'; diff --git a/chn/continuousHopfieldNetwork.slx b/chn/continuousHopfieldNetwork.slx new file mode 100644 index 0000000000000000000000000000000000000000..90ba0d58d7e6d995132f92892cc3d7aae9bda81a GIT binary patch literal 23928 zcmb5VW2`9A)-1Yg+qP}nwr$(Ct-Wm9wr$&9d)arNm%QXV_uahYrZf6S|LBaW8a;b< zS4u$|7z70X0007@sEJPUk?S{F8xR1X9S8sb``=YtQx`)MLl;AOV|yo41t)t4QzsWo zQ)fC4TN_^`UHf1HlyB-VcTwvl%|f<~G`^OJ#txee>;Y}*QiFiikGt@^t5!2ec!$}8 z?V*#=KhmmP<_cNTiTVAHiNHY<+0jITbsMX(2}Q7|oU|nYAT9ZcO_IiH$YiKIl$yaz zIL*efA!OBZ^9vbS2GtvgRF%9{2x&YLs*1+(mHn)ydCdUb_ur_s{qxyaQQX39xws1! znN1swd=-uC8 zy?Z@R@~$1{S|b3k-vwY$6`L;f&J@Nzup`EngD4s_?lyo-AbA;W_Xmtyg)Rr+)NA@( zf*GKQ55h=c_>4cUeatv7N+n&$MV-mh66j^co9iTB{e*q?Iy$mUbZ^f#CS+PO&}b`w$m}oDkYRJt0a94kRcTbHoV^DA_Dg5TWH^erDW$4mwy=zc4RKah3PI_E#x zh5z69V-Hg8GXCLS{8wcEfA~c`TukkpE$!|8GoHF}Q*c2H2%`QanLV`fMPXx7Yjn%s z8e{_bv==Nv{`8}$boO$$6O@-DF^8hL-saK~rXWGpZnE}UNVjcMw*W!Fn_%MR6(Q`5 z5uH@i)j4HV?#S=+$k8jt9U*if7sV)7aWIW67@ZsMfhBHYvgP15lB9~+6*s@#AdPzv z8ao(bK74+PD~e=HNuF6JpUn!|t+#z~m%#sx4bqpiw;KZhpxhq-0P`OdG8%sND zdLtWqV`~#jLvtrX+yB71;k9(%5=+{9q^{4->9(9uSt?I-kh_gfBI((iMnTsD)+|gD2cZdUXd`*3CD&9&UZ03Fn3vVf7 zLpjRMHSV0i$8u<~fXDXX_&R$WXbxw#L(^+uBL-06H_68JDx!b|i97g|bTh9WhmS6| z6R$o@LclN+4M5(tJ2p4yPHlzA*6dj0x7K=8O}*0($D~yCKWaWUJ-nkf>xRRI?)-@{ z><@Fg#xNWg5E=u&cd$3*w2sDQ*KnUNzylc-F69qsFGQHU9teLlKIDKkwW*7oihS?Q zX$^bv$b)?m9s;4l5)W8l$qk1$6j=?Y?be6<$#bT@@1}tFTrc!+EYyx^Bs!9rBVRK? zOmJWY{=yQ!%-y`GsO&UV2l9qoLSILtYaw) z@r9V^Fvprr5kZtOYVV4@{fv_x%v|FLI@letMp`EWg4onszYTSar$vuz<9tn%rlRNq zpJ87Hb~fEZOc@zP)Y}Ge6Pc`$t20|`h#re2=1^b}92@-}dHY&+8}GPDaz3OhQazHe zhBn*Zh9IW8ba{g)Wrl-D{p;5z)GfXWy9BIKT^-TpOvKl+)?nP#=3V57#)n#_)R&~k zeW-`&Qac4>nXJH0yl+8_Xfvk0$w1g2nbOEZZ_qg}R18Z)59Vo&^SylY`m($xRkk+r z%Tlv7@cY^Gll$S^TZbgN+!_N!5CtOI*lE-#CENOKUjJ_^SbKBP9L|wlJ)%O>pW6Sl>241 z_l)RbC#XA?B}_2p|w@)IDOT=0p(Q8+8?Tmv!Oe79= zEED_G*3dwcSc3~#C($}6k1ID&`g$s3(3(X*zA^OsmN?eXy?)8V27H**4hs+&+T-$m zZFB$5Bcks^>CAu3gU`#gg|oD*2EpI{Df#uohxtR)ANvxYomk)hQ}4GKlk;Q4``gGl zh~c$4r}x`C^gG^fx$b!(=jTO;ovrA1b#M1F?k?+vzBSx5&E~4cI@-*(~y&E zNuKRv?6pYQmuG?eLtO9!b=#ts@Ns<3OU!Uf=*RS&G6zPL^sbLTNI=vhJ8+DA4y$E&@_NeM( z3$Xvf-N+*&Hd))Z7w3Dl?l)*H@E2ax@7tF7^i8je!?VmQihd|L$(3&%PhN=%)0SZ* z^XTSXa-^ryO};1mDAwz*xABpsZ|-a_4J>-#*KU{iLc+pdp=Oe}oLPpa2x53*Rb=|m zcZu_LXY`l9gATEzkV*YSxP+{Ey`ZOu({KYx`~n0?yuRR7-mBgA#$XZl=xhyQ@MSDY zb~xYf+T>or>popEyDF@J%Cc7Mow++CHw=rwQ>`xpM6E5kY}@LeNsbXiMK2~ew)D7` zhgpDu92{KpVI7KuZmEw~3GeDkWO9J?;RI1*cpj0V2FeiSUA5>75JGUic5}eQ9s%vw zXoH%2j0Qn8Xlq(T9vTi72t%!>n8?JaJ zMFh@?q~wDA9%r{f-Hbr!cibTvbW%Cag_z5B+co!EeCY&jGK>N z_lqSa6XjVnx)D@jt)}4l2MmN^P2ON-1knV=E}?ZG*@+CDfBO?NGHfbKvU7kW!<=P> z<{}Yeb6^>G0wS7_VAdt8r}~KkQKsU>46yA$I?Wk>rNBI#&%O&-k^!wV|_7)#{tI>;VYchdr@?uB$xw03b*RfI3x-% z*ZGoIVu2LGbZg9V&thOI2nyFQ!chTu#`-n>Y?5|-<&4%&oK2ND2H~W*!+tn@4uD#A zFbo=vh0`WN@)ZLj=BRhr$_Z+;PKz!bLzpsV`pQfpMpuYP&v1Z)Ms0#vFdAkT;I$Bq6KYBy2I>N&C< z^l4AlbYzlpMx;yBr9(u*_K3DJ3*gxE7_dFZCd>44Gyu8}<>Ouxzc5u4-eHMkF3CL0 zM5K`%_ORPO=^1A%u{8r(RlBF7i_vaeZ+*8(3`OK#IJ2M?NogHnLy)h7U9-ZeIXHGk zuno~d+21q^Vvv!Sb@$OK?8Dg$)^mE7OrFjJ@F#$~Z&QlC(M*efC6YF*MLcyDPRc|- zVc?B}f9bWwcC@0|oO22Sn@}m;6 z+&w$PT}SbC&6MOCK2`%j19e2Eu}9Ry$4u-na+B(WQ|d=X@9AgBBy8Bg@jzRb&VmA3 za5HXrmDOk%*gw3pa5?2% zJuxC=4A|I(bZvJJBF)u4qNo?{Hv;F8%~W&$Q+2B{1sHEhrwat_+zgFH0H~|8@MO@_ zWIdHNNMy1%*Bu|W9egy;t`V?^8{SE{8|%{`Z>d9!x6Qpy*uSK`h3}1xe!4N)R*3@) zLuSxiWPeN$?Uf1b60@tymt>c!nw}b12U)!^9QrJK>6@RP0bH_+4X;3rt0CAlQPK?R z+7u~@eKEkKw`?Wl=4b|%d`+UB zCUzr8R?tF$foLHN!Tn=Di}@1kR6Q1%JqEZ?{!9YdsAZj14?yJtH6 z6}6&uaKQrWIW!WplU)__#fXcm*tgFZ+YJQHNQ6^JjWK7Qf0+y(lXzmXmRcY65cnE< zeF1oHHOKy8D47l#cMU*p@ki!+Y7GTS3T>t1Ie^lk3?}FiC+HTddL}QRW*ySDYIKm0 z2qYgKz;E&G0ULy>Z;cA>x6Z;&l8hl&1kHSZ2zY-?_j*hJS=~6NiS=}Ir7<_bO-sKf z>~T4*-c*^Hz{&go$b?zy&R{~|WXf|~^S7WFpGcGc_>gg=NWd%HWE9Jz;aQyFE>w|H zdv0(F5eJwzhc0GXTjF03|2hMbTZoCADrE&J9xI$2#Iv}7O>Cz6%6){py?U?3xB(aU z3zbf93JMtF2QIBiVf9nt+8z<)P!Ht{=s#uCPNM=0b>UmxaV~>%JQ3!BazhKa5$Bk{ zvWHSAXliE1o@gGn+G)huZ@=V*A0H;i!Wkxh=Er=C1Cfn0Tg?gD84?@CxQo-xI*#~~ zPxr6+@Aax;e-R#4mAcD@HS3AO80*H<4fq~e%IEPw+MiR@ zRVy1Gq;PcC>89$&Z?RufUz4+zSb)5_9MwU5?tw$`DWdzesrQ1;uzMxT)fEyTy2x&y zaX3bEO21^#DM@Y4DsH3#%Bl1LiE>o|T~QJ46K^Gg_N%Xh8%*W-nv5Ic?nIZMVE!5} zkJNhD*wxYdwqkWDmHDHD8w_d031=j&M;a-0q0~pNK@Op2U}$0(Z(gyGlN`LT!IS-A z&DPXVmL_a7G5WJgq}g~n3OC{IzxBzNHtec`PVE{l zsA35pif{$*5J({gp-3AshrYUlWxTd9Z@o4s(B=r@q`01!mU#`)6n?xYdes*~k!WAD zYj~JTf{(mb7O6BKl7duDiYf)2z04z&ytOyaq!nYzY zR?cLwZW9y*DE63w0Ih4SS5$2w=8K*6L)n4fRf6`Y1s2;ig-g!4U>&q&O1%pIByKw- zDg7l$JAbOD-lJB+yG*Hn-Ga-AScOEpCr-|Ahzh(}Ze+;!$_8{_itM;b2H8s2wI8D&G0pGmOvsf-`n6tXI2?E8d_aSZN0cM6Svm zMfDMUl({YQbsKj+2sd~>vaQJCqaVo5WlKg^!a#ELs!>bp38E4q2n5B9&yCvJVPGED zld($X+|-DD}mrRn9nSWwxt`u!%8Wz}j=(WbQmxqRgVe0rHmp zV}`s{?@pjrUvNdwXik6oZ_4(DSt_Q_aM5b&jTMibu1bwKuTze7w%K+`lyyj(24GRt zd0JcC*|n+FESC5k-Cj<_z%EjH{<9LZ!^>=(k5D)sygeT*`@9N z2!dU{cCrhw4Wg^cK@%`IzzugogsqqkR%RHx3EyFtE#BFojPU_gz^Y#-Q$kNW`IJL? zgR#V4{z&Sl%N6yrmGgQai6rMpt=$cqEl8^_q~SP|gAek@_}(;^otWE>2~s{M+qcMS zjv=&}X45d#?YdEQka={FZnfrKt^j>iLvxs5AK5<5b#kSrSg z93DUKC*{7PUNx}(&L05%y7^n_ET2R8T#L^nQ&Mep50^&%&?h5;e7uK-aFcbq`&TnO= zQ|?437LADEK>aX1l25_4{ z@0Ttl^hpQNcY(-r+docAc)I>5ruM=J)t|dX*Eezz-x0~BzU>qI7DsC+Zc#mp^vf;0 zqQOQ_BbHk=yV(J zVd9!VWUuZAt7ZTB8XOafU8FX@RLGTFB|R?lY{P-xWI~&cF&!PJ+=4@8u4&Bn{23&R zdyW&qrf*l>RIQfc+^ii_jODVj8dP)eymDwJ4yP=pK+hWzy;d{MKE-K~s#ac&i@fuI z&-g~O^`vYzYM{GKj`USC{!2AK01i%GUF+HrsGyGlL~fhk_EiF;dwno#B-RHo{^p{7 z+pBurmnLC0SR_KymhQx~QDf-Z>5CFWmxY^>>{b`Iv*0DaP*Mys&fPVYzgZPc$(#`U zfz}vtF{L4~9olJp92Hm=7>NZoHJI1U!Bx(1c*J0oaPyL9(*`opILlrK%{OOcH zGW3hg2clRq0T~&8o6MB#oOU^o&Xd{I5`lDV(^r!Aek=$CN0q~j{y8h8Q z<5+TY^O3w^=i))q=GCi(tl=?~>;b>-=h>_wfhvP^lf%Q$Nnl8(e04WGQl&!gRtk=V zb;9oyi}`(7K;!I?rcCrOVz` zavT|SBv9%?J**{Yg3k8{jCV^Lcd^`Qb++d5Ih+j3#d4LY?|N4PhH z_lGuiblWOtgGyAD6IAqyLHE^?ehuGPn1KH(Q;kr0(2OG=#n0kU|1JJp?%Adp@H(!GP_h$cn}=8%Cbh+}UzP zxszU92624vURCCDwWi#u-9w58mt>de;1>)Z?s@FHCmsXv+M) zeZij0TA15=q_9aI?W0^O#YOo$+!{)aca7#p$VauQG2XjkkT=Sl8-=b(FjESvxNXLw z*lBJ0OioMJIoE-PR`OQ|QLH6INksre->DoiGEku<kju~mTq0&B2Ce#>q-5vdOG_iEuN>mD@!kiLH?4)Q0HyYk$Yo= zTQ!Sut>eG+F?;^IZ?>93=}gio6X*-SE=$`LEHj@iWL1&gY?bH=2);pv#LH<{&XjLmrbEzS1})xp-G_qO^o6F#K{$-5wQAEG_E1NcK-hXCu(P^}s zu2!EX9Gy{Xa%wlBiu&1#c&QsPc>Ef!uyHW%jv#r-!cuYSBuyyjj3%(Ypl;MN&d-Lj zt}#{p)Q{A)B_A2Q93qekh$rj}m(no9G7rAjqKv73i{{bW*)Ggw;86GpW@HWC>{EVA z-dZf=CEIFfqMYZv6wYn=!WsdJv!IP_x#7X57gm9{9M%c@a5wuBfn}fX-rvJ|ho17Q zDj@-0JoFfl8x6sp#&1#63n0usVcAVn==%By}+vXLyKJlaIFVjO}^v^NG0j1dibR_;BZNE z-j<1v-`$8fbZlr^SikoBUbj9(H+{Z6m_@3Q%5R(NZGCGU{F2DZ-FO>4$oozb3qXzN z=hA{A^=__H`sH|HtETDO!Z0ZaVo0$1*}g-hmU976^5}Q55?^bvX%FxVJ3PVi_s?yB zSi^n!|F`AQ-W&=7_0Q|@^9BGw|DTqJvAvy{rMa@H3&Vd5j}~29=Piz;pWZ&95-Hsq zxswq&rc4=KG3`bZ(#>R>R1$LaCfAc7Nr}M>5*C7TjnAt(Yye6nBE93x_xh%|o!E4+ z&d&=m;IF5-GM0<$@^Q>LzYD$I-g7q#w1*7SEB($;ot}^NZ}U6*JTM;ZhUcKk-94@x z`8N2z1qruaymdN%p;=IBN4m{9)uUIThXT66CB1#i6Y1w+F40ue~5A#VIU3v*3s3tv=NmSZhbc7 z?5|mLAhPV;lej&DZ&8&g5^lu(aE&)Camp^+(9`?1`+PotV}!bb$eNjS)JNQZNJ2H9 zKn|=h0sHUCK`r^`ABOp*^I%I;p+K|Q;fAS~YGvUytdS`*YJ60Si0Jn;O|uW-^3Wnp zq>=c8P|x2yOp8MAh=(HN`>x4bVYFAhTbb&z3CGTy!AaFv2p}j=*|32AT$g>IN4^0Q zZ=_7Z#v7t2wX+&G5NdM;$4ZREsXd7eeM%Z_bgSG4?tAJvZlAae63^pPkxDEzl2iBk zHJ%1d$Zp>3+{X-?L|<7c-kHeagBUJ^Jlay$mQXlxmRXx=v&wSJs`*T;U4;ZyB#PSU zpE&M<6F#?Xg)Dev(~dIV70w7+DM@#3VJB`IX`1nvb97}IaGdoh(pw*K#4%pG5}t`H zmJn>H{yoQnk!*t$MUJEb@|tFH5OUw&neMZ&VfL&{K3PF&Rc(8<6=sH7y0kG2#GvV` z<8J<)@BbMG_3zXPvNb>-?>$a6r#pPAmISY!*o zT94=UN(c%^V3ZXqF*LALIMV6&a`lG7*BoER+WZr68q8Svm~SFreG|KfrX)RRrXDcL zJ??e)QW_Rrkq+kK0q?cYbTiqu3eWj2ud9NBtR3W+FO{|VJATKz>-oTjO z_9Wq^_JspMLjbZ%q+lArO<(|;VGTx&DvSV>=YesnjNPh^2fjjwl*cQ3sXapG&9I@y zY%L$@aJ2~;$RGx@RW!+@?g*H{vt|Xn}rzY2Xe|ql-&e;9F4)VfT+Zc4FOgn z^iRs3I6e5jEFN0!`rqY9yX`ei4?e#*q?| zZNQ=PAU*^YcqjsEVXdI`VtxUE-1w@K@?OCz0r_r)VX#ak#$s4cn}Od`FJ;-;?yIZy z1%{Ah@V9Xa$ZXD(=50&RmqB!yElP&fzcnUSjwEore z-x~RR;m%ZSR1Jb>@jrQ?^?J4&z+z2?T)8AIfErBtP~(C3fcWic;H<0iEAb4?YOruvjZsErUoq9DI z!xm(zD?ZS{I0@URJE}0sKoF;3oYU>7UxA8R0V7v0qZ?oedDqn- z^4tW)Ewo_V8dxeV)Ose2h;XLBE@5&Y3`ONf%x7tl7C-@afoD&Z2JOm2GOhHE%1B4E zBeW9FIyg|yssV#%`y2qsQV!ja`%hiA)kRZW@%Y0(7+J~%@S#An{%}D(PlOr{6>XS7 z&}qg-4uE~dj@Wpg!s8ab*?~1C`?VDa+l40?c)^MRygTr0EQ^|ZG3Kq^#Bk!a{X8K$ zpTCZ+orIbk-`OVCSVDYdB)x^y>#BPK@#if1;bgj~zW$(Lm+#r@pO`VRDK&?maw1?) zY?9JpU=bwdOh)%Vu@kZ#+T`^^j}EO+LqUsSe=A$GXk_SQK5<4&mmbLASbavNU@c9j z1qIt8i5dc->NB(SaJ6AT^Dk^_V3gzLcY2;3msbWriSRy11Wi-=D&+^EaJH~A&@o4! z2*1qQma@rJq0Mn{$}Q6%pX#P@RNmF6vQY}){~{anmEixX9V5*&6t-O*O*~{3y3-7# z9LKZ#uwpSa&T?Q3jWcI6CPX%IJT(l<6kE0MAT!`)j!yYx(~6)FO#f}SY0vO7*IqP= zi2O8bc$F?crkvyL#(~DL7LwPzZc-a_EdPW~QX^*qL<_EAWayrC3OETzP7rWrBvq;> z$FWIFs1#mXq^S0Sj_#0pbN8q3zrVdnqHYHV+I#1uT4F!mYl4_BkY7d>HdY~onFLV7 zdC^pdF-Rv$rO3GF=_gY6q5ADdO0dT$5?Z~Srg4b?j|)Q)!jL03JyROe#3`femca~F z-~(@t!EuV;Ky5<3*3loxb0}b^NV0~w*vaE|Fnpkx1S63QpnbFj6NW-?hrysJ9SwYY z)+XJZ0G2JKk&ldF)1wr@0VP~mNzjD7$fvhU3>x%i-!y!VKmq%zjA1`WP!6TgJR96Uw<}B+&hdCl%ih;*J^-%C7 zGdU;E&yDu|=tl;lV{t8^?UkRf*HH!@yGKGMe5ut=ch2lpai1a=D! zCx%2iZ;p4u@GQ`6-_m8nVja*gA+vyF=)mBj$PnhZ(tXJY+!Hvi2Q&l~2p7|DpP7D; zUD?3A_ELPHpF2=1kz>bE#c*!z&<33f_KC4%-^)jLmnfU7Q&qD7ZSd*HfIT_^#OjRP zA{i~GE+8r6+Zo9)%C2xw#cu(10e<02%J+|Y!rIE6$CafS^Am{Re`=5`+Y)AcYVwe4 z3(*V%`3s7djHC|*#T@ndj*7O=G3>6OmgDnVTDG4F&9%Ix8q29Z0f$P+(+1i+lV@pG zxmBsA!(B3}>ve5L?TT?{F`f;#T!Bl3y<;j`%Lqg>@eEfboVe2V(=VRaIvIK}0azX~ zDFD)d^;-8;b;%(V&pZpZze-{^ny+Tp?o@R0p3K>zh>@Fm_?OLz0DLZ}|1fM^C;^0l zP=ZJSp`N!0_7uMI%}tD<3}F~27++ZlC3_g6cupgD==_rkI{%S-r9ejk8>=Zm8swX4 z)O@l5RR?A#2-%3n5~>&OBro9`NJkM!z)QGMI02a@22@tfyjGX=rk7_jio$NKG_TT_ zrczz=?k9jwR-;8hn}o(cUjQT)5LXhyfK+xM08v|&L@5wUB%HK;hTbqhI&3qkkoe>3DmXzM z9B^LOXjigxwR?y{5E>*6hTmITr)^LN7F9PyCLd%>Z<~SVyR6NFeP^#6zIl#SPa?*` z2(5Bxq~qqN9XdFEfj3G70+yl6J}k0x;|H@mt%&(s4^W0TH`d{P&6E>n5i(dOIQVN%htk4M4c158yhOW zz8M)EwxbM^Ca;=Rw9@aBV*k*V!E=a=rF9lg`>19a(-SaScWeIU3FG$_; z4jKdz$w z!Ql)P#*mFcaZW?{Ac(Ozb{FB33|*BIvc*v4qLAwEWetLZq7h$bTw9z}YLPR?dWm0N1i;TxHppxVW=sIItY@vYdsn|l{gu~8F-pDE%P zx6D8QE>g3jWHD=-^#fnhSttD~RSTy5~Z zLhMDO`uU)NzVS_*Be4iBj{PQ)4IzYu9+uBOwP!D-?`RWEoa%EY-Eu=*Ie@fuN|;z7 zx+av|Ut;)fF@F5f;4?!hhnSK-FbzcP^@fb(n=$6i4zNbFGeQVQ0=Nw{qsbc{g>VRi z?FRYb*=_sOY2_lO1lA)3x3X0F_^m9kW+L&03ZtwZoh8|&G;^*2$Ej^S-74g6tnG_y zo2x>-X_Cu!7n9xRsNwk8g6}2!`nJFgox=_FE=zqIf1ZmOp zwJxx|Rv8GqLL^E|6qv5f8!CrM5}S^9>ks*DkcWgriy7e%E_|!wJ#I~{tTWFRvolqZ z{n)x`%1YaU&!iqgx}wkrqBFc4&wSMenev~uV?dxnX?q=h&im)Icqy(4)%DDn6i&A7 zk^uJx+Fo7xZuE`d2IxSiL?si3no!(YA75r55 zzu{MhdJ$;s9pLq_2SLK>r)85HaA8_VyRL`0|8VV73y5=(1m|NHzJcT`h^GzT*jC(B z<#98eS$sT0LmayP400|v-b}J=vh;_Q>BOTT+-G9bZ$Rcc+)NpdT{gbm{4BrAOhW?G z-fg&hKb_ORux;`ufL21A$!sJLpP>g19<8P&K@V zn?5Ox9l1KkDC*ySv(n=i)8}Ml%Mk`Tu*~TYMy4#K{h{|~1X-oZLP~EcnB|PqQ%5$DC3^wYSLlj z{p`h^hRDW;isZhAD%bn9=pb=0sedu18fe>z|Dac&T;9+4EQs6Gyu1?oW%`ebK=Aas z4f;exv;^*SX~3w4lGeL2#^OGgKxq`uBb+heYsCHM*c}s_#ZB(w&RB!@lMH}>2dr=W z)@&a3lk#7dIP%Mqc)PoulAL-UH6`u@7Mz8h7L*Gd!TU=>tXUm=4==bP9 z=t~B2x>~?AkLXK9>gqZ+ld+V&_q75>C--_WK^;cSf;ok9X z=a7s4I+;g_aJDtA!SrNZS|Cgt`3Sd(FOi#0-x(qfmQ?r#AHp4QJ6XuJDS(AZ)v1!Z z9U6OVCqXwZdS~$s4)ms3ALoX}CwA1GaP^d36j@AKM`;QoPIQ37HC>Gb))m zS$5X%q09glWy=P=i^E6E4S4-VltD$jd}jjws5h6cWveooW!c2d9MBe6*yst@CFrdi2uL$YSsgHOp)KO*5M8&Rk+ru}dU@0Y0 zL?fj4`O7`qc8?C}>t*wWUg@5^UX$$s*s5rQlD+1;gt-uJJ|vC@&A&gw*K*%cWQo|1 zc)%E+f3{4`eU>`3b-cmB1^_j{ed1yBU-ysZ?7{f;U4C}^G-G}b05oQr0xk(wVucWl zm^#KrxODQLN2V$--?-6DPjGEiRW}zbyUOQhHN*Jq>398Iq?9h+%O#L}QEni|8wNGc zqx!oaXoBI>n|Uw}@YRO0!OZBh#Fo*?*rB`%P!#gEJDY-KbY~o($5G z;ax$TTD=X~0W`it!Y(BA~-inpiH8(zJuO=0*BV;&?K(t&n@e1Tg)>Y;6qM6JBeJBdDO8 zcvtp{Yxr*hn;wK6NGe$5*VHQP`URjKq0G!xSAe{R0c42N8j@d$w<=(*?$2)+*&wwO z$ao;IW)b~dAF~4h?Y9>L01T5UtQpZRi=fh8bN(zUMNYxGBvTiKUS;I^02X%uMl?Qj zu5U}%6m3z#U^z14(lsxtjGeaBdDM`sQdxn=1u6wE8XpArH`u$+nORkHd14ubE(jfq zgt#%_{@7Dc%JeBU3$$qvdHQ4MqOuvjOYW;shwsqf-D~>xW9Na=GX$_wu(Q1y$`d_w z>Zra5_}8BE%tD?aG}0>~y13Nt$l&)!dLq64J=sdX)9dwr|9G}8ODG-QCUOYI+wjA0 ziG|uhkN!BAA)2?W(f-?9dslfd<`UOewzL@ya9>xY_cg5iQS2=KB)KcjBP+~t-(Zi9 z!IDycFfyr8n1=3$MWaE!lovY$lS8N$IWC|Dst9DcBHOd2K&$&?Ztv?>c#w(sZlUky z>!jR7>+gz!`(eMS`@z=?f#$-FkufJ$*z?vzx0O2Dr@Z>@hSidlQ#oDUL+h*Iz8Fy= z7Io)xxvY8At}SvI4Z9Wq0kXoFnY!9PO1kG|Cpl{g0;nzE$egh6&9}3Q{RvPN4Di_p>oujwc-=0LmXDU47XHwXBPt zN!CR&_t6-NgNFyf-p}ROt;MM^CDY{_U~TsO29fjy*z(3$<&tD-$YR$I)|~6fYp>=NBxuly$7guc3a{q4Y7k~QvgyeInM z7$=`0WBBXC@{hwp(m?sr73ZEA^Whf&gq>e976cP@ne=anh^w%X|t%-WJh_kznFj8*auU#3rgjU2o=|b2y8fNC`WZ=EZM@t zJA8treL27y{#&&m`IjH&O9j6&5JG2%*9@yAiz7>47<`>pc@eLm9PWsr{dvqfgXUaH zlgQM<0($CRHz0C8-Et%>F+PN>fAK_>3ZjG%eNa^jwoF(=xMylEjSk zto+2Zbek#_t>jXRLSx%eqvPzH^pp&|9PPuj^iKo~4=_b_$y7_6^ zsmZD775R_}>{9?51tkYrx=9+KY6?nfDbPvjqMO8Nh%0J>JU< znw0;dOQ-)LW%&QI;eXK<2MbGMLmNpu7gHxQLu1qbbRC-{XgByTxAU4!^tU(kx>F*k zTx5$ziYOo4;RsSDb^XEvry#c%E+k5bsG*V9ul0wAI}87k$|8^k3pe`Skql@)RI%K> z!9jh4Ks{J=sz* z(95yY;Mc&o^k9o{Cs1?W^y&y6(0;L04{8$1e_sMtSUVr9qS* zt-t`2l3p3Nu47*gpDGLPds+X#S)Sj?N{aZ$?!>>M{GTj4*tnWo+BwsU{L2#A**m*f z8Y{axI5?R)JKH<`hi}`s0jPg`i`;!jnci&{gHw`9(&v`s^CMhop)VGbSR(fAUW$e= zO9f@#$r>B~?uQCUAvkD!O2Qs`mrUBGvi~<6=3hi# zzke{+{}sjm366}txuvn7ouQ4Vm#LG&|AX=WX67FzgqfJG~Um__&PRG^89YB_NhcwTXEVetwJ|+t_e_iNF)Az0lm!*>x~zDrIkjwXCcI5%WWDddf)wHscIy z>!Sf$?b^Af2Y-T4xF0?;NrZg$bu+TJi>z3hhzCtC=>#VN4yuT z3f9mmIYxfp*HcoB$$!VpJ$xaTu|Z9L`d$IjtMe=4Boqkda;i?GHz!|^eU5I6`I_4rBZKP>!BgBaAC5P~ z+h;a&X~WXv!fX4c*ATl@QfE_`6JWD`*f;{pUhOTQj+1sF&Dt2p+0YUw21La9+wsrk zB047O)@Hx)D00i)BHILYPE!LkhO5}gyP)M_TfD(@u~DE(zaL;FTIlbq*n0hu6_@gw zH5f`-ph$~q^5(~NHP6~z@E%D59jBa^GQA&0dZEl(dO%Ya1pt`fM*WA4q!c=2VopgolP`k)BH#z7h1~$G51qAPGJ@|CF z*OM@ust^u7JZPcm3r}4{M)7>$Ralo7j>+55m&*-h$q$7HB$rJ?#Nd{g{LFDt4w2n^ z(%Ahdno!Bxaeb0oJ7xf@&77Oa$G`tfP*DbVX%{b2#w zk}Qg~VnR3)uZp!-QktGZs+(vEVA7|G?)OT0mE7zh@&xRyY}+9B z3aJXv`SmB}p!LKY$=6|oEK%9|Y(FI`OjJoWj9B`?Uyuj$ZcH_-CQ`hniE?)%>AZOI z`7~40G=gJ!2&u-xQi>$hzF~U!5ox3-oAJT3BuX>}op!y^SOfbsjjuPh<`7jzTJ|xs zc6Y1cM_?+=@3pMk#8eiCI#}H#%w}6X(Q?v z``7d1P^yj_FV;)9=eL3VGZD?#%b#a5#t7f8v3!<+pOEU^`3)l_8giq)2%f9WK>n$h z-VW@ZH^trbP1vBl%4rL*aEbhWy4X{11M2-i9LdQVYb$s9>l3mNe)vq@s$mQEJf4`~pST!SJ{%vn0!2ke||E;Xr!uJ2RGj=ZeDxMCe&bt3uR!33| zqmdaA!hR={>K0|6gCktLCFBqG=Y{6*8BENZ3MNQMmabOx?`*VRmz|XACVjIr-FMG+ zNa~xa!uPAZr$V zPM`FyjJ#kJE;ABL7DsRbN~YDw8LaEe_hicKTOx-gcn$`HXUx~u2S%M+IG(_-#5x$x zku_C)eG*;>_Z6iI( zW8YcmhOg#%z_n=jB^uAxj+mFQF&>eaW}3NqO!tIL=MhFk!;Q}a1>=QGDXRaXem;2n zjnd8Khu!=h$C-Qj1vs8`NRDEsu5EI53GoH~CY&oWeY-bfUmju(3%W5bn@RLoe8pa$ zz`^jz@~!B_$om=NLdqx{dVWlcy$NbQwE#;u)H7GfN?}SzzJnTVi(O5F1ND7|d3Mh^#S=2Vy8I$Fy`^3Ai zal*$FJ-1`z8e}b07HK6Z1=UWpDD1ILHq}Wy@9}cZq7!_Iv6VI$&X763W@Ej9W^k$n@ry2p5loSKb zk07Zhg<$Yg|E6IIyuZN%zkuuQS&a}@I~SF{Nd2_q$y1OWHz8IV?mEB2k{EuWXaX~G zTdSn0Y1bay@=Z@ctQqLQs#>-n{^ET~*tm$We8ANJml#gIbo5Uw0TXS6t9b+>_ zD+|N97=4+DrP>bs5G-Ywj9S_ED59dqc(kEmIL7?%YPjCNd-ps8TL)#!LixRzu8N}$ zf2e9r^j&M!Yn%1HEAXS&y~hK)JO?N9gSJ`|2UM!!0tjLf(&+Ad$tJmeoQp&*x8&r2 zMjgbpsl~m_vfL#nWcZ@h>n|r?wyZEva zWvqr*P%UO)hj6cb5u?RS?;gh1WH(FOIh)*Gi)?Hk;DH=`II*rgu%akYC8xepes@fS zD>C0COjtRy4w7Xz>YlPjZc*_3;i~R}-A3!)9FfHBADf?(hkM5LZhCTh8d`Hnjp22B zNro3IHw$gCcW^*KxxQ6HI{WD2Li}S#3FFwLVamn~Oo&O&Cw^U!>Vc)(BrGW^;E81I z)EAMIv@c^w9Z}hBda{loEN^oX723J-iJ#Ed4ee;5(KQWQhDKr50R;+$dckE2_m?v6f5Zq|97njf~9^Nq6w_2dRm0xx*@T{*dctgNi}ZEYIu zT5vvBS69IHM6$7Qfp1tsKwi~D@47IYhT%M=+6{lDzQn}D_vz`}{*x5UIV;r{3k}ZU zC+AUJy@LxHFMsq53`$c`P{5H8?jmwM6Ch7(e^Pf?T2_YfqTlmnX?R$e`j4Pe4Q+CL zOFlNko$m6Aie^|M{H&XgX=xLFfKCfFQt1p2Xse&ssSMN2LnOD@R5 zR_S8{*VE0QT@H{JK|Lhp+9(#0NQ{bNV~bWu%q=UF!4}tp@ zo*qXBrwukX^1EtlYwIQ4FlIVVE;O)@Z_e?2)qH|wW@tzVlhLO&F$oDmL2}EMQ(dN~ zh9biBo|6?FU0q!b*)}`d+i^vw?T&lr(55H3@$r<+-pptXTyL;+ad6C?om-UGhLTBr zQcFS6)oz3mFB_8=J6gRl&G+_ddnDt!ySqJug5Ek_-z=a%2PJ;*5AM|4yPN_?bU(9F zXpogr5iP{&oTRND!BJK0K-${$*Pjf;tZS0@HQZ0MHSy-;;BW?(GSblRs;jevZ#6OV zPQPcf-&@zXd}Amqgj3VtdQduRgNvMfT0Fi9^Ca6yznUF!R_#Z-KUcRj8uebLYHdxe z#<UtvEMydh*T5 zvUx#g)G)h-rZtMMd!h@x2ci++lCP6UGG{S?a6IZ(N7O1SquUo0AT3}^id!Nn|j$;8Y+$LhLaxFyO?~M^{;pbZ|78U)_T6evYOT z=7204FPYDa21uHd8)kWC!%A3YP&^$pbrqpkDjGdHp-`1G#0(xxsnago*jOrqhhJmt zn>Ruo<(NBP^Vz2Wj;BYXqS~8MXz6!4HtxdGp=H{*_mHf9$CtNB8sPMaZimWso|+i0 zj^t2-Kp<;wJ6taxv|_o=MPXs#&VHsxv1OMe0ZSh)b)%9ZfC>yq6ff>)%q5&OB$3#q zJW$p#UH43v=m^>$K@<)yqMMhDumcj4yti85sP?fw^TzF)C_3yYR4)fMCq{mVevcH^D3{ z44s^uJZ9zNVtRz2iBKjVdynYK~39V-1H2Wd-FJH8pVr_2=pwcfK{8 zTLR%!ORj3%+}tDEmaBd~ZtVwmz-~)({ht2*M2j85uDORbOFzp~^fDpez)gi%?lL&$BRL@Um;(*ednX0+-ah%%eZ*c=OOdQsVb09_d=xXlYgi86 zsIt}5Gs8Cw|LM@sA%&BZ6NAQF@v5Gf48z;53n)|?2z>7D?ryQaPcvlGRD%E=t=O0I zShYGo4SWak{M!S`w7_jA~eh&Wy zC#*kv0=Ly2p@1#c-`7`iZD2hrD$Gq}i`#-LD(F+bg-I$q3yW89K=$R8=+g4CiLo(% zUv$7wla_mmV0*_`3Ze-9Ar@BFwSXc4(xxarx3jRrD)_)46Uwa2Ff!4`$jDG)V&b5a zQXKDpX zSeQnBQy866fC;N+Hn6D)5A%wJm`Dib!2u>%^_p{o*VRHpX7~7>(}G?`Rv@7co|TAL7<25>)y0bAiNj( zcKIUds{k2DTvCvnUy2aMah11qE^u^OK9Yca`D?Eh(raX;M=&rT3=9lUgWv)$6`N{u z!Wd!{AKxzs^1QoSkj9xA?3^4HR-xkkmDZJWI$Q&D`Q9Z7UoIG~FN=Nrnt{`(a6v|g z^BZihUcoZ%lro<+edBgRnIyu(^F)H9Rkz0+z#e=-BLedb;t5w&P_Q?i>KBUbOqk|1 zRJv2|bg|DwO)B9G`RGhXSzlg3TT@e`JZ3>nMd^Hf>f5iQT8F%GYBb)hZ>O@gT;xYz zZ|YXTdLg_9Zae^4SF75^4pv?y@GE&8={c#K=7a7#7%ZJ6Y9{7;vp#oTV|9Y5+ndNv z7L|n9{6ip?lW{beVT*t%!D!nj**yT^X7a|Er^{N!q?3nc_2F5C;-{HI7o_acgZuNE zboPYN9_4zP0&sg*M^e1!$KVf6puF?B?;kDg7jd?a=83i}@$5PI)V^>|ETKYcoIqhc z?d|QYvSP|H(3~@?ToCUuL*8a@qc;z(yu1S?B|FMHEjkhneM`FV7SjdtE*0gjzWycr zYHT_!@kiivL845uw{PDz;dv={3a44s$u6;^0k~dFmz)AqgUFbfJvF;MdnPttyc&8e zZw;meoHNgS^{-wja8$C1`1A+PK+_FV4@I@NX#S_-dRD zy$SN_4nweJcTUG5I0RQR>_MgQn#dlWg`XCN;D`~(ttmz2*Ky$_)i0OVDygyYdRC#z z3T@8TGW5L)d)NLp?Gy{Zk4n$%m@Zsa&pPn(n>RuxCfm|c!6c^?B9w|eJkZHWtjGJ0FSVusGjYh#V{uZCaDP2zLJfeRY{$jD~l@ZmEMw5DJ6Alxtu|P zgVPmnn45Pkr0(~qboPG5sRx5=5D_iHhTi6@bW&ucqDn6hgX@4ScddT#Or6x)flZNp zp}hG`pN4E2QxPV>qId2-UA=C*LP4v8kmwuz5)a}Tn~NX>)zgA}#c;ah*hatERpfnH z9BERlD-I52>ba5SdP_}xz%x_>JRy=iFbG7x zk2OiA#EYS9gJ678F-|S<)aJuHA8IE+zTJ&;P<VrI~zR=$b4(oRP~AR^&ycM zzQc^?n#daa4qDrO+34tK@$oUv%+wS|ZEe3#WgpVT_2W!OqbsNk46fTrGVtHIbuhj?Wip{9PYbxV?Dh(xRV z`!1z~ty;#cB6CBt0ZP7mw&i6zb?35FqL^@0B_FS^Nrj9dz91ai6GCbU_=ptf#t`uu zssYI&9Ci3(71 zC|-^AYTc6we(D7DI34S}P`Rj=rM$qZYZ>>haVI{al(Yh(-8X8T9qnVaRO(9d0<`BA zg>YbC%tpfJ7cT%YVdX5iAq>L>YJJ3khK4+`I0qJ9uuf|&u`b& zSNwN%+rFa31WJWx-Q1uE>lLLJM{~LBm67bNTQ#@oE};-j#TB?R@Tn=5@1I{fQVxY^ z5Bakc_>9u+3EB!PaxnCOiQ6Mtrz=tnFU8L^A^QdMYb$6Yv|GT5 zh{*LPBL>M?B#AMLqwMsIj4ox|6GlVZ6rjLb05x9+ut~EHZ2Se8_r{NV@yf|wsF~a# zwTPs;YU6&7!ny*R}qHr9tLX5-#y(VB_ksn=$xU-=xYd}#51Y#l$bDN=%+$=#}vIh zrp)CEGmFA3DaNt`E!)D8+^GTpZ?4@NhO;`|jS<@0^>Eg0I4<^|=Uc+A9$hQR5r+E4 z#Q9wwe>r!=JDye9M8GZXJx}l|Y~Vq*HDL0(d>J`Gq*Dv7t50dT`|;xn7bTsX+bW>4nB*+A7}?YeQJMv z%{pVNcpyOC*|{LGjla6l7%LU5yrAypwv_K+@3~RC60p{b|MIY@9ErG;ppRBeObn4h z)1xu}Vt6Q9(|-r(Xko#KRI=oQwi+~I(zC!A$Gqx}?7)Z^La6=u?i_qFIT^FKUh_2^ z_s*-ni*BWTIh7oi2G4J5W+zt*-Dhhv1Pu+X*VyQA+uD0c6*)st{qh)QOe=wGy7{mu z#2n_e#izZi2}lPcT`zQI25pk>YH#KSLK26S^%et3b1p`6V!Q+00-1BmrWS?^$=hpY zkJMS-k}`J5eCtd9S?41Kltsm&V%O!}VP0GqwQ%sYr@5AFAu7vV=ppCo#UE{YR>MIyIVXP+WhNwf1K_}IvF++Y?Y8}Ej` z6JJubN%v-%o@drg3*gBwFDLhwxb78;x^yv>!^tyQi&q*qY-1dIBehW_D9v_S49yZS z%7!CGCZ9jEO+eWF98zIOG{y$|WOUw<@o$eh-%xeDlB}LcHBp^(JIW%MGkGIb$fn&6 zCm1);Q5(U0cgrg`pR4V-p!ODrp^pJ2(d;P30y6>u$u9{OhF|A(SV4M@D3t`}ZJ#CE zcfG>w_wmJsR`*9F3OjE6-7A%>)Ud?;@yj;+S%9#M9xxCYNMpQhHnnv*hMC9q;0z9)f@+|dP+S) zv=PlLFVgfZ@%Psz^v@3v($W0D@1gr0#gMaS#}j&2*>l${9$*Fq;T9`KW^{%NPZ-rL*lgv++Bad}E%L0W{c z^9oA&?%@8Jxp2G$HxsL*;xO(~ypirpBBFHgS2Y6VRjRf~GkMfOu@Z|CI7TpEPh>~u zBRNf>G}ujsrwSMPSJ}%8#K(16F%yyC3hgeNQpb8UGV-!uIWy8{5|QW@hV&)R#2!0X zNS(vHRG5P9JI{hroUyO&8$F14{C<;Z%_+Whv_-$f6N~5Ck5&#P^GqEnZ0L3IT6A?R3c#d(5L%8c5ZQP?<-}@S5UaMei?#b< z#leL#1X!#eSJdq>2=-kPk!<9wewNK`m{`i%`1smTap8OX4te4r3S}mQ^*D8WZf4vM zlW_6PV&<6r{iK4q7nI=L|HVH$7vFyYxR1gAyM9)l|JyP5A?Tsq?q7s|KoR$kpP)aP z?>r?7uvJ`(+0F%Pj16)C^4 zK5zbj{U7?2->HAni2R~TaQuP#Z^g*(us?}Be!(Vxhy6?P@sRPbo%xILiuaGr&4+-8 zEwx{O1HOMX*d7ji*ev>M;6IntyWf)KU#+8ujE8&6U*rGD-H(dDh4cTj(>x?TTu*-y lo0a~H_%mDnGtvKEU1h`(?t8-k0M`ATd*5jMru^5Z{{zJ-@C&TuiUe6xtVKchmRDw{yn;af`!0oqoAdx@4ip$&=2d zfd`EIMOvKE!Z40s@stWVgJoUWu5_twbNG-r_kO?7wCU{~PK z(3M;_xMnq4_m3&jHv#phW?-rMI_63lNldBmcTj^Z(aR}tpx)0A_jcPJ{)pvk z1AD?O|N2LJYMw=|kHKd?$yl21U*xG?VEO+IPvjpw?F45+t$*;^fB*on|G~31cG5S} zchaXfv~@6+cd)fHc5pH`cKi=SZ^e0wKn9d=)bY-dwS^i1TB|}i+NkOJ`c?#6>ol^2 zqUN9P0+m&38p&Ib4G2o2Y&%t@meNm4=q zT8yLW#kAEVYFIgq<-BTuLr!9Iidtl+x|R|QY#+af^ghZW;#W!4sg6=QyXiM_Y5+0) zwmwv~6y`}g)3en?;tsVFuZF7Fjw@J)nEW89BGxnz5MN7b{Y@+zm8hfSjewdd8T(o3 ziAKc43iFJ-^yfdRxqGkMFU7wV^hWGdaAs-njq()RC0xlun1_}WJxwKAfrAdSta(Cr z@$Q*C+$PvbqJ-*i`xCJPQCstz`H#n9QNGKrA%oiIPM$|oP6?3b2T44ORXDKwK0w~Ykn~DOIOpW@%fo z#!|fi{}amX36J9NKNw>Fz~KHj6l>T27mIPMfGjX0j7Tk#@odpGSP;{B4Hp8{F#uWp zpLr4&l+cuR9`(93|6Ww8U5lYeGgtWDB^WDFK7svQb?Tz1Z0kh0x zAOfy80{HzI*DbTY6P@_~)BfoFWSg{qb}#%JWdA?=Mcn=c8b@_bb7g3oq za4QK?g{<=H-!71bT?n;p3{fv$ABANFGNuIgjN{KHdCiua-k6L3I&lAqmM@mz+}QuZ zqyj1c0NQ`s=49qiS;G;f9NAfK<1OmgZ?=!BdETc({^c!e4Fe?XvkyQ&(GhSGQ$D>mu>KNTeL!F*tV9>|pIsXgqH!%5qMTZtqK{t++(s{K7)1eWK8! zq9V1w*<=mjrA4K&>W!IQ2SnhvdHcJax5tN`$F{o;E^3NBCL^@=_GJ2@KM$*c>kc^L zjH)8^^!gqi9}b={hTckxxB9s4H)fJ0*N8m0SN9Gs@RDQ{rZ}qmo%#l+XKAWBvYzhH zK>d~`CMq`DB1m1I*L0Yq#;dVf#Y;^r*mxWsPKH-Gc?2wI6NrTwtM{(}t%1?UZ}OUx z6x7t%sYyi@1rDSk8PO!R6mXO`Hj0X?xB|i#_H`z84hUf{grsCGSoEy9W^f20O`DMF z@C8N}-6`gMABs#&29=c}qM~Be@GGLRKV1v!BWgK|rVtuF+L#lbY`e03S!EhlEBv{+ zxwEtccgc!%m_YkIu5#mRX~RTrrPyqR?rdhCQEh}r!ckJ)jhuS5+*d?R=I~2ZNh8JZ zp{IXU7DgB9sKLOcz`?;w^W-I*vMN+OrGRsJy)A6H_z<*mtB9;0Ha{|+W6^10Qb3Y< z0=Rv?IOrJbKkW=Vie{g#{eV}mH`(3Y#u|m-)Ct&ac6*49TQO0wr7q6T&+B_1){G0X z`lhF+$A?AMcXbQ+FSU&v8=a7EtV%-<>+|)c!_Bvq?fmVNfzeo^GebiGfKsN9_D@%p z%wyMivs_M(j*AgozVL#D8@$EFhg^pRId8WMn_xKg=4KMY_U5VU{%~%knca0r2}nqc z4xvETOucrupZeN|oVLQb(GH5+b@5dtT88yprKl&~_8}!8CZwmk11q(Mf!pe)x!5Y* zKcQ^EClQhm4gCDbB$Y`j8;HM)5_?!o2=Dgg4PNvt-{jh!zbwA)b=i_#Y;p1**JGmj zA6@^!{n%Pf8`etepDr~uRijBEPyr*t;$gpgC_wZ`;?>v=sw<%tdX{}^HPp=3YBRC^}pd@P7s8# zZ?p4BS6ou~I5!-8`*=FLxm(S@67wZE_G zq)sgoDZ-R!%&>iMK*Y}H%Z@SbjzibemR8%757^lmcF&jP)YLQUwQDI6Ia`(Uf~1@m z4=?!RQRtnZ79`Q4AqO(FWkRMR)H0d-l+qOLy(q6pv~X(dH&(hC85Zg44-BXz*SW<} zrjMoSZFsnJ`Ig>Nr_60N2r4} zwR3U0jB13|5LqesTbE7n{)^G*EyMWAA6UPtCK4{Ix+{G$f%{83qUs4-XU?Itd)A z%i6mj0K$n@_;)9xlTGqN#JCv2VYT}@s$SbPu6^8<*fAbww+8sy!5va$L+ZY0)YoZZF6<%U@)T-%5!9=>XW5E93sZf;KAF|oteC0WL1mTN#v zR8-!ST{LUhljZDE6Hm0w1QAR4`xa}y^2bf2X(n5%%Kt|en9g) zJ`N5;BvH-Z%)7`s#ohUt47)_Xtz-GOjIk3n(-d|iP^ajqs4DKe(AM*O(BZo2SR7CS z#AZcO+N>mS2OuDzAATLS6AgQ8?C`IW=Ig~ptC5kBkU=s>dMaEnHNZoM-uXEX&t4(% zkkr=NJbY9S>9LqUtIpg!+9{h@kSk-mZt*KbOF{8Vr(bhI&%0|oqhaNoiQKmo1Q>># zO=XHQbRvV3bex9PQ)L`X2?*&=yh+5MFbmRBa~v-AP^$tMJ)M{9O9qwka&qHi=s8(1 zusj0^iuK{o#6b8w1+oWmj+)PsF_D(PWj_@PPf~?b#=q2+6>rFMwOGD}zfgz`Z*H`G<(B*n$W zd@9}jDj}9fo_N|;f`c((EG#THeBa~6<~S^!aYtbE*sa|he48VO-@N8ZN=n$x!7UW} zMeii*=71f%UTvTNDT^CW!2BR`74V&Lusr;lcpP=PY3`npUtjN!qhsPr>ySGxPmTRA zH#Wt}=>|5R8x((7si_6LW_mA8HP7}t7#ShQLu2v7tE;O$KR<}Lsy4QTUe{_E8Mcy= zgE@U>JzSjbw?(F0983CrZTWG;Td2&Rvu2jLH1K3)d@`AF1M<0&>U$O2v3GNl4!b}X zWh8rg+B{NIlAn!bXJEOwIdmAYjqk!S)24Be@5)%_s(Q91m4bA?3=G?Y}uS_^d zO|-n!*vhaBr?=!X{YLE)<54mA6O%lK>zHZX^qOhn8eD2`JRVX9CwZ$duiLHRkMVug zxpmMj=}Q^+{QSIen1TO@d>yp24bQs~g2{EU_jD|g_xZrahK~o@)(%-!UA_IP^A1SO z43)XNAvrT;RNO%)KutwOMOL`~(KJ%@?u2g08@fPu1@u$NeKf@0Ql5eWl{xO33H;$M zrJSVSvGR9(JRExsbhTKS&S4Mcud}ncK}<;bM?V=aNfV++D-TpF zi7gb8aj__wOW=DVBGE!5O<0((@x_WnI5O_m*BJ zVPdh38B9|jFR!a#E(M$`(5LQ~;zygE>(0~6?Y>~d1RlPIYhU`m;JKe*>`V?1=1=Qs zNZ%|G{FBBuV5)@8H+p4=HMhmUXUrf|sLM-Z5Rj0iQ-)ks6P1HkQN1?72gQBDUpdd8 z&HMHPw;%Tj_PHt#>n_9c%#j?$Q)I)h&*okcT6W>dkRs^)Q0{ z{6ZA8JFt*dzsQ-rzvGuV-B|F+y6cplI*i=*hDHARiJ^tWh)7iFWza*1NBv6_S|J!) znwyV71nQxY5irgo!!Ch;a^b)V{k0bK{AFE`-j}%^$u+H=VIxjXPQumIS4D(HP#v6Y z#iew?*K3E7_oJ`7fVk@ve~|HoDeTq@W(;@2+Mk_MEv2Qk`HKPHE;eS~OifHC1mX^v zYre|Hh3oel>vWl!3T{aTDv~K5tQVWH+CbbvK?6Yk&Nu-+mJ{U;BG2rs#35^ljuczV z#Z{7Fd1o2E;&mfmxNJ(=^f!nI3*+D>1zWqNvHzqpa%o|{fBa3JZFv4O2a@;Q*XJ6r zkCBmPS7A7yURqKVWZSIW2hilTKI3oFl?-5&r;IGYxk;Y0e2p0-~Y z?AGr-XNVwz>geo$4XOdJjyWO*;AY=@9wZ6?kJ@#)HGLxzkwj{^B4aBO96C;@N9YFg@P3;2mBJew) zMU1!fD-z7%2V7ZND1ZU)8Ne_zAEfu5cY?e%byK5)sNom0wRb>5MMd>b2=>#NV`Pds zR+9Ax7ZVZF#J4tFoHza&FPFmyh)JQ1U=^+`D-))sJl7cwz>CrZN$wjp+3#Z;zPa@T z4#*3TU`Ds-y_Ie+HzEy5${2<-zCiTAv(_Z9i}1+*|I1<)0Vrs)#HW+<+eoE4OOxqoADZn<_u5kLhmf{I=x@G5yju?5Se`K@5kf! zX&x#e)bBSz z-9G8gV6(hOWY;nIlgSeVf@d4vU`RL3+3!Gaq!E2h$6S! z=J?k&Lv0#xwNBk}3kVez{Z(`Mu0MQn?!AjKE|o5>xCuXDwj3j@Zgwkk<5}ZE)$OIK z0Q!+avn3cZKWQq&26|?!zJi>WqA=;uE3K)Ai=dW!lU6hZ>iu=>g|BpnBLYY7oxBo< za|O>uioDzFJs~9qt}`aCM+K&{XDXW=Wp#Bmlqv+Th_~(=D&e;8=nSeS-v4D#=;hqk zcj^1LZ1FnMB*j5?J{L*xhge@cb+5t}kN|76liU;qG;e{!0mxwW&E zxs4^gu7k0aBfWu@t)ZonxxT4`zV&}JLc0H~b}uSe4lp2q-_;^L^pwOfj?_)q!GM6K z-vHyBv%;37#zi`Am+IQ(A$PLhGq(HQ_yieoe_v$14UMfRk&1~>f+oB)lPZnJPH%1} zqGb75*yYqE@HC(-j=$mJ7I}qeVyhjI4JBJCLCs3m+tdTodGSvqkBq`8>WCHsozY?_ zzZ$=n9qi&gbd{#9CVMsOjX5@WbVCyoHO4Ah5nxFt!`PV8)MH7ay4%RU0MaY3FWh)< zIplknuDNiTns+|2c1&UMWHm0`CZP(SF&uj)SO9d~ja;Aut@;{j;mT_L0T*O9sX=dC z_w7)+9-%-cY*Go#RGMMQyASHD(uQYea1Bev_Z=8{|CVsx>cBf$bAaq?(Y2mtVJ`aj1 zrwzB>Wcp$COxJrBmgIBZdWeS}-IZrR%Nj>tWMyBBc>VJI@e`HHz2hMOFGWV4;o-iQ zmx~qG(Ui+Lrv2%Bfqh;xD6^eO5F)GdA1{zaOz|Z%L2qFi+#9bULMi?2ryje^KmkeXgCY5J*6oD$>adpb}`Fp$`A! zVLjXEz*z0(ZDn0b>zCLPXV14=o7!DvKI2a+abfRC3V?j^IP^+tw8}Z7Mc;_cR~Iv4 zSJ3k%7%_9=*Qrh^`X*+khGid7llZFjXlws>lBX7I=f1_KqQWc$&z`W0#lZA{!0AQ! zMvLh-tonjjJg-q`aRw$RkDKu4EZh3*jOJ_3rmHb%sF7~!{TRhb%u350O!YCS5fQ$W z%wMCW^3&XS&x0`!jz<{i?csBdRevXsSUjQwQGI(E^9%XGzf0G*C#nh+@8GkVctQ{_ z0fO+?B`epZzpL@i4vd+>BvcJ^<`w6B*8=EhuD$Cw&)^sQ+t(GH-`du9=9l3k!7gXC z-m@a}kB{5vv#uraUK^l^uP0X@W!<5Ji3A?p&O*6)14bJZQ`!rPob@x;1yJupzPn*kUs^2nYy}Hp}-_u;*gBC|;SPmw;wu{Y1`ryccJ->p97^6r;3Xjpm#;hr6qf z^Wi>C3%kA8xR-}Y-^%#qALHde`?yiiTi*=>K7Y51zFqG%0+J$Ao#@=e5 zn3w10Lz;!@nU^NdH29dF%XvL&@wG2c9lcfgR-7H-zH`pjZi!!{cA|fvM;TQMQ72#z zD?c&;=gwaZJkp{IxxQU^KeBayQELN#@E<=uRxPI9yC3WyVs@+FjlC9bO#`P-7n_r$ z+0qV{PN!cB6FiNtb3EWjv7e7#M@AMuxO03oF=v3^yIVEK<1~)jtt7Izvh^+y#qdlj z$aJ6@)93O}XRhAc_puz2NWzCbf|@^{XzkF+T_AG45Ru}aR$CFa7jL{1nfZOV8pByV zxJ%L<4);Fsv(8u@9tXKSv{yj1Sj)H1EIbmM2BqP-Hy6NT*H%0-N-B89IfnMtJ(*%w zv|^nuG64O#IW{a?nF|GPs8&~b2UQhGW&P+w2_i%B@`kh;C`p#IS0l~92upbzZGnm1 zg1WBY7Swkc^#W*8RyBw`AUIgUsWE*4CCKHgECG*;QgskW*K4wvWQO0RS!%gj5Er!8 zo$-td^BfdN#RU4CPE{0kF#IEt6(+m{t2AF-&Ok$<4R-!UdR}iRa4x3>y=-+eZMi2G z@XW%~Yf+_0S1h(es}GO0Tmh(XNQdn!&+dU(Ax0&Mz9|k+LKaHF`wf+kmuOV1Lxve~ zsFFNoVXT)~`JDqAWfdFc$r@;bpg|UC^{@kN+7YXHq7AAt4HSYKD9-q?5Wy=KNHT}c z_?BAIbZ$rnK^YF#`;r6LKr;EV;wI1MV)tubO;U)$0f>ExqlaEgtrrJ10f`fI!dk`$ zqGtGC7m6oR_zlZ1TU@x$jKyIQ6^wAu5bm*pm25QYCT#B7UuAgpXl0O(Nw}}p>D<(4 z*QGcTPq}vOBDL>%XCTbGCx4!>LRO}pD8gm-dlOpcWgiT&LDZx(~Iq;bc z5k6n{buzGZN2j)uw57=q1srS2aKP8>heFe14L4$%VYdMaHb*_6tO(i3Il2>SGf`FV z+_UMkZA*w`EfsLWpO(?3LIlHhskbxrW!ZM^(LKQ?N_TNE_`hl8=A0Kk8!HHHvxGC} zC!dxhPDuw5)+WoEPtFLldv`pMG@gG!$BIl;zKq=x4&XQ)rX|zZxIN}qwCf0${Cyt-L zmBUnD^5#;tjT<_rOKprEr~u%Bx+4d*Le$1ajcGCPkwyn5-HnN$w9%P}d$Ez{fW2g; z1oSm+t6hC57X9^M5{U?tI2cn@7K01ksw2=QgpiJpIrK|j?oTflL?_&!aqaH^(TH%1WLTD??DP zygpPA{iKISZ%)WVEs8m-M#pdna3gG4rX44Vu~p)~AHuwqye{0F&r#8B-=#S?&Vm$F z%m}@f6hsC}j8qL_Paa#tSv<#p%^I`C02gLJ=%%w#gDcunF6;$xJiOrMcb{s9zw#J+ zAWng;2v0o%qJR>XY6N%kTjsV-(>el>Hq9+U)~2jPR=3@E#{=gt(R5c8QNL?KsEb9d zU>jIIk6ML}Vsf;Vth(@ce6jTKh`ZTD3=o013=wIFIi+i!_z6Sdpb$BEyKo2i0mk;! zHy8nrNX>91-V{RNtaxs^qlzX^K^a+Ye+D3TAc#qNND8{iie63(Xf6+Fwp>sYCl53P zd=P8VDE6AJLus7Lo9x6+j+_QdG|61I1IR*5??UVMMM@g_gvPwRRFBK>qH$yeeUwKF zcZ|%OXL6?JZPYBDt0%5d?D7n^p+RqqS1`VNx?Vp-0MIq4A(H-H*BYb01DUAUmXn{v z!~y2Yp^lN#ns5Q~+Y=Pe0heG{X{eU?R&H-6nB@snxf2(kd>rET8)8lV7pA1su@vPx zKc69HNWV!wgpM{;%Y9rB&ABC&jKXhJwY}oC#;w&LB8n+dpNav z9YUJIsrf;%wR()*!7qW~$K(2#a~g_I=@H=qpwRlswg)~tdwhe$W@)hb`@pv1+5T#r zd+%Q(2mHyuiaq2*>GeD?hb=`~0moB^c}C9!{lT_hXvCo3s%`p6ouvrYeGKtG5o-SR z15J~5c)sXtc}95Kj47!e1V&^mU1>y@5utygG6=zPS>9;O!l`VuUy>~D&UWk!{`JHlBIb5DRkt)piwCHKg z;dEEe^}3%AIu4HUo2m>s-3oLHdrV#P&~7&@mTz#73v5i;8$#P*3dvYyO0}~NOo{&e zqa9x8xM_Thy6%0L|K!tf%o5(0o6`Xegy1E&kDsKzN1Kcf@D@^we2&UOGEful$paj1 zKbMq!-c=NY%iXLEiKso1+81V;EUyg)!mz+2fsuvAhym^SkbW!zh4>MQeZ^v`=!Lrp z#_y!wP)7!y^jE_18d!~|G1WyFn$^JLNtoft!?qL-|DElLzb=hMVxkrzXO(JPZEbJ_B30Z#JDt7Yu}GRmPy!0#!Am}FTD>8NRd0UD z_N{mqD36B|UMS+Wco(@+taU*hN?nm-62?&Jbz^6y2OVIg4#MP{Kodcqq2ET{XpI#a zrC`kSnwMeTDYeT~jg+z{9Nx}IRQjMP?=fbwHgt%#G^Sc?Cz!j zO6mr|peH(W%z4@$_YQ>+Kup4$$Ggxr03rG?;&BqD?#byQHmY(KCw?8YW^hO*=wg5l zmJoK|1mQcOS$i11qfP&gLyDD+xCu?aeu-3EV^rcZH>y~DT^^^|D}tyTT0dU`|D};$ z{jZ!W5&<A0t?9gB;yF+HIn4p_zKanE~e3et?0I~ zLq-zm$4msg)CF$+9XrZ!vGddzj%JyBEm|vKo#pKQ=$}D&x)L3L&0&8M+>~noX%ziM ztR!a?Y4CUAHWB%z8*qoxhXyG8c6=Hbi)z=6EK-3VU1KX^0Mzer;0kM!kQ@xHCy z`t!O7;0k^GM8piO@ZE`dc<_WLTggTp$+W$VKttSe!^`!4iY9km0hJBQb&$`F8p}1P z+dYFyrLw%pv5n3Qv$X)`UKbDu{%~t{<8}neyciGc_z;cnGB^uOCjC8RM_xHUh;r6% z`2*~=D&DKgYMd|uvZ)wQKMRZRRr@iKdYw?z+Eyf>)^#fet}ypg*)7#$X-1O8*42+^ zN9mpn$~^Lku23_uAnDpE5|G8O^uZ9BP$Yb9qyuh@tZAsy*~w5Tq!z*hOWv&14ChMv zD9_>aq+kuVk*(ty1`hFgA@sR zYLevTA(>3TDeFPV6F^OcE`G3u>R&_>r3eauHv-$r0y=3#!1)-r;%V){a5!G0=;@+5 zj(3gnF4f;j-cZkGiJs}UY2(@_<_v~lzS()Fx>FKK$X*&lKC*2!IH0dLYF9lMG+8XO z=5(>GNaXVXDTlT}GoBhBDf?+L?UI{)Mf<6II?Nt?h;htcu*YoN8Q>xx6uXeQk`N zi^SE)_E2k4n?&c0xxzpn*q3{Kls*xB{@i$H1{opM?W+@2#f&aB5(9M?gZd#OA+f4* zd|hc1no#U7pPJY`fMID0J0L#{Wo8BNEbbGk!mi42~|4UeIlGX z6OJ$%ei{I+FZ^`Y>Ojp_qUj-kt600F%=)<;7RkGX>-jld7bBp9Ozfm_cAv&&l2a#j zy;-qlH3AoT_a4uFP|V4KWHln$^{!0fs?qvyZ4j;(+A~YhqJ6!C1VPouQcH~TOS0PN ziK0pHl0Cq-cE{a3@SMaXG3>qaaka=02i|b?zihm5@ej1LbWz{f@BZ+-&bS74C}Jtj z&!7u*(v|dGOV+c6-HM832RN@pU>k--_>&6WSlei6d+~w{W69ZW+UVK$g|>?F8B2$ zY$10%m01i1;6Y{S!gLp7suf(xCXH+n9@f*h2N=NztQGn(f|A(`?xG0iPVF(gkWODy zcwJggvr}NDzoK>*WXB?uYSOf2I;ErCmhhE08ntkCmZ!Qa>2wZ8xm3Uky)qARSwND) z(mk?n-wi+)Xom69hSpg^G!rf6V9T^?J>vSLdR)E`=UZVwpZmjd?-OR*5J~x80~AT; zl}4GwLaic06`ZZ_AMQxL!Wecl#7y@$dOoUp>hK-}#eeb|c+W zt}Ro{(VEc7_3x2Fr%4trPii!2taai^k;t@P+}ndo;qjGE%ib1mTy=kxQC*O~6+QcW*~kE_HVE6n zZWh!3ynS@ussp3i>Sf9`vAsLn&gH-|(xA{x<1@@50rdByXWmM;>A>!PI0fdW%3JE+%_Kri zGwG}{*J~!O>km||)C^lod>w^V)JZ8;+Rez)k?P0#8WucRh7}MdTqwW;_8T#j5lc#J z(c+{gWTi~7RK%X-;;W|;EC^(?hLbDXDYz`@Z2wgcsQy*suW-KHFaBW{PX6|wf$brz zxLO{$Zfl(C^XSB?e9e^$s*nM*Zf$`W6b{JlAVTpOJzDo~^3J50-)BZuKF4I%P^jiL zTDkrOrLJh$weau|S^ml0to^Hmit9JU@`+vHa~~cBv{n}VcT$$nsLsN*ukOMon@MJ0 z%&Z4VrMQ-5@4I1Ey6jId3#_3RyF}M#vz{(5x%hltEA?6{sgBxDMj&|-eQqPl2d%$a zr>wcW5J3pq>WD;zsRQZWVJxV@bp|5fa8tDY zU14Rm2l*IjtQCrE&53SRD=xww=5F^#lNsH+NFROJ39HciBTDNM{f0KZJ<2we=2-(S zulQ<*(2J2kGN(9P_NpDcJEsG6o+SCP`ZyT>{b(-Y)rs#EbEgkiz_Vu1ryEto{`b#b z^8%jJ${k#Jpws{!woa2RZJBp@=7d7? zd`eKv^rpLe(rtJFcc#ymLiaC*E{?2kJGY{2$*JkY@$=cg)AqjKx)!N(+oZvsJ*Z;I zjoa9{U9w?;+imR1IZqVv)vaRLtih_9U4lNPxmdZfJik9fr13|)8CBHZT2zL*0fR@S zy?4<6p4TToH(Z}ImvEUK1-;z})+g`LHvbx9}gXfQMIKpS0=30|+ zh`xo}Z}P#~#4pto=?vFXYSaq~9|2co-<>Y?uh_fgd`^Omra77|&!s|s>pR8-Oxi{| zrqrhUmf@Z}yw#vS{`>XZPxh60#cyA4?U`rPYez)}f?llWRrGMJ z&j#VI&!tFw>y(zm7|nzh#97(X#Ek9y4DCP-?q>5HJE}jj^6CdQ5}*nh7xYMFNyTm{ zN8!f{tZE)K*%iQ_wYbZPG(OEd5_oiquXCUhyEBVwTipMEdUn?bzS*AfzzBMFaA*p| zDKTU4w?Vd(g00C@9e}!fqAQI*pvS#J4tKb}e!Zr_y=W5QzyH;e|DQ@w)_JACJq7@P znI`}M`hQn~3~g;p%uSVyof!U8Uu)L3cEn~+`042l769Z=>3@cJ>9d#7bDVboKC3d-}UH@Wq0kJ7k=)+8JqDHon&~j`R9;gr=|^_t5p!)CD3GGwnAs%J-)Cd{oAi zlEcoDr6MyTLt&^&Bd(Z8v0Cr$yMO(X8C~=W=4dM%a|e~W{}Wh|YCgKn0G>sgsw2>( z12Hj+QnanV4Lc(~^pYvF9><^IQ#IxUz?E2u>N60(1F)Cu-=-Z_xm#MrANwnis94YQ z?X0X<3O(^`G&|eF<@>nLg%RusVr@Xe>1cQNARy6zoVDk$?%#VEGVpX;)>X2bG)5jF zDWk~o4mAkzuw=*F_cCH+0VI~o8hKXP8uNZaG0>Pm-9j|XQ|AA}f5c1Ul$)eD@Y3lu zH^^U)cG>K>PJ@+6&n@1#_z|cf7%EGKLGj}S^rcIJ=o)pzT+u=lY)^T~iJW zlkb{PXGAqrW3VTg609)?>sVa~DErW?7Cs%KG{;*(vvtW!8P__v9mAX<`*3W8r!@j< zCxaWJgIYjb{BDMrmA;5wc`3CHS$B+qf-)P8w>6r%Ec0dPYh8vP>=6wDeamb&z_*p52{G`Gad1051d{=n^~O#eJx#WKeo5o)n*oY>{*xoJY63V_S?Jj02~>N|}ZX}Sj{IlB}o$-0}$ zX@OQPizZk+8> z3uXQc1Nru)KCs*c#lo@oE&n%0dwI!e>SsyI6HNYq-Y*8Z1Tj7-$4o1=EtS8?_{}^I z%;T%*#A!Ei_d=LT#FoWEvYnK}2KlO#LRp0?ZyJnR}pG8%}vd3Q_Mtnc=)*=8C5dH*<@~RDI zF|C2sOcE#%z;-eb2Bf$NBzhHJ`hnKXr=m55=n^oItp?*N&)lw3JB&##{K<;#Ze}jb zZ6B)Fd0#ni=YXYv=hKfOwE`os7@!l#e5{b{gR>g5H8D@$# zS&_qqlWa^6B~K1tOfw@*+K$da^#n1r5VS7LAN!MUe07y1c9dScC!g^Sl=K`_J5bp> z*jw0in2hbZ;(m~oqT*D^;FcVrC7~tb20NZ}PdiHm1{GnS9LeDBC%N33v|1_djwq+< zMPGk$WZ|M&gU*_5Y7Ix`c;nETZ)riDmbIjrDHOKj5bMB!ivQoQ4&Dh2sk@TLXccMD zjvJr(QH9k|%(MGBa8OOr&B_y!tQbR8;7F#?G~SRMNiJHDT1}4qGk&>7$$Ve^mpiI1 zjh80~Yk7>Q_ayxfO?3+8QLNjYSh<)jmYqfrX2q?=r&Xh=F*5W#n8ZFiGJr&Kg|xu% z_NgZeP%=GQCK=UX65R=sfb?a=4L45cnU(>AuyBV)FBr$Nf^u2j02C<<>QXt0t;Q8G zr?%HrlFC^lA{MYsJw3N{^t}}P8GfSW;V6o6Ji9tla_7*V;`yEnSelcJNZWlKzrE|s z1~2@QvcJ1(UX#doa6(lzkQ#*%{~D(1O6+Dk$N;*N&V>7wQ4q1(OBUb3NBn#3 zgEkshN=@p8xaFJL5QOfW6m6(@vX1R9h{ThWAdaE$QsM=93|xjI0x~b4*N_RL{fM^O z;soBe0wJYp6TE~uz#F(pV9=oGZa}>1k~Dykc6R^V%id7r))Ns^t%J44K^O%IDru^d z)}pXbV1>}6fOLgG(C#?}d^d{K2v`BP%!E0MuNAGB0~G_{evudD^zfcuy*?ncgLnkA z4GZH{7eg}W69&1k1}Q^-c#bphHcSV74Fbhh$T?w#;Iy1RFm@tm`9n^7nMc|(KV-%^ z>owB2a!Bq{R?5(2UQHd59nm!HZOruZ%BKN#jtnBk03^Q5gB4OlL%wECsuZ%lRklJ} z07=u0z(JiL$bE43&i32noz{Vxh_t~~_sCCO-OFsRLmrtZ+|$qIuN=#*0<|)nSV8}y zRmD6omTdb3>wFPrbM~*O=d%tyEE}{WsrJn?$ZXxA6w=8`2nczi8%9Xf4E}XoLYs#@ z`xNf~S)7xy@|1i{;)?kO2;+mPS1je@XM=fk5^xRT3<3E9#mYp|m4ITF3>^kd*>hWS zU8^E{|5=tMWI$&rW4{Em&rihtBj{!WU6$#a-(Kxjsd+CU8Q9UVcCC_O(^X37`Daep zQ_ba>lOFnzxGzELrrroeLg*6S=}Es-1|tWjFJ%rhj6%`!r`dZMm)y*r>>Xk%Lr_1; z;#k9sStFZoT?zYourWfrUlh)+j^<2F3;D0)KtDN%tS}SM5c9ghPhO1eDTpJK!Vu*e zG37Etd!0(%3MV7a{EFEF>W_USSa}~cItrFDRI|OE+GUZk-8v1gSTnKv!q~u{BDsT zE3bWml5MFDEcv(fr{)n$z?qctr7;!ryI$(HLH0nUXB1NGDyM3;s6e-@2S_RkRVldK z3h>BKBbS7%VA2shEv_ld&{eW~_Pa4zXCd%ECO=xqh7~xypejA5S%t zSBA5cLeyT9%6h@RnfV$dSX|T5v$I57e{j~q3wWV~dS94cYAs}=Kng>uk<=OKpIa+= z#pIdUt{YF?SsUTZfu{CiH;wk8KQVO{np->wKSUI)3VPEC2vBcc7ea7B@QMC`xUT!C zbwQr0ck7fJ6gG2h0AqhM;Th>uS2<=58YG)!kD)b`bk8fF4Bh^lF#EqMIqRq>oA!@` zN;eYHNH<6$ASfWQbO}hyQUXhN2`JJf-5ruH;gSLZ3+xioASvA?Ao*LL=l3WN$M-$w z-92;evwzIzzUJDQd#<@>uCIEtVl971v903xHf!pT{6%E;@DKE;UfYMAc>*6N8>d6L zWOw5moa5F`E|}^ZCiIPCVOBK{pC{ow8=6NM#mv2LYzQ1GXygL3#cSz+AQA&)T!kk) zP*jq2tQajTbbcVF)b^p3dDK!9w&>oWM1d$KCX32F1$UUFOVvC4o?#(Fu~ENWBF7q! z&-?dh=UNYyOu4*&u&=Bq3w{`XouDyYUYOUBM-vrm$ic@e$cDv(nTs1iH8V+LS`lPu zq6;_jp(m;zaMBG`XBvjFAYDjf6xFg=QfcHsaEza6nsYEKoMd4+DRGS?^C;FrEbuH< zyS^yGSTjjb2 ziZK3wh7H&eQor+58xisMlC9p$I>ns4)i5=hGX7Df<1}F@Bu|G(@??wZvP1qD3(lOR z+Un%8OK!~Am{?;UW)u(UyCf$e76gPdVq?7rQ`aBV$e5ZmK*?)^CY8k*rtznx!q~k*Th7 z!9lks4ee*OR!KY&5bJ38hBT1DN-29s$@)1>9Y3e(AvLf#{^g-F`y;rHS`rc~6y)Yn zEWb&<(xd-!O76SfUf%N|EssGgWC{1c{WU0W2awBzT-cQZXLn|`smqI(tUJ2_`_h4Z zM93oW4Y$8uDurhs4=p5EE}w2djB>fS{4+yH-QrB_f`tCvb}5t@a=B@IyR>o z4oqM_Y#l>ls;RWV{PTVLVs|$0jxb{xo2HM)kJwE_Xm1PABWL@BsXY1Wb#4I`XMsj@ zbMsNHIoe5>F&qsW^6zIUM!fc$V;0dzo!u2^S{;|86~rzwMY4^%pdBivc_FqVD`9D~ z)8|P+-WQyE)v8y7c-uvFIfzD|G`j7C#MZh~NTzrQrY!WbYHe0e9A7sE$}+-PO%9gfMayjDV*z0?jO8 zD%j5N6lucBXq z{xC{vS%{cyiAscpN7VGzP1P)X>wDGF2?hCzSr>~ckB*U-t_hF|e4lM- zdkDJAu2+=qyUdiK+TxKXfaMv@`~{BUr@x>=qzbikP`)W8tw$?1Q(CKR z$H|kQ8oTr%bUSB}3dAHV+Cg;8hwid>$+ub(Ru@M^a!X}t5hKqXM3X1N_xj~vkhZx? z_N;n`o4d5dkoV#Q&K#;Y*B0@NyPu%L7lI7gI9#Bt_5H}xfLRs040yTCFcAJ?ER{A;5!^IT86#K5_O1OJ%qiW*;QWRtA;7r3au#vDOMm@WZIzXTEY8akb zn;)2G1df{sfSP1rX+iw&qs~8>DAf#-b55GW@6ZyfT_OnzHYCpN;^dquEFB#MS98UU z(lqKce)N41R=}SxAo;=lfvBfThim~nsUU0zQ&<~kr$dWhD_;X=jWzvM(*|Ci=K~R| zcay{Sr>D29!iTlDr4uZ_x$dWAYYkCFtXaSiyzcfoXKL zi!GjVB+Tas!id$nMu|qtwC9J3@>xkI6A%@~5(S-{59M-4z1xW;1aCzwQrgT`Q{y?a zJ%ZmGd#d0bf8S|DJFl%ScIouVeu1!4}kzjV>vO04hg3* z^pun}so=ZCgM(!t{Z6-X9MMO(>QvR=hVqNbC(2dT4AN zPUH!)3_K5__v6Nxq|DkyFQ~(~7#=nO224FzdlnehccoO7zo5WBXH0U2zjvj}_pO?i zIWD}DT>F-`yKu8y;?tCUoi!Zv-D;?;r&-(sUK>a*m$;xuXnnB!T@=xo`1Z z!5XJ_p8VZ$QEt-euFp**l%Oa@Ed_(3&4Qj{{SBw{Ag2*zCHH6%IWsZW1F`z%Q~bl? z%*nH8N-phZiX=VW<_n)-lIzHj5Z~4$(}br+ZTmZOTp&7AUfBd#e@*eYWLCID;JxQU z`X$ee)TI+&Lo(JuFH%*!=4{%ygrBUZTUft$7RsW{_dx;ImA^#3ZG)7uQ$&8c;nQSTs-hqrx|ZxlfYE&I*F$5LaaVAmKC@Gx9in>g$(~UQTBX%ly|H zN#Z|H<(?zG9o;J!7keu>XiJ4^fFVM`4KFB;f>UH3>9Ln;@uO1S&L`o`n$J!97VX@> z;#tb%L7w|sO^Qgm)0Kzf3dBKFU<9g`1M7I~&-2uC*|hD)L5oLG8w|woznsp2&go<( z94-pra_L+=Ml6_;g-;|^o1dr&?bSVCkg}K9%&lADo^A9#+n??ot1$AK;GsXt@SiPH zn-)@TP_@j`;SC3o7$o=gN5%PJx!CeTUO(Bxjf?*Yquq89w zsq?;<+3i6Cucqvt(FxbI$Ld*V7X5K<%!M9)}*1BcZj@l?l;dNi8Zk21BvR&yyxS-ZjVE*PAe z8ueFsymq16jhTQ?^YbxoXJ9&^jhe)~p7>Pe+M}6@Fw0t+tcZT4HE;=1w$HRc#_B-a z_ucQ-G`^xokicBkefo^lS4qctt1kBO+3Zmy7WSq!nf zzOAeq;e=Ov>MQwuWZda=9k!<%iduhKu!?wf-WBMM^fWUHSbch_Y5XywV%Ae~WCb*x zq#MiB>6VfVN*0VJ5MafMUg?VY%ZTKy!I}=#-D56k&tL})9%I`2Xp;f^YTYLH` zg|m0tZJrl6HSOQg9_bH+wLE^~lY$rHk2P)Bbd*w^BAjB>`(})jze!v^gFH0QCMj(! z3A8+^lT!Cd)V@9y0>fv8IoVc*HqrDOtzV^QHi>&pob4VJ8rD<>vm(jj(!ekM{+%yl z;KzRVClD++iSzKVe)hm}FZcwOCGAHd_X6Ft?lG z9Qu>6unIFJnk67>y(5Y*V4HY+m_WjqfMi=U7)*guEk^@qx}h|6FivjIiAbMXL&$&8 zTsIhzFlBFP^}@tP9--ytXm0WX_|xi$*eW|j=F}Uv47&YcTwCbq{X1$QwPctC186*Z zDCG*9hu)E@na#LCp-<>sKKNYPTpUmA9jeAZzHK(R8uFI9iw-HB;o}uVi61oy( zLb|6SmCPXFNy;|~!Q`(4o~7=7*mKLx(tnJ+2ygRG$ICSn4`*w^B`chzs*+bYeFZW%FA`7!-@i9}4VX2V2vJ*e=z--M}voS#3 zu;8JgQ)~LACgqXO=(P>BZO1i*f$5akw+Ih+BMR$vPuttLSXkLPaZ4kz)a*b`&Q>op zT z-LA3aM+#j&Q4TATCK|J7Y$qp@ z(r(G-<;Pjis%Ns6C76UVwUI`G6@*GJUR=$+mQ=vE*Ey5NS@6p5v5gn{-P3q(3ow*m(gs;CUZQ08PsCf6)Av&g0Ke=h!6jIrTdtg$D6Z|D`rRnEI% zx~yzfKHI~phd9?d|Iao=*@JUb5Vjj5%D+1QKYxjaqLkGCZaT)1gDdVIEJkOaSX!A_ zMMH{Tr+<%f%@#ex{_1E64!aZz5>f&F-?Cu8@)(_*O`L(|HXyg3-fPm?04)gPU-cQ8 zEVYLy0OX#aI|IPhtXhy$_2TzDu>Gb3UGVnT3on9TxX^l0c9r`zA-R3cgDP zqZAf4L^DDL;?v9lqW$GSRtl$!wEs>O`$d1`5eq825nSN+gY@IWl7w(WS}|k zYh*8;nF(x!Z2 zcq-Fr{&e$WcE2?#S^d|iCGOA;K6)_vIW(uG-BYtHC9FcKZK0kvd34D3!5xuph#WD2 zzp}tH!ojmb2S4)(p`)x6Fx_*uJV&)&%N$Bx7MhjDV~6}`n2g?C>8y0R!bdwLgIrLi=B->GE+%=2^x~_)Ki}X zjfqf_#oQ$=dL{iXZWqr-PHj_sfi#n=C{X5)cUQesk@gBR)WhE5j641uy^d-77-cl>$i1ftUR1Bv`iCPD zSakswr_?x7MM}Dt##JXCb+bLwzGr^ZkDigd1>9GpZ^Rmn2|A@-rexEoeDmnm7PXYp z_~>`Hb(t+)Ei)9{rjs?6Zty*YP$-egE=>7|saSs`AT4hlk|eBAyxr4mh&s z;cgiGS(mXqZmX)j&BvIU2X9zz2#f_@->THZWNdBP+Wa_=ba2%^Hc z6`a*Yr-9hht!$j-2CeOjL4Qa$*4P>nfiJf@(jN5SrU4^`GdsUBD`$VJCS4?O) z9W~3qX3sDYHMN9dny-P4cfsCZ0BKiBuDaHnl`d`*u&Htu9!ewS!qrZ}J{gi@DV~rc zy{%Svs(6dg&2V09MtKuW(!Ko>1Z-t15guLRbQm=qVulenFSC;j2eq3(2U-f`}N)}z|sI0qBr;)cTGs5V9j+3ee+XR9#h z3P{U%7q`C!{VVC%jp~G!7TCE_|4xY=;;Zp_X(^!~w;q3hz^vb%c3`~Y#n zXwL6ANDqWIKLv}H6LiL?=IB4B*n!i(D7RJ(08~FFj*X}#^cL3Z!`9@qH}goD;q#h# z9Gq^ZMOtlB>sTh~{O+Bx$Z3GWp=u!7vLE;}3-x|r>lO0&$CMA~*3)YxK7^k*p>e$! zkgXu=2{-+#&+_+tUz13}m8V7-;}bUBMODCu0Rl;+x3%FOntlD^Tb1YZ}jTBgB>ZV;23(6=`gE{?z-t5tmz6;}Hc z{QX{0C09inI^U?CzW1V`@ZRnq{kMBFAUk2z2)9xpT+E2L{+iYP_Vcf^L;pm@e>ol) z)oR_&gZ;*+W3`!uDmR>u|4d8|%!5H`3uG0ILp7c%}rbKO~CU#}sw4s@-B5RKK zN8yZPiz$%;#tyy?uXby8j&(B0DuF2#-2wgHA@g!dEe|2&MdB9e9|T&6Pc5`(&r>(( z()%$O3o-@vb4I79Mnmx^=Y;19M%>X5S!0L@`af$TBifFH@WKCo{-BV29q=bz-k&x9 z1~efq|3#(uCg`S?>~D}dLNehO=ugVBH&HibS+AiG!{`#IEZ section). + +alpha = 1; +Phi = 2; +eps = 3*alpha/2 + Phi/2; +beta = -alpha/2 - Phi; +Gamma(1,1) = (2*alpha + Phi/2); +Gamma(2,2) = Phi/2 - alpha; +net = train(net,Phi,alpha,beta,eps,Gamma); + +%% Simulating the Hopfield Network +% Starting point +V0 = [0.6;0.2]; +V = sim(net, V0) + +%% +% The obtained solution is in fact the global optimum. + +%% Energy plot +energyplot(net) \ No newline at end of file diff --git a/help/Example_SimulinkContinuous.m b/help/Example_SimulinkContinuous.m new file mode 100644 index 0000000..9dded62 --- /dev/null +++ b/help/Example_SimulinkContinuous.m @@ -0,0 +1,40 @@ +%% Solving Continuous Hopfield Networks using Simulink + +%% Opening the model +% To open the Continuous Hopfield Model in Simulink simply type in MATLAB: + +open_system('continuousHopfieldNetwork') + +%% +% The following example will solve the same GQKP proposed in a +% . + +%% Setting-up the problem +P = [4,0;0,-2]; +q = [0;0]; +R = [1,1]; +b = 1; + +%% Building the weight matrix and bias vector from the obtained parametrization + +%% +% Parametrization +alpha = 1; +Phi = 3; +eps = 3*alpha/2 + Phi/2; +beta = -alpha/2 - Phi; +Gamma(1,1) = (2*alpha + Phi/2); +Gamma(2,2) = Phi/2 - alpha; + +T = -(alpha * P + R'*Phi*R - 2*Gamma); +ib = -(alpha * q + R'*beta + diag(Gamma)); + +%% Simulating the network +v0 = [0.6;0.2]; +lambda = 1e5; +dt = 0.001; +output = sim('continuousHopfieldNetwork','StopTime','10'); +output.yout(end,:)' + +%% +% The obtained solution is in fact the global optimum. diff --git a/help/Example_SimulinkDiscrete.m b/help/Example_SimulinkDiscrete.m new file mode 100644 index 0000000..53621c0 --- /dev/null +++ b/help/Example_SimulinkDiscrete.m @@ -0,0 +1,37 @@ +%% Solving Discrete Hopfield Networks using Simulink + +%% Opening the model +% To open the Discrete Hopfield Model in Simulink simply type in MATLAB: + +open_system('discreteHopfieldNetwork') + +%% Associative memory +% The discrete Hopfield model can be used a an associative memory network, +% storing patterns in the network and retrieve (or reconstruct) them from a +% similar pattern. + +%% +% The patterns to be stored are patterns from 0 to 3 +q0 = [0;1;1;1;1;0;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;1;0;1;1;1;1;0]; +q1 = [0;0;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0]; +q2 = [1;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;0;1;1;0;0;1]; +q3 = [0;0;0;0;0;0;1;0;1;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0]; +patterns = [q0,q1,q2,q3]; + +%% +% The network weights (which will store the patterns) can be obtained using +% the following synthax: + +n = length(q0); +T = (2*q0 - 1)*(2*q0 - 1)' + (2*q1 - 1)*(2*q1 - 1)' + ... + (2*q2 - 1)*(2*q2 - 1)' + (2*q3 - 1)*(2*q3 - 1)' - eye(n); +ib = zeros(n,1); + +%% Starting point +v0 = [0;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;0;1;1;0;0;0]; + +%% Simulating the network +[t,y] = sim('discreteHopfieldNetwork'); + +%% Pattern found by the network +patternFound = find(all(patterns - y(end,:)' == 0))-1 \ No newline at end of file diff --git a/help/Example_tsp2opt.m b/help/Example_tsp2opt.m new file mode 100644 index 0000000..ee6c7bf --- /dev/null +++ b/help/Example_tsp2opt.m @@ -0,0 +1,42 @@ +%% Improving Hopfield Networks performance using the CHN as a 2-opt +% In order to improve the performance of this heuristic technique, +% consecutive second phases of the Divide-and-Conquer scheme using 4 cities +% and 2 chains can be used, starting with an initial solution. This process +% behaves like a 2-opt algorithm (in particular Lin-Kernighan's algorithm). + +%% TSPLIB problem and network parameters +rng(6); % For reproducibility + +%% +% TSPLIB Problem: +problem = tsplib({'berlin52'}); + +%% +% Number of cities: +N = problem.NumberOfCities; + +%% +% Free parameter C: +C = 1e-5; + +%% Creating the |HopfieldNetworkTSP| object using the Divide-and-Conquer simulation method +% Providing problem coordinates cities and distance matrix to the +% |HopfieldNetworkTSP| network by creating a |HopfieldNetworkTSPObject| +% object of options +options = tsphopfieldnetOptions('Coordinates',problem.Coordinates,... + 'DistanceMatrix',problem.DistanceMatrix,... + 'DistanceType',problem.DistanceType,... + 'Scheme','classic&2opt'); +net = tsphopfieldnet(N,C,options); + +%% Training the network +% The default training algorithm is |trainty| +train(net); + +%% Simulating the network +% The simulation is using the algorithm is |talavan-yanez| +sim(net); + +%% Visualizing results +getResults(net) +plot(net); diff --git a/help/Example_tspDivideConquer.m b/help/Example_tspDivideConquer.m index 347283d..7f0074e 100644 --- a/help/Example_tspDivideConquer.m +++ b/help/Example_tspDivideConquer.m @@ -1,5 +1,5 @@ -%% Improving Hopfield Network performance using a Divide-and-Conquer scheme -% In order to imprthe performance of this heuristic technique, a +%% Improving Hopfield Networks performance using a Divide-and-Conquer scheme +% In order to improve the performance of this heuristic technique, a % Divide-and-Conquer strategy based on two phases is proposed. The first % phase involves linking cities with the most neighbors to define a set of % chains of cities and, secondly, to join these with isolated cities to @@ -7,7 +7,7 @@ % onto their respective CHNs. %% TSPLIB problem and network parameters -rng(6); % For reproducibility +rng(3); % For reproducibility %% % TSPLIB Problem: @@ -19,7 +19,7 @@ %% % Free parameter C: -C = 0.00001; +C = 1e-5; %% Creating the |HopfieldNetworkTSP| object using the Divide-and-Conquer simulation method % Providing problem coordinates cities and distance matrix to the @@ -27,8 +27,8 @@ % object of options options = tsphopfieldnetOptions('Coordinates',problem.Coordinates,... 'DistanceMatrix',problem.DistanceMatrix,... - 'DistanceType',problem.DistanceType,... - 'SimFcn','divide-conquer',... + 'DistanceType',problem.DistanceType,... + 'Scheme','divide-conquer',... 'Tau',2); net = tsphopfieldnet(N,C,options); @@ -37,7 +37,7 @@ train(net); %% Simulating the network -% The simulation is using the algorithm is |divide-conquer| +% The simulation is using the algorithm is |talavan-yanez| sim(net); %% Visualizing results diff --git a/help/Example_tspUsingCoords.m b/help/Example_tspUsingCoords.m index 87a6b1c..ce40578 100644 --- a/help/Example_tspUsingCoords.m +++ b/help/Example_tspUsingCoords.m @@ -7,7 +7,7 @@ %% % Free parameter C: -C = 0.00001; +C = 1e-5; %% Creating the |tsphopfieldnetwork| object % Providing problem coordinates diff --git a/help/Example_tspUsingDistance.m b/help/Example_tspUsingDistance.m index 6b31126..3a6a6bc 100644 --- a/help/Example_tspUsingDistance.m +++ b/help/Example_tspUsingDistance.m @@ -7,7 +7,7 @@ %% % Free parameter C: -C = 0.00001; +C = 1e-5; %% Creating the |HopfieldNetworkTSPOptions| object % Providing the distance matrix diff --git a/help/Example_tspUsingRegularPolygons.m b/help/Example_tspUsingRegularPolygons.m index da56260..54d0d03 100644 --- a/help/Example_tspUsingRegularPolygons.m +++ b/help/Example_tspUsingRegularPolygons.m @@ -40,4 +40,8 @@ %% Visualizing results getResults(net) + +%% +% The obtained tour is: +city(net, getResults(net,'VisitOrder')) plot(net); diff --git a/help/Example_tspUsingTSPLIB.m b/help/Example_tspUsingTSPLIB.m index f5c139d..eab3c3e 100644 --- a/help/Example_tspUsingTSPLIB.m +++ b/help/Example_tspUsingTSPLIB.m @@ -7,7 +7,7 @@ % %% TSPLIB problem and network parameters -rng(6); % For reproducibility +rng(3); % For reproducibility %% % TSPLIB Problem: @@ -19,7 +19,7 @@ %% % Free parameter C: -C = 0.00001; +C = 1e-5; %% Creating the |HopfieldNetworkTSP| object % Providing problem cities' coordinates and distance matrix to the @@ -42,8 +42,8 @@ getTrainParam(net) %% Simulating the network -% The default simulation algorithm is |talavan-yanez| -sim(net); +% The default simulation algorithm is |talavan-yanez|. +V = sim(net); %% Visualizing results getResults(net) diff --git a/help/demos.xml b/help/demos.xml index 611bed2..abdb31f 100644 --- a/help/demos.xml +++ b/help/demos.xml @@ -7,7 +7,7 @@ GitHub Repository - + M-file @@ -31,7 +31,13 @@ M-file Example_tspUsingDistance html/Example_tspUsingDistance.html - + + + + M-file + Example_GQKPusingCHN + html/Example_GQKPusingCHN.html + @@ -54,5 +60,26 @@ Example_tspDivideConquer html/Example_tspDivideConquer.html + + + M-file + Example_tsp2opt + html/Example_tsp2opt.html + + + + + + + M-file + Example_SimulinkDiscrete + html/Example_SimulinkDiscrete.html + + + + M-file + Example_SimulinkContinuous + html/Example_SimulinkContinuous.html + diff --git a/help/html/CHN_TSP_APP_Tabs.png b/help/html/CHN_TSP_APP_Tabs.png index 66c6e1623d0f58ad7d1f46777bb464ea335e7332..8654d1a0fc8b8bee891ff6789f24d946020ce6a4 100644 GIT binary patch literal 63344 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:YlNnDoAY_u0q`u1@ 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 literal 60674 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 + + + How to solve a GQKP problem using a Hopfield Network

How to solve a GQKP problem using a Hopfield Network

The following optimization problem is proposed:

$$\min\{\frac{1}{2}(4v_1^2 - 2v_2^2)\}$$

subject to:

$$v_1 + v_2 = 1$$

Contents

Writing the problem in matrix form

The optimization problem can be writen as:

$$\min\{\frac{1}{2} \mathbf{v}^t \mathbf{P} \mathbf{v} + \mathbf{q}^t \mathbf{v}\}$$

subject to

$$\left\{\begin{array}{ll} \displaystyle \mathbf{R} \mathbf{v} = \mathbf{b} & \\ v_i \in \{0,1\} & \quad i = 1, \dots, n\\ v_{n+k} \in \big[0,1\big] & \quad k = 1, \dots, m_{1} \end{array} \right\}$$

Shall there be inequalities, slack variables can be introduced to turn them into equalities

The GQKP problem to solve

From the matrix representation above, the problem can be written as:

P = [4,0;0,-2];
+q = [0;0];
+Aeq = [1,1];
+beq = [1];
+A = [];
+b = [];
+

Creating the network object

A set of options can be defined with the HopfieldNetworkGQKPOptions class using the hopfieldnetOptions function:

options = hopfieldnetOptions('SimFcn','talavan-yanez','TransferFcn','tanh');
+

From here, the Hopfield network can be created

net = hopfieldnet(P, q, A, b, Aeq, beq, options);
+

Training the network

This process is automatic from the following parametrization (see paper 9 in the references section).

alpha = 1;
+Phi = 2;
+eps = 3*alpha/2 + Phi/2;
+beta = -alpha/2 - Phi;
+Gamma(1,1) = (2*alpha + Phi/2);
+Gamma(2,2) = Phi/2 - alpha;
+net = train(net,Phi,alpha,beta,eps,Gamma);
+

Simulating the Hopfield Network

Starting point

V0 = [0.6;0.2];
+V = sim(net, V0)
+
+V =
+
+     0
+     1
+
+

The obtained solution is in fact the global optimum.

Energy plot

energyplot(net)
+
\ No newline at end of file diff --git a/help/html/Example_GQKPusingCHN.png b/help/html/Example_GQKPusingCHN.png new file mode 100644 index 0000000000000000000000000000000000000000..16a10e36c05f17106efc2927eefb396da4fa23aa GIT binary patch literal 1600 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 literal 0 HcmV?d00001 diff --git a/help/html/Example_GQKPusingCHN_eq00402117310426221833.png b/help/html/Example_GQKPusingCHN_eq00402117310426221833.png new file mode 100644 index 0000000000000000000000000000000000000000..a29c335b75a56a6c92bf739c6e840a86f85988b2 GIT binary patch literal 3253 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 literal 0 HcmV?d00001 diff --git a/help/html/Example_GQKPusingCHN_eq01573304657958675695.png b/help/html/Example_GQKPusingCHN_eq01573304657958675695.png new file mode 100644 index 0000000000000000000000000000000000000000..94b5c52aa540e64178efdfa3e4d03b30c8f19e51 GIT binary patch literal 1056 zcmV+*1mF9KP))>M00007bV*G`2jK}7 z3Lg>CW(?r~00Y!XL_t(YiPcq0NP1lmpL@^Me4u|H8S28&B9J1GiteI~LQpLts#Ua& z2qJ3LrcIAc+o+WrTNn{YlFL9W2-A%%EKTSo7AachtsD5b_rEwHewxVObL?V&X(^IF@ z+1c4i(=^ZXBtEEg^GlaFy*D>E`}_Ol?YH>1#`*fFRo3Zr)6>&tv$=dq0zf8{@%eno zWD)>Usnq%Td1H!|;5d%sxCRRM_xERKXAHvtKr9xEL?S=hB2yY;(Y?LBLZQGg%%4AhghFA}m2^5C33IzZ_ z2q~3Hgitx8uC6YR$D>dv0APH4{OIWD`T6MEPfMk0}^sj2q%_DYHz$FVGnLn;%+ zYmy`zSHxFH7K?=-h`G7B<>h4npeV{>v1l|JiA2IMOe&SCy%USY{C+<|2q6@Y$0L!5 z%jGJSN<7ai6pGQ&QK?jl-_K^VMWfMZG`hIB2mmsfjHYRi$5Sj8=jZ2FS6A(J`{w3m zrSX=QmdVMy;^Km3+5Y~1Ot-bQ6(J;-%auyyx7oK?EZyDRIQ~#5bbNd~ zGc!{x7IC@bI>aDJ((m`{^?IYx2mp6?cSfU8tJS`}y#atoB*NLQ#KXgb$K$D2cw=K@ z27{qef-9)}mw2A10Dxf_gpf+5%IEXpaCl^71Z&sJGC>d&_0|1xu5ftYD!;zI%H?u_ zK#)iz7=|$z4EX;f5{bvh$JyCg_-AL=>2wXUq*AG>B=`k$xmOC^Q(3Rmwci@9gY|#bT98MN!n&)>Z@KzXu+V ac>NcO1eTT*k2UZB0000CW(?r~019kLL_t(&f!$esOjB1Ie{S!+AW92LL1DunN~8@*t72o8RTG?wB3YtL z(U=KKQ2!t?(V+ZcB6CKWTQa9^i(iQZL_X9-T{jrZ7EwXOLJ^_01#7iX?1xhOK`*zr zXMddcy{QF7=G$$rzdy+3+~@23&U2shoKpfJ1mVQZn>W+b)5T(OSiStSpu%LAVVG;z zuBp}Pnwpx%#zwJNj1VFSB24c7SqQ>pmn2E0Qn_y3I+7&cRql9%i$sc|X3m@`6bi#+ z|6hf0k%&uexC`#T1mPm_UB$R*@qbAo!!T~Q`)_vYcDq@Y9k;%RYj?&7$470kSk!9u z;NT#`Fx$3mi;Rr?9~vJQ2%*;2R*S`=)oNF+T&YkfLOP8}XW|<&f_;!A$#EP-y>6)j zfxx6(fBp5>B9Um@wr!1#jh8Q9e)EtfwEU{^j*gD%>gx6D*DqeYxU{qs=VNf#lP2*E z`xTaD8yXtUoH^t5dQYD|-PqX3aa@SZ$jFFFrSkcFlL|m8l}1EF0DxF5w%Kfx(tQ

l$y}i8}jYg-_ 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 literal 0 HcmV?d00001 diff --git a/help/html/Example_GQKPusingCHN_eq07602426813975653007.png b/help/html/Example_GQKPusingCHN_eq07602426813975653007.png new file mode 100644 index 0000000000000000000000000000000000000000..a1da22685d42a6b582f3aee6cd04ea031b5254b5 GIT binary patch literal 5140 zcmWkycRbW@96y|yaX%f7&}9>K$xb*S+u0*~k8If^tE{uvWs@Y4aM@)Gq00zSX1eUM z=kMwJ$M^30y4T%3&*$@ApC=xpeV>kojRpdN(5a~^=|LbQ4B$N{6)Cv4*U~P57fL@h zEoI6DY9<;aa>|i!6#}{ZQB4VL5SYJV?u3C4eA~j&J)d*<52`#*k5SrzE*PY*PLKq5 zT`G*LTox7?m1!@2WT5YoMIdXKQ#;Kg<-tN9^ZW;9YF^&j{Ja7T8inNU4uh8=7>l`kD3n(};VxgfqERt+zrY@Tfk{ejL?LMT z`S~UCv|v3{{o&xJFg7u53507cQ z7ePIydx}S7=bOkM)s%2pLea8;+X_gSn55)ro}}mGYg6u2*DLTb!uXF5)X^pnC^#P> zsT5%`dX+r#k=##I%4`rSWrX8nSpN>1T3=s3BQ5Q1;LalMwv)$P%N`kjh-!V2tdhJY z_MJWAiC~sGYP|lQl^&KNrknDWJLQ51*;XKDO2GDf=bt}5wB6QN%QvF~1JeHMxn|XJ z;irKf9yca#6)Q|kOziFLS))8$JUzD-7Dymo-rl-Z6Kq(=`QN#uLUBl{-F*_#30FK6 zJ=^SC(b}2^e_v6t`g1r>P*8AVVrJyam5Fxslqm9upY7UXHODG`n^tM=LUk7 zA_`e!+5Rj)Up6(HgM$N&M#sj+ju)Y5-CSKkC)`|ID#6{uqt844*ib`5Lr*VVrL4q= z1{(FC(W6~oF$%fA^`j^=Qz`tA^Rp{HC@6?uJ6|gF(96zlsW_Jry0g8|-P5B)+x?P` zoTFmEhe5cN)sKM; z{*&Y5;E<3q0rkB({R(YmfJqY*4E5%>#;wz%za8dDN|O+Xy1M%M#)hQlcg@fazJ;#X zOBB)9L`BnkZAC0vGW(ZwE7HSryPmm>y_lYwGH(yg5^^#zF$oE2RV?|HD2VseWQuWM z!@dhY3ueReWvNF>=NTIsqFu1g&m5E{&0GD4A1Ypb7j(F7qoqX`7!tLW=wmg5a~;>w z;C9B(fb0BQo8(RasUE0ui`RmpqGA{Jilp`3e|vnSC295}U~?8%Sm?2vF^zy2{oV_% zZ^3ay$a3mb8XO-Ub}Y~r85$an7T&cJ#i?Wth=xv%k8dA^O1(c}%{lv~%)`hb8;GeG z13&38{7jslo<2T4p3Ht`Y>aG;o1447t`0@Z{ml-cQZaTyRE;6kx2&a=cY15$6^_;& zS1q)PI1?8aXKLe6W7|vAbqXA&`K8197*>z>tuPJ-;;7%%UQBk69^s`46Bacry+*Hdhql_u87F(8T(5 zJqJ5G52IRmxLn?_Wvw+jARxffk`o_>!FX6;J7p?##ntwYXJ%-IYTM0kcse`J|2-NR83A9at*frCe*OB>z<{8vEc+y! zg=NTIGzuwqvVME&re0-3Q<|{uhFB1!klarILRDNnI?3Do&ZD44~ zAr~5W^k+pN;rQrCT3Y%V)t9+B3tipFr6#ZrXJ>)@-X7aqMWY9Md*W5Eb#p)uf&v3I z^QF>u@76nBbJFx_4`WyiBV5hwuQL(e-luu;g}4g?d0%KHe`RjqA0x7wfyVaBN>hYxwu(B zJG-)+9F|Ik`4stcftxoeAu>eo+y_keZrWb8~ZTQmM0=T09nuO-UJT_FdI3l%-x{rBzW@?ghP`UpqfL*_vxT zn06`>%o;3;IA?_*v(zO$X5*Fum6Uq6K3o*$=hH$yukE$Bw!_Oas2L=Y5MhnTe)HOPaK&cw? zT!tcHk{TB)LpiLhtT{KW-Yb!W4uATTIbiR|s*7%{uTR8c??#-T?h?le^78?DGSbuA z+S~uVkBZXM*Du$rEGU=*a^v~qJ=O;Cv>WVAOGl?jF07@j%uZGHBap8wb>76@FGN4v zw}(K)Z{4~zIXU_K!WnNSYJP2{nBZ)FgT+j#+Ngf|;db9jLSkZjTiet_iR7hPk|#Ed z@jSx9>tK1Gm%dg%psa`h?0vtUyws%1)8#$;(I1KiGKM&tfb42Q(e&(6FgCUpn{JBe zPGp+u>Dd|Oh+kI>b*NlXXn~aXBG?4r6658|c7Q|65yMIha^cf;4hstl9v&W-`84Aa6QfVE`%|t~ym(>R>=Qe* zqH_N}KOdijnAr02a$N6XZz2mBgjv|c+S7A%!HbKF3v8;atW3+Wc#K$5QUbUJ?pEPP zyzI9=oc>9SjaByYLP4xo2D5FKFT!=OPsi@g(7#;mjy&6s(qkrkh%rKOS-qMyu5vV>Bwv`3E~Y2@74 z*xbw>T2U|86Us6(H5IXJJN#0vVSYmriG)B<{_7@yRUeg0FeVQk{5lu{HEaG>h2e4FaEqg@sU-E9mODJChg- z`x+|S`mM=zqt~k1+CUnx@$t79J^%h3rlzJQ5{Wf6HGsR^0aPm8$-)mFJm~J~zZ&t{ zsOrjCQZS6t|mHVgx9ZM)6mc`if<0Uyp|7tm{c^tPB3LN+0Dy~%p8ov&WUJ9* zj*XpN6JL>-s9|oNZ|XuxC4-tCNQ*SHY87y{a^0madMFVxlr196>;`s=!{L_s3kwV7 zPq)eb{DhG)W8nC=Z%H61oF>RPqSqmm0cbQyf%co4nru}ba&mG2=IrcjQ&Ur`&>ixJ zeXDz#a>+iGfVT)P(8;-p_`02s}vq-%hLtQ+6vm6a=x&Ha#y~?|T`8YD za5Lf~$m8F?UGLxTPmw$R=og|;F-Awx-5zq#)zt-ja>3?$j7nML?O^%G<4Lb2BhEu5 z@;LtcFAaxN+hCcR8XCI9X-{w#E5QJ9e1G)w3gXW-D#Zdit@y^q#+zmh0(b8g46U@Z zv;YQWW@UBu!rF*GUc7kG)+XyS$*0yi0$A+p=lA>-$dij*fiA(56titNW5M3dmm@ z8)wTII!Vu?HuUxMp6j_ND0I|Vw6b$>l(06N-$;7jVCHUT$4x{*(QSb{q}i7)T>?SD zp3S8rQ$bCQxd0XE>`a`fTi>?Rjimo*BgDnOaOAQ@zKcGlL`wzRbLJcaa-jg^(U zLRzRegMbIix0|6xd z{=NA32w404aMY8fL!k2->gsTsSnY~DF_-l6a^9Swm7T!aZeVkibO}gR@K2hWNxCpu zFC-P|K@ZSJkS759z(pVs#wv6uA-SUXx;h_kZ&tAEy|u4*Wo4};7zXnT3*X!J(lk+{ zVM+pUM+b-A{(gNev?#!Ojfrp{>UC}H=h0CH6*$PkV4f0YUIRX>SW?^EJUuox*4w)R zWE!Lrmc(8W5s|E{EFgkFm7YAeYzx#iFlg}KFyqUR24n`s1j?2Bkcx_Gdw*X7K?@Qa zNE38)bijsc8yf?>yqsNJ00=>v2B02)EtZMxUI4kU%HWlb{Mk5x;N6$RN)sE^zZ9aEaYl?JcU)6;>w9AsU- zt&u-q|HZih)I+C0<`EcP<~MTV2JC01r@c=e6QRey2xZ{2uM-nMrPEaH-QDTL*tCp| zb2RxbC-%DHXC9iC>%}W^;WYWuRKcKRgPT#|VNC0v0;wMus!#K*KoLlw-XOb$o$PPS zwHgaEUxwPC5c4~K|E`XLT;b%WF2bD1%NTDUwDJ2lSNx^euE|NG0`2>lkrO*RyK+4j ztDxOTNH>sEikrC|{PqME{V1fXo7>kKi%Y)v+VuV<_nC(HSH|w{)u#FiU^ZJ1^TXO78yXu~f=RO+|3zxw z+nG=a{i+GjKcTEwH}l&5F|W$_g%S@VwJBLylHBmj)4i6~R&WkLYI^YKLP3~$>w9}^ z#GqrmeBd_3G8n~pez(}DDps-NA2rGqOEBen?I%BnI!Jn}D=T*n4)|M1jEoEodHMMd zc6UFn{4uOD5;3WL%${7^S#s|wm{a0Att?m>Jz1rS0~Je9;^O$Ks!RRedh;B2{0$5Y zU~r~auU?&=o*uKNU5$JB@+A;2tF}Pz-UKFSug378Y|J4n%B*^SbFLLMA>#aqzs=T( zSt_}^*&4$I96&@yCiq};?nn5ENLz?_Lkq*okH!u|&&8g2;A0@9GEqU7{TBg~P#hx* zUJ~vznFR%)gmeNsQ!{wCyl2m>VNweIJ$d<&mT$IJO@f_Cmim&ClE7gFhyjKM2B~+n zn{pnrx!`A3N5Rw<5q^Gpgu=OcK~wr z9~3-se{YfteII_-(%c+`N#bD~@ceMb%*6C)v4G>ZbnMay?FsMp8l1?>v84VlZA8=V8BX z$agGRxacUNf!#TAGcz-D*LQWW{zpU0K&kS$(zLCJaP9*;v(#o~9PCE3)Bd=)e0xJR z5Z1S}1C9y4eEE{A$%h|4AwDS;*xR+XxAxOPpA!QfKo o1DcP=bA%dV3{OjMiy|) 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 ac>NcO1eTT*k2UZB00006um4g%m1Vz^&OY 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 VI0QF%gYT3eb!8o;s)yDQ{{vK83?~2p literal 0 HcmV?d00001 diff --git a/help/html/Example_SimulinkContinuous.html b/help/html/Example_SimulinkContinuous.html new file mode 100644 index 0000000..545cf41 --- /dev/null +++ b/help/html/Example_SimulinkContinuous.html @@ -0,0 +1,138 @@ + + + + + Solving Continuous Hopfield Networks using Simulink

Solving Continuous Hopfield Networks using Simulink

Contents

Opening the model

To open the Continuous Hopfield Model in Simulink simply type in MATLAB:

open_system('continuousHopfieldNetwork')
+

The following example will solve the same GQKP proposed in a previous example.

Setting-up the problem

P = [4,0;0,-2];
+q = [0;0];
+R = [1,1];
+b = 1;
+

Building the weight matrix and bias vector from the obtained parametrization

Parametrization

alpha = 1;
+Phi = 3;
+eps = 3*alpha/2 + Phi/2;
+beta = -alpha/2 - Phi;
+Gamma(1,1) = (2*alpha + Phi/2);
+Gamma(2,2) = Phi/2 - alpha;
+
+T = -(alpha * P + R'*Phi*R - 2*Gamma);
+ib = -(alpha * q + R'*beta + diag(Gamma));
+

Simulating the network

v0 = [0.6;0.2];
+lambda = 1e5;
+dt = 0.001;
+output = sim('continuousHopfieldNetwork','StopTime','10');
+output.yout(end,:)'
+
+ans =
+
+     0
+     1
+
+

The obtained solution is in fact the global optimum.

\ No newline at end of file diff --git a/help/html/Example_SimulinkContinuous.png b/help/html/Example_SimulinkContinuous.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7e91637c285fdd848674f767ab8aa14eeffb96 GIT binary patch literal 1971 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 MP?JxVyL|V50C1jGnE(I) literal 0 HcmV?d00001 diff --git a/help/html/Example_SimulinkDiscrete.html b/help/html/Example_SimulinkDiscrete.html new file mode 100644 index 0000000..b4507cb --- /dev/null +++ b/help/html/Example_SimulinkDiscrete.html @@ -0,0 +1,127 @@ + + + + + Solving Discrete Hopfield Networks using Simulink

Solving Discrete Hopfield Networks using Simulink

Contents

Opening the model

To open the Discrete Hopfield Model in Simulink simply type in MATLAB:

open_system('discreteHopfieldNetwork')
+

Associative memory

The discrete Hopfield model can be used a an associative memory network, storing patterns in the network and retrieve (or reconstruct) them from a similar pattern.

The patterns to be stored are patterns from 0 to 3

q0 = [0;1;1;1;1;0;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;1;0;1;1;1;1;0];
+q1 = [0;0;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0];
+q2 = [1;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;0;1;1;0;0;1];
+q3 = [0;0;0;0;0;0;1;0;1;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0];
+patterns = [q0,q1,q2,q3];
+

The network weights (which will store the patterns) can be obtained using the following synthax:

n = length(q0);
+T = (2*q0 - 1)*(2*q0 - 1)' + (2*q1 - 1)*(2*q1 - 1)' + ...
+    (2*q2 - 1)*(2*q2 - 1)' + (2*q3 - 1)*(2*q3 - 1)' - eye(n);
+ib = zeros(n,1);
+

Starting point

v0 = [0;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;0;1;1;0;0;0];
+

Simulating the network

[t,y] = sim('discreteHopfieldNetwork');
+

Pattern found by the network

patternFound = find(all(patterns - y(end,:)' == 0))-1
+
+patternFound =
+
+     2
+
+
\ No newline at end of file diff --git a/help/html/Example_SimulinkDiscrete.png b/help/html/Example_SimulinkDiscrete.png new file mode 100644 index 0000000000000000000000000000000000000000..d34aa9979df67fa3c2e11c81e86797860a432d9b GIT binary patch literal 1001 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 literal 0 HcmV?d00001 diff --git a/help/html/Example_tsp2opt.html b/help/html/Example_tsp2opt.html new file mode 100644 index 0000000..5aaa455 --- /dev/null +++ b/help/html/Example_tsp2opt.html @@ -0,0 +1,143 @@ + + + + + Improving Hopfield Networks performance using the CHN as a 2-opt

Improving Hopfield Networks performance using the CHN as a 2-opt

In order to improve the performance of this heuristic technique, consecutive second phases of the Divide-and-Conquer scheme using 4 cities and 2 chains can be used, starting with an initial solution. This process behaves like a 2-opt algorithm (in particular Lin-Kernighan's algorithm).

Contents

TSPLIB problem and network parameters

rng(6); % For reproducibility
+

TSPLIB Problem:

problem = tsplib({'berlin52'});
+

Number of cities:

N = problem.NumberOfCities;
+

Free parameter C:

C = 1e-5;
+

Creating the HopfieldNetworkTSP object using the Divide-and-Conquer simulation method

Providing problem coordinates cities and distance matrix to the HopfieldNetworkTSP network by creating a HopfieldNetworkTSPObject object of options

options = tsphopfieldnetOptions('Coordinates',problem.Coordinates,...
+                                'DistanceMatrix',problem.DistanceMatrix,...
+                                'DistanceType',problem.DistanceType,...
+                                'Scheme','classic&2opt');
+net = tsphopfieldnet(N,C,options);
+

Training the network

The default training algorithm is trainty

train(net);
+

Simulating the network

The simulation is using the algorithm is talavan-yanez

sim(net);
+

Visualizing results

getResults(net)
+plot(net);
+
+ans = 
+
+  struct with fields:
+
+    CheckpointFilename: ''
+              CompTime: 0.1923
+                Energy: [1×216 double]
+              ExitFlag: 1
+          ItersReached: 216
+                  Time: [1×216 double]
+            TourLength: 7909
+             ValidPath: 1
+            VisitOrder: [1×52 double]
+
+
\ No newline at end of file diff --git a/help/html/Example_tsp2opt.png b/help/html/Example_tsp2opt.png new file mode 100644 index 0000000000000000000000000000000000000000..9de4bd3e4547270d09d0ae73f5d0799dd7b97a7f GIT binary patch literal 4237 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 literal 0 HcmV?d00001 diff --git a/help/html/Example_tsp2opt_01.png b/help/html/Example_tsp2opt_01.png new file mode 100644 index 0000000000000000000000000000000000000000..6c393c3c8ecd57b54916b176ef9541162abe5fdd GIT binary patch literal 41511 zcmdSBWmr{F+cmlX=@bxBvMbWAlkc;KL#Tcs=F6*NZtAe{?dpwINqEw>E}2*qPrO z+c9&nvGb5~u=8gJod|p_4_1Wzeqnr@nev zZ{-S1r=!OAY9|)DFfVUytls&!qHu9R z0SY?$GsDfZJ~I~9w%#^U13C}`Yk2t>FnlX zS@5WMJ!Fp8$E)o@n6lK^Qc~TMg&LM-W{}8uF8M?~-Iuv=%}NulYf~#j!!Zxmg3?k< z$k^DJ`ElUs%J(TZJKGr?(bYX&EC^%r>FYouS7=7wXr>gLUtC;VeLWw1!lWNRoNmv}Av-%etk6yw85ur4J}5FeT6Ac4u8I*_sCO>R z%j@ar_#!ZIPLEW@{Yy;LIyf*8A!*R0a(2VB30zPE#v5`rHoK9uw

7zpJY;kdX39 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 VqzzLD&JYNMfv&MmxiImproving Hopfield Network performance using a Divide-and-Conquer scheme

Improving Hopfield Network performance using a Divide-and-Conquer scheme

In order to imprthe performance of this heuristic technique, a Divide-and-Conquer strategy based on two phases is proposed. The first phase involves linking cities with the most neighbors to define a set of chains of cities and, secondly, to join these with isolated cities to define the final tour. Both problems are solved by mapping the two TSPs onto their respective CHNs.

Contents

TSPLIB problem and network parameters

rng(6); % For reproducibility
+  

Improving Hopfield Networks performance using a Divide-and-Conquer scheme

In order to improve the performance of this heuristic technique, a Divide-and-Conquer strategy based on two phases is proposed. The first phase involves linking cities with the most neighbors to define a set of chains of cities and, secondly, to join these with isolated cities to define the final tour. Both problems are solved by mapping the two TSPs onto their respective CHNs.

Contents

TSPLIB problem and network parameters

rng(3); % For reproducibility
 

TSPLIB Problem:

problem = tsplib({'berlin52'});
 

Number of cities:

N = problem.NumberOfCities;
-

Free parameter C:

C = 0.00001;
+

Free parameter C:

C = 1e-5;
 

Creating the HopfieldNetworkTSP object using the Divide-and-Conquer simulation method

Providing problem coordinates cities and distance matrix to the HopfieldNetworkTSP network by creating a HopfieldNetworkTSPObject object of options

options = tsphopfieldnetOptions('Coordinates',problem.Coordinates,...
                                 'DistanceMatrix',problem.DistanceMatrix,...
                                 'DistanceType',problem.DistanceType,...
-                                'SimFcn','divide-conquer',...
+                                'Scheme','divide-conquer',...
                                 'Tau',2);
 net = tsphopfieldnet(N,C,options);
 

Training the network

The default training algorithm is trainty

train(net);
-

Simulating the network

The simulation is using the algorithm is divide-conquer

sim(net);
+

Simulating the network

The simulation is using the algorithm is talavan-yanez

sim(net);
 

Visualizing results

getResults(net)
 plot(net);
 
@@ -86,19 +86,19 @@
   struct with fields:
 
     CheckpointFilename: ''
-              CompTime: 0.5670
-                Energy: [1×590 double]
+              CompTime: 0.5058
+                Energy: [1×571 double]
               ExitFlag: 1
-          ItersReached: 590
-                  Time: [1×590 double]
-            TourLength: 11393
+          ItersReached: 571
+                  Time: [1×571 double]
+            TourLength: 12462
              ValidPath: 1
             VisitOrder: [1×52 double]
 
 
|+1WKF_kD@bdMl#;4kJ(@z%{NSx`0tp6Ix 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 A2LJ#7 literal 42967 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 BJ>UQU diff --git a/help/html/Example_tspReducingC.html b/help/html/Example_tspReducingC.html index 103f860..ea4e34d 100644 --- a/help/html/Example_tspReducingC.html +++ b/help/html/Example_tspReducingC.html @@ -6,7 +6,7 @@ Improving the convergence of the Hopfield Network applied to the TSP by reducing the parameter C

Solving the TSP provided the problem's coordinates using Hopfield Network

The following example shows how to solve any TSP problem, provided the problem coordinates

Contents

Network parameters

rng(22); % For reproducibility
-

Free parameter C:

C = 0.00001;
+

Free parameter C:

C = 1e-5;
 

Creating the tsphopfieldnetwork object

Providing problem coordinates

coords = [0.4000 0.4439;...
           0.2439 0.1463;...
           0.1707 0.2293;...
@@ -113,7 +113,7 @@
   struct with fields:
 
     CheckpointFilename: ''
-              CompTime: 0.0322
+              CompTime: 0.0310
                 Energy: [1×93 double]
               ExitFlag: 1
           ItersReached: 93
@@ -133,7 +133,7 @@
 
 %%
 % Free parameter C:
-C = 0.00001;
+C = 1e-5;
  
 %% Creating the |tsphopfieldnetwork| object
 % Providing problem coordinates
diff --git a/help/html/Example_tspUsingCoords.png b/help/html/Example_tspUsingCoords.png
index 8dfc0f228f2c1e2fb641d15a4f4c2859cacaf4c7..b48844c6e3ee3cfbda1dbb84235baee92ded163b 100644
GIT binary patch
delta 2561
zcmV+c3jX!%6_ON?D}Md4aOI2@Qi2XoIW^9!`8?
zP16`-(P(sNXsB{0pU=D9?i$`C5{XNfF4b@)7K`=w_kY(Yu(!9@)6>JV%Cc;+SS%Lq
zu+3yL9*^fS54X0qW@cupmajGb6-6nPN|e&dcMG7iv$IC|))X*WoiRo!<(01$|D8@}
zcXxMXWY*);#exuGv)OpoGv>b*Fh7i^Km6Ah7qtqx==uNfQ2*7h^>}=DHy@3rC~fs)
z;PS78{eLE|4s{*N%TN^0?|=8L?@b&<*S%eKP2+y3O+xkfS1cBz(WuMiVvJ?8SzXt8
z^M^?!5=f^pISD}kAauB&_-+`BOQd%iXlO@(uImQ}2Rv(a{&u_F@Ao?#4x7y;2tp&t
z%QEiY$JiK7Pm@HF@Z?S0zmI_d)Hek@22m8dyMMcR*6RF4Q4EDb4Ritk7{mHHTrSMa
zplVnp1e249$C1mS;k|Rvs`!`5U~v&wuVP@JI{6a>0`PjVybS)N-9R*-zp7$!5dgwr
z@Yijp;BsMN0t*W$mz(Muc;mlZF0ZVtc)eax6pO_orBo1%KPkrW@F8>^)6-|X^D2H>
zFn=?HwKW6+b%p~DHhKCK4uYeFt
zOhA^gvty?EBM5@vbUL|ab{3-1=$U0s;o#uipZ(_jzc1)IrPNr}>L?c3y?gA@dc*{3
zP-w#U-`+krJ31J?^3FS-&Ckah(4fQ(>W@fOlfu0_8bv33<06hM>uJ7#ZxZQ45RcnYxF6?$Go9+z;U?OVrKnR|A0?8yc
zH!(bHsH$Q8E6eiU-X4JN?rv38nF$pzIf?CU!?n&tUmyH_EG(RVb-)-?Rh4J0&VS$O
zbk5Gs`g}f{&DPe|W<~{DEYLJ)4I2Mnhr@xXDJ(9sbW~2KkIjrw0L{(+3If{Op(x-#ev{BN+`A|K@)zH6
zIPTuvEtmD#*+6@{nO>^%XN<|REPqK-eQpB5AQl$D$vv7xI*q+OJoOX^5rEm*eo-W%
zXfn`p_5bSXs;=ukpD&ZinAiV=U|;}+0@~Zn`F9GGVr2yb1NhpGKwH}xj_JCd$z*ue
z>ik_U*XZb|)oQJ5UDT!jdwLLw;O0&9EmV-tV`~djQ!wa^D2iSDB|~-ogntl^$79UD
z8WsP5jU&_=%4&+mXq@
z?>Dp}7GC-3w?E%a%lhWS9DjhPpB^yLGo`dpDDbS@{GY?&a5x+QTrO9=1p1G{5
z#+&u~kxU|yFgh33pirH^qA2Nfx?C>XY_^L2uS*M-%UD@C+4dlWSgoR=5bz)L^&yqQ
zmtVr~KWB~F`k$NsJb%eu8qR+{hT~(lxX2ol34MfAYUi(S|MR^qT|ZZ|X7Znn+4(ON
zu(f3-|6c=?BAaz59u5z6ZfvAK{BT!Qb<>SCQ~zhP*x$#sYmIC(l|mwcYuCD79qj@(
zH#3(mx$0?;tN%--k|arloP9uy>!_k&WTYPFPT}|%pMHwbQGZNNpWGWBt~VE4ef(GU
z{|kk}g9i^P>tAE7?(PCWFj%K^UqRQgvVvR=;V@i=-!`T6@bHjlju`x-KhK7b7
zJa}Mi{rlNx@OoidK2v&}JRqJUHuiQ>YK6MQAjsN61A=tzNXbp>hEStOg$M+^)e%@<{
zJYy)85R0K${3^E}4BmR-g=jRTFgNwIf4rP_IHc+6zDD`^7`XhI!8H%bW;|-);85HA
zB33G?moIl-xx)VhC`F-wogD}QfWLX=!P2
zaIjb`o;Uw_<;wL}2eNk~z2O_VoGeMzK37dcCWBZEHXA}AOil6D1(n-Qrv%iSgEo`@
zlqAXJa%HnwpU)@D@_F;0lH_^%26lEj$Hq?GFP9OIH78S
zmFuJ-$$w?DArN3&+j9xaQ`ftsL>z?z`uhG6@K)?mw&+SukIstESG68Xm~1Z8Myj?b8|Bo3^K+PMKL-TfDq9_
zu3hs9f&g6b|5c2!GXES|_3^JLN+y%3kguqK^M7}CaxIDiA&=`wlWL+4RDLVrT6qqg
zyz@vTa`IC_KA&%IZ?CZ&P9~GRy}dP_S3DjM1OhxOV=SFc`+PoLfy!i5V`H}J{~x(r
z?j~mg?p*S&^)IclsPR6|75~X2EG;eV@9z^1B9X}c{{BZFeN@#7U~XUS`T6-fckYx*C7ur(8ylLY{ddoZ-r?bYtBo2q8SS;2!
zY-qRJkB*Lbr%?n!u-olctCd&XYPH(!c2N{-Q1bizhSaLr^v3@RF8cqMi^l)?f3xv#
XPqyggq+u9600000NkvXXu0mjfxq%sR

delta 2781
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

diff --git a/help/html/Example_tspUsingCoords_01.png b/help/html/Example_tspUsingCoords_01.png
index 6a27c7fd37f22c160db086aad40f402bb8d4b23e..4107d48afdcc076199bf0bf04e2475c552408f50 100644
GIT binary patch
literal 12257
zcmcI~2{={z{`ZpNkcdKwWDAw4$UL*ni89Y+E;AV-wvsthLWL+onKBRCR1z{LWF9kZ
z^EQv~SLeL++69QyAU$t!ESLg4^
z>fBSex47qa+sPbJk{M>-2friUo
z-BLKAuu+8E;U^~ItwD_yyLE-8
zGN)l?txK}O5%f)MZQYMC%A~o9W`~Sq%q+Yy@h)^Xq{f{pc`IM-3tCPzF7AbixAZLt
zSz43{(vuS)lJ-Ougs=!{CIaN76r7$({*OgWdBvVP)bV5aPh75
zk8LyiLc1Gv5;Tz%;v2&zRV-p+6`t$!wu%{#0vNqZii-G!gzkS1q@3f)`TA9fl7yVx
zuIfqk+nG<@s*((qm6dhjjP_2GE7KiAo(mOS;+nBshUoD}`{jj0PCFZpjEsqmjqk$t
zcDEUY?@e{6N+bw6n)FSsE;n+sv9j9z_;7plbI@GeiIS7_dA?5KTT{s$X{wB39xE>_
zUr|P`4`DF-d%GS1PK3I;x}~M1wz_AtjH~wG+vZM@SW%Obd|g^woA1hs%gI@YQWfvX
z(B`HTav1gry!L{Jg`eNG^S!3GxAzIwYi&eTYrWPIJ0lccUS0uYr}NAjp8ER}b*F8O
zN2$t%(NE)Wp52CScT}A!Pq1C*(D{<Z(Jo3wzFBjEQMOVM8FH~;N
z2U0R$V~uiku=)7t2wYT#%hoTv+qtRQ`Qt|k+?Ywme`9Maj9w_O;km^dquJN^Gy{Eo
z5&J<=&KhOzit(+Ts{P#s^_w^8&YY1w&(FU$k6jpqm;RXK!~-ucW)!N(wlDSA_IlO6
z7wp*f*4Ea>#uIuWr{
zQ5~O#E;t0y`|xwP7+x!#`+g6I_M?rb9?qY97J;E)h!LHZC{
zZW_wuc0re!@72|kl%>0CeT9jg-fdP_Tb^HGzIs&yO+-$=0Rbe0X3cfC?zOeGJ%4^`t|25OByK#B*D`D^BvmzW
z5H^|e{#d9$LBPwP-W`sY*K|dmTkyvvyhD#ekl6C%!29sLe}8j(TOdte8-N6bL7OBpQA`9ioyR(ZUH3@OqB6eALxlp>d$CR&Mr-__Q#0=ga
zzYEVz9xz6M+3+or7x&sKs2K?i4yKA+#dTx-xw*M%BhQL?JlLKqCJ$id<;Ab{*<-URC$ZN);t(%-|660DvS)f~Dyx{-
zZnU;hI}dzW->T-f-s_%4Ar(9eRr{5JXgN7=xFg(NL}WV$vzxJ&huD5*61k98S-H2d
zH0Fxk?X}L?{mG3f_1^X9mbYw)zla*Zy0tbp7xvgdqHKJm@IHs~+FE%b?D9VF!AiS)
z%g0{KoUB>X^D8K)y^n9_`iev9gHEt{Z*?T@t)xjbH#VM#ggaP=d)&VtN-uO1y|p&S
zj)L+sQ08)i()P}`@p~a_>X236iBwmyu;PHtG
z*s!bT&JBlSc1#n+y$WKFSTRFg*j%ikz~OMJ@q$aWw8k99mHpk_-K#fj-4;?3%$zE+
z6432}IkeqjDm^wutW~(F_GFaPMAHjqc}QEQ6t{)Jj#QNnB?WYOMeBXz$F69cNegC~
z^^aifi7r|xJvDhnEDf&L$?AeA^xFIx>o(vL>#8>Yh->ZZ3a;CJvLyjO*~%#BFkC$3
zz1^j6AIc!&I`$>B`7^>rxghf>&N1e5+iMwFGx#d_+IH8T-W#d)^$L^2p=SiHzu=KY
z2L}hE&1Qe(s=VUl;JAk7pb1$EdwY<}#N_mC^EO$yoGPP6HDlu;C?4?N^#tM7Fp+up
z-PP{6Adidr4%hEP9-#7U`-=Si{p|+IG&MClySj=ljeiL})7aQ(+4MXzGLi{(NY7U9Vof+S}V+P<}7TENXPq{Ci&pM_g-ox=5&tpHo=0u61yM@8^qqQOW
zPkKi=3^0DKJhQ2Bb{->sw00#UM7GtnElfh({cZeJyKDNkC_*AKoht9$Z*P?g8QqNT
zzh*h8VIAMT!FHHgSls2Fo$1Wr<>8SFKg)^A(9WrRQe~G!LP|n<$Cimf!u!GA&Svk3
zAZ1WknE1V^2xkW<$;R#@N9F|kdP*6@`!;5=tIOS};X;e~oe#RPy(eWu^F)i^zu*ue%Og%RIbMghG4`y@g&}gi8
z>xe_9LFr8qqEieEUb)(k^(k-P8oG39_U;;DT@4GYZs0Ll)hwe?bi-@2uAVL~E<=@G
z-0pWPa&wpJBbj%%R;~9GXK=Xivto3|k2{=ZRR4~ak*OJ}3GjXNs0H)h;tjt<2x~!<
zaIDuwDKD?xhA1}p^vup8WYAq}Yt;l{mydT2#Rf8@M50Eg1u)>uh}GJIjsGMAmAB
z6(h%rkfcMaZb9=NH)ISA4V9FXw6tPyv<(Q-AB#Pkr>vr~ipP7d^;pI+T8Oc8a%MR{
zBJdIZ_U&6dR;nVupvjP;r)SR9_hUp$>7yPA__am_n&L+e4n9pOF20QVkz}?-@Fq?Dc!NiMQIPBy~?xwT+mV3_1>6
zrK_01(N0qnsnNiyIm(Dj(D5<{A@nPb{&A8Tkba+;*WZjhs$HvA6HM>^4#4vONKnd5iw7Oa`d-zx*k9YVJhmhXb;8?Fd
zo1&DIlqXNfLTYcStDm5zrap1P6fgtf+FalImoxScmK)flq@>bR6D#p8B6UziA8a`6
zq6m>*rCREnc6QkfW_dassL{zu+S8|B#KukvCuL^NLR~&aN=gOL=M)W1Omwu%$F#gx
z(J?VyBnMcO8PE4o9q1f&!y92V}RX8g{!TudIL0RX*R73J55Gw
z*JW{CiomB%S>fPlv&$G#yp$bb!yjk;@e~;mc3@uk7L@YN&dyee{hgKsk?t&gZ5^E-
zW(ZO}m#(8Am)vf#y%%+1&J|m{F2pVr)vy9f)6~!?-xv)6kX?n##y*iVO{+VM6tGcK
z^c*1~qM@M?7O=LqW>bAND?I!enzHJvdqxJdjEoYFqo1#b{)SlD!xBE#)X1J^W0OZK
zDJ$dgc)*wFl%%Aj_wSX^VT=;uo@=u+Gj}Nu+AUxzR+X12)@F#L{<{)so>OFvF`UZR
zt`+ET$jZuIym)bMZx8kKVYfOegw|M^D8A!
z&&p!pF$;wETqI=Gmh|=O*FOT2=BB%QN#OYSc%TAg8PGH|`f=dNlP5JaHG}Fu+^zu<
z{7XiR4DlVc@{C
zuVn)E){3htCSQ31Q1FL}GYzy7c*??e#D{-+)Io5irR_$h7Q1#2fsfp-;hW%qSp?BO
z_s@1f&3)I$>1!j4h(21}rbO!yq3q|rK8H@t0sBg!AGfC7IP)W~9!X0p=jEG!Iy^UV
zRk3nf*mNl3VQA=Df=Ja&d$P61){5g8(e#<)K9)%lZBI*`4U1oiFU1C(SuX6`U&rXD
zU031eG;GT;<`#QOuy`R}Mq2r6V{1=lw(B5%JgV5p(>76JciK4N6^Re=8@R#JSlr;)
z@_@$c*V+q%hMhro5O)qz63+XJAD#IbJ)2xI^aZ%F1Exdz$C7w&C|D^P#6vxIbfltX
zLoFvWmWsQtSXG3p3K%*OEM7iI#r3dkMy{FCb_ArKNFK
ze--}K)zH2o&FgV%ldok6=gX8=b6y`FrYV^{ljS^_fT5z~&fx-V{#*#}pOzT*O@tDm
zkYajGO&@l?f*D!Vq0b}yTSNFufB4IfQUl@S&@VW+xX8)Li}d2WT`g5qnjaDp8!W)~
z3Sb{t(?hAepr`QS#S7(FE&$WB^8;8@6B8OPgQ=}4h>^3H9mh!vz&T>;{ZaAp{l8)|
zEu`jkf45h!P0`}w;-9+5>PP^ikqrSaQc^Q^$VWsC6PrFN
zl+xdC5Y=FotAqaB+RDwt!^6$J@Q4|p)9U9Fs-pNN-pOK0q`Cr1IKVR|CZ-k@5Ivqg
zeR?$P0RV9sX=%HP)vge+=+(@Ef`T;)Qsl0(va<6$(Q3;#9_rQuMCd!RoqF{k4|jKN
zLzo&tt%}gWJSSfzQhdess;7A(Ks)~Yg^XFuwz0d+|N>EVHePeMX;S^M_8yXxb
z0KPwclAg4%wY7!*vRUKgdlBUgYF#Zfy+@3_KqB=+UG1
z?=MY$0CE@L?>|FLbx_(w1I#X;is96cdH&ogR|mMr&6_uOc6VjZ^MN!bEX>cZg@zIr
z$t>@G>`bbg4kEd&w&bNSC%YRmPmt7+UZt$D6v2QDlcN8VT9q`q9f2fO*!)oY_QSm;
z;C9$)-g6h~<#R->i2M#$pI~8YEOSBeY`6K!$dmu}+tl=f6k`cSQbm=MR7g0lTXv?Q
zr)x6PG`31*aIrGX(IH4M;BfVrnPp=BX0yQ7XG!*4=|jW1UmM?+_pgSvzQ^*F$FM(q
zi27DlW$(Vhw{=)X`NDbRRjp0T(wHHwV&X=44?cE3a7P|(SK)HpF9ov8r%pFtE{0=s
z;m&#PoD>&lR@F+QNrjTb0Ct8Qn=BNSp86919G05y$^W^e29ODPRd3TJLZBB4FHn*s
zGXinXGp&2oCUS_28vfCT3cm0EcKYsRYGZD0?&#>~;P9dIZpEK+pW!XS_1|D
zqeXG1G&ME7RgMjVB!G5t<;s<#v|Khk=h)aLgVfF717mA{ZiAfU|W3*L%&nx%QAgG?8=7iKgyQnU{IUXf4Um{cd
z8Oo)4?!W0&qTSM88ycpEs;au=PF?h4u_p$EKHO`KOxC7bSQR$f3a>YSwV
zab{stmh~f}Gc%4q$++Kr(2b(ljE9otyYup1ZsG;J7e6)y1`>G4Kel`mfs~vQ)%n_3
z7^keYW362M_}jN5Qc~jk6_$!Ez7*Nq7Zuw$&x+Fd9Ujgsv`(=7e!+jJ`SjE`pITno)1Rln0sbvxUs=O|IeR)>-~-4F*TJ>
z{@Dj=UD=&>XQ`8me;gaDyA#JsX
z%U!1$;%3{#VT+%LBW`(dLfG>9RH_OwIivVHW3)SumIBhk6UQQ?+hjpW!W%~{UgFmI
z9<#UAZ7O@7gX01RhXPvAC?G7^j!9EXi-wk#n3z~Us|(MV_3qt);Oy*NAHf93H{m(?
zqJg7hZ(>gQxBYqS(9#;e=yE*;)@?oez3|dZ1~!b*zGUY8eA$F=-OYjs9$sG1%Y^~q
zfPz-{`7?(>$%h6XPz$+1u(G;(7oKZll(V@1+w>IzRsQ?StGc=rqI(;u#`{|*?CoVt
zlfC){@oRGur+HJW2HS^U92f=_yjRWhdjRx<*1b>~@G_Z9;r
z;>A2&d0R~j^#BTs@UtT&BtW$_)v17-Kj2@g9M@j^!k6siNH9$kZL?0|xLP7$Cl17t~
zlD>cc9-UHIDSq+dyUfgMXjtF=-g*^40L|`t#HZ*cJkS3bk?Lf09vBUS&aGlK0Te^U
z_QulEhwOnUyQM)7>cD?+=)Yj3zy0_r`c2Asz5g*5&Tzt{
z6Vwuo40
z%YUR#!*L4VYmGJb7SgLTK)C#6To=`FU8Qze14a_NF_q2}j{#e)e-0w5kR~{2%@mqO
z^JRs4a$?6X)%YJFV;r=f>#YzrKh#D~N^cDQJv7-wF
z)Q;pNXD@MG@5<`vQp7wvGpGH6b@yIIeV1w7^@YCm<|5l@fg$=#H#9Pt6fyj|$)YDu
zHZR{=RcO#qr*u9VOH8)dc~()e!E?3K@FZ0d9VyAHMw^(D5&`3WN}htfK~KzZ`S!|m
z9INVH$MVl&;=?Q7uQ2$q0w|y;_E>#YQWBZHel6bJR!wc8Gh=;G}%M(b3?v0G+b)){&C>2r8Qh8x@i?_B$j6)CS}xI6T}q
z*QB=AA1)ri?C*lMn(zXE8KuSpMhJRkC8e+R^&fON07F4zfW~c+U)t~iyp5e1?W*PV
z^=@WnBq;&N_t(FtVhdx@gU#hWJFG1fn}oB#KlcFcm6er6L>!+?4G&jUR8)+*BH}jR
zpKDt8=*ZERm`gZa;8t^tCz0g%T1H0#zI|JV2wEt?4vbP$$k^
zzI^$@1*?%yek~s*_BUHWs=neliXIq+;^Q0a_jh1gV2xE*S5Hn(HZ?U}B?sjL^Y1!o
zp8a2wYj|yMId*hrCMtW~re8--(?vQ*v_upTW^r@^r!R5i@W=IQ%0m^7;W%dSM@PaK
z_S@NMxj<2?7BjbOd`xoFi0kK1lj6n`s#6TV*~&5zIH=;f67qEoIeU7x&P$2hSPIQW
z+VYm2y0cWr%iar+{tU?|XzoZm;}ZC|=ry#>G{-T6SoC&^ah9#mxRw>vqoSkxCr`>9
z+{w`qg#xuO@ZR)t#?S!YrhuCWV}D7mMxurlVave<7WwDd8bA6vEhgQ=vDO6OU3(C$;tb*?(0}z@pOD($eFg
z;bmMuip;CFQ{S|(n8?)42jn(7Hm04a{Q@_{_no$4+<5>Z_{wJq-p(U+^kRev=)Y=N*
z1+zvqnB)cqCMFu2nVA_Gy~6o`LS_e&IBS$58eG4-`8^=JJOB4`-mS|z95ivwYtVDv
zrlqweN>qUdO#9$Hn22G`qzLKU%0M}SP|zIA0{l(n`?%R3xwSG4Gz^Rv
z(ED6WB;j!ZM*q2E9nBm+bm$QHEch*44%kgzfFKi2{gKlD!r-3cdMUFMojekSCci`2_@oC|tiD76`WI#N?zr8Xc$r5~!wTbl?x0qM_Y+H*kuMM}nx%
z&&_QQ@b?ddO3QbO%-_5*hJ}??k0S;W_}R0Q7z~C|QAH&*EG#TEv|?`yN6V?VGRC+s
z$iZO)9Ajx|2@2MKr|kJy_U4Xd1P3R3q#=6HvP7kw^2p9|_!28S<+;i$DGdVfy4QTT
zAS@UJ7^{R*XY;w<{XwHVXuW2QG-7xp){mNMcrV^I!ao5dH{mH0{U5h95di!=64A=-Vt0Qn54CE6_!$)6k&dt8}+p*T`
zpnxCq=c3&OzMQ%qzs>htaxysr3BSc3((~YZMz?j&oSoGNP3^>;+5CO5{BUo^>O!qO
z!W)ZC4wXTIwJy~&ONcsunZRvh_jWP+$&7{q0ODvFguTn3HxJpbO)<#?xIU0f5;8C+
zb`Puc^4!5g*rmL-$hYZ1S$8WP!0+=||G+8?aT=i>;CAgx`8}Jt=9L)fBW-
zD?F4%F7l>cubCB;O1DEy4E3
zW&MTU-~%i=dFbtYy$6HOC=>Z?rh0f4v1!ItMxcvjsV1J?@+0)we-j~Uc)t`M)$FQ(
zvCj?Ao_o6NG|5sWvDNP4Axns8ms2!!ls;(dxwACS${!RWGI{I*l0-y0O&akmg|DsC
zY4q7W+j2}8&bPCZ?aZ0Et;2)}EqxyL&=W>({UQa|wPx~ZyhOmzF6*#SEO9JH!`^aZ
za(o9-k_hSa*IWF`2Juqk@5V&DmqNk;Gl2N=5S3@qJg9Bd6P>vKVQ>@ikuLkhp>sJk
zw|x)ddvj&_%NIFMNy(h1CQoJ*(Nw}wBqgL~q)kLdK36ZRwzd|c7-2bJVs3sKFo$Ab
zKu=F^Q>e!+2>wB4d3k?p>jKyhv*R{EE7PnF)MGBgvU?!*W8D_Qf`W8Q9BxMuw1QML
z(HsXv6TB>s)tN$zX1e6|bY%@h604RAK7l^SD{^xFwI=W0y$gcQ8WeN|TkbM}2fN@v
zS$Dx{MKzp9si$3UZfbfG8rsQu1xacKRPi@w!)-p6J?>g66xzGC=TW}I6yRsJ9ZCG^
zp{1v%CtpW|bb`q!gIR9dm8yd0>3Pc
zBU(<|Yjc2~dZ8$D6^R}~N+i}Tft58T3o|;;X&&^Nu|dvqCe3>9eL-cqiG${
z`gF&Do!j_?7C`5P4pqj*rRh{Ral|f2TAKYAsA$Q0OKgNKyo(L|-YqcbKK4~$@WOKe
zZi6ZZr2o`pM4OUwOnm<4YWLFwP8iKKQvTDELecrupOs~(bc77Tc-^@}Q#pMB;_EQ^-&!aT8Cnc8Dv
zk-vA8sJb~<`jh#UxIzg?-DAi2DKB0WTK;sjj}5f5Rt=>8G%PSESTAj0Y5?2!kYPDN@B@Fp
z_SXmg3&7ncZt2FaNtW;#_i*&FB4^Tb$bp70#q^ZG+SD`XkwR()z#F7
zfBx)*A&(ZaF1hB`jMUVL{8sVpi8y;AvQurFJ-u%>??=bRF7y`SV3v@8fFL0;YXIgG
zT-uVPJkrz{{JxWd$xyXX%S}f|XN1{Zh1oXYk)Q*kMa=C~R0i6Tp
zle%FBOk#IModIP8fDz^uPf=0=StPgR6&ButG>PL9($Cnu51!`j8vp2L&jjhiV0e!F
z48P669Hy*oa&K>M9V6z!_w*aZ{Z1i+y8Xyx1efOD&Gj_5bS-Od8rG;gKfgu;BJZOY
zbzcNuZiS>*33e#|pG4Ntx3cJsxiqHRzl$1`yHPaOfQa2dc
zQLHL6vw^X1YpW6xfFy$<3*(y!XR}mZCTfFM;^43dqee0^GWO+5UotwbN(J6OdG7T5&N|vXn@GT)Goxb_ImlNA~&=Or4@CL7x
z<7L4VGBD^bzmNAPXXp)@<}$|P5A;6xs#tF0Z21EIJKjbh_yevG=y#9-S)mWm`byYPT1)`eb#4Z1R!K>p2D7cv5N??9>YP5^7l6Ckjxx$rHvdO;z&7@HYsd10cx|t#
zK$ivT1Bg8#Zho0hBIm#dg;86Wm;kN~$^)4B!I;Q=bv&N#-wEX3napwUDHs=B=*edj
z6Z2Y|?P1r>J{buag^Qp{2$L?;c=+(4pPye#GsMG(50?*~mBunMF>xP+Y!)`Q)&!B_
zjt;}hiAic0OIjXp0J9hlU@w>0*w`c_jKiO2b?ubHq##cC$F0jHjr(4l6-{r=4s*q<@_FogxPlAr;>04@l(nGj>x9~^7*1D@dCL!ozq
zu#6M1w-e0B&AqWuADgmyzcg&8r`3BxPP+%52%_hT=@*;9@}3a~81p;N!*hU1gxM;u
zHn&Eyd3k`%#3X?%O|?t%9{Sb@dTpD8`n`n+~CyXijM-VMr=^Vu;c
z=H{kGyJDDTJQFJC7XM3&fKr>bD^Gk&oS>*#Fh
HTaW%1)K@tk

literal 12880
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 the TSP provided the distance matrix using Hopfield Network

Solving the TSP provided the distance matrix using Hopfield Network

The following example shows how to solve any TSP problem, provided the distance matrix between cities.

Contents

Network parameters

rng(22); % For reproducibility
-

Free parameter C:

C = 0.00001;
+

Free parameter C:

C = 1e-5;
 

Creating the HopfieldNetworkTSPOptions object

Providing the distance matrix

d = [.0000 .3361 .3141 .3601 .5111 .5176 .2982 .4564 .3289 .2842;...
      .3361 .0000 .1107 .6149 .8407 .8083 .5815 .6418 .4378 .3934;...
      .3141 .1107 .0000 .5349 .7919 .8207 .5941 .6908 .4982 .4501;...
@@ -119,7 +119,7 @@
 
 %%
 % Free parameter C:
-C = 0.00001;
+C = 1e-5;
  
 %% Creating the |HopfieldNetworkTSPOptions| object
 % Providing the distance matrix
diff --git a/help/html/Example_tspUsingRegularPolygons.html b/help/html/Example_tspUsingRegularPolygons.html
index 3e9c398..d9acc60 100644
--- a/help/html/Example_tspUsingRegularPolygons.html
+++ b/help/html/Example_tspUsingRegularPolygons.html
@@ -6,7 +6,7 @@
    Solving the TSP with cities in Polygon Vertices using a Hopfield Network

Solving the TSP with TSPLIB cities using a Hopfield Network

TSPLIB is an extensive set of problems frequently used for solving the TSP (and related problems) and used as a powerful reference for benchmarking different algorithms. In this section, tsphopfieldnet is used for solving the TSP when the problem coordinates are given by one of the library problems from TSPLIB.

Contents

TSPLIB problem and network parameters

rng(6); % For reproducibility
+  

Solving the TSP with TSPLIB cities using a Hopfield Network

TSPLIB is an extensive set of problems frequently used for solving the TSP (and related problems) and used as a powerful reference for benchmarking different algorithms. In this section, tsphopfieldnet is used for solving the TSP when the problem coordinates are given by one of the library problems from TSPLIB.

Contents

TSPLIB problem and network parameters

rng(3); % For reproducibility
 

TSPLIB Problem:

problem = tsplib({'berlin52'});
 

Number of cities:

N = problem.NumberOfCities;
-

Free parameter C:

C = 0.00001;
+

Free parameter C:

C = 1e-5;
 

Creating the HopfieldNetworkTSP object

Providing problem cities' coordinates and distance matrix to the HopfieldNetworkTSP network by creating a HopfieldNetworkTSPOptions object of options

options = tsphopfieldnetOptions('Coordinates',problem.Coordinates,...
                                 'DistanceMatrix',problem.DistanceMatrix,...
                                 'DistanceType',problem.DistanceType);
@@ -96,7 +96,7 @@
     dUaux: 1716
       rho: 0.0087
 
-

Simulating the network

The default simulation algorithm is talavan-yanez

sim(net);
+

Simulating the network

The default simulation algorithm is talavan-yanez.

V = sim(net);
 

Visualizing results

getResults(net)
 plot(net);
 
@@ -105,12 +105,12 @@
   struct with fields:
 
     CheckpointFilename: ''
-              CompTime: 0.1781
-                Energy: [1×216 double]
+              CompTime: 0.2247
+                Energy: [1×247 double]
               ExitFlag: 1
-          ItersReached: 216
-                  Time: [1×216 double]
-            TourLength: 12583
+          ItersReached: 247
+                  Time: [1×247 double]
+            TourLength: 14852
              ValidPath: 1
             VisitOrder: [1×52 double]
 
@@ -125,7 +125,7 @@
 % 
 
 %% TSPLIB problem and network parameters
-rng(6); % For reproducibility
+rng(3); % For reproducibility
 
 %%
 % TSPLIB Problem:
@@ -137,7 +137,7 @@
 
 %%
 % Free parameter C:
-C = 0.00001;
+C = 1e-5;
  
 %% Creating the |HopfieldNetworkTSP| object
 % Providing problem cities' coordinates and distance matrix to the
@@ -160,8 +160,8 @@
 getTrainParam(net)
 
 %% Simulating the network
-% The default simulation algorithm is |talavan-yanez|
-sim(net);
+% The default simulation algorithm is |talavan-yanez|. 
+V = sim(net);
 
 %% Visualizing results
 getResults(net)
diff --git a/help/html/Example_tspUsingTSPLIB.png b/help/html/Example_tspUsingTSPLIB.png
index 722a795310d232472ee4826ca0e7e03a09113885..4dbba6ba84664c09f501010adbe0d808caf17fe8 100644
GIT binary patch
delta 4407
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

literal 4688
zcmV-W60hxvP)pGLVle9@|Cz)y5beg2&PBYV)w9SXu=`rqyrtKsdPvbQ4IIiPM$ygQz-iLSz
zJV6iyiTmN5+YgVFAQ6B_QAgVJ_kr`cZ}2Nrnc;bmyUU`LO+3M=*_4Rd0lB`y%qA2&@
ze?P-8D=RC3Kwx@$T9Typ_V!FBbNl$C8_s`KRS&;L=n`~MBuNqkp+6G@asK@IU@&O2
z*$_eqA&jx6Y5IfSil*s9ejOo1l4R*uH{=!$hZ`Fk^=DBO34*w;L#wN+H8nNGC7YX@
zE|;sgL{Su3mW@VZapBt9n$PDeE{Vlr9*?KEM3N)`U>K&jaAjqswzjsoB#}rs91eug
zl@e7|MNu@FOaQR3u+ZDvTaw+4$3IQeHk++Ng}rYp*T3@(D~zBL{AF2|Bne|oQIw`>
z`{~gCUXdmZAubqe=26SAlZ4Bl=IJfFJ+>5Mmux)NY4_Jb2)esrdK!)#xgA|Ap?}>2(=<(gIOGSUg1ntoRCU+OYHWn%<+8O$
zMy?^RgJr>Phw^LqVNgQ<^YioZcsw4D^E}V
z`qm$OY4GS{gwyES%*(O{fX!ysXe`w+qY+FdNTtAPy;YsO&FjC%^W!OXASwF&mTStZ
zs$g^!y1M~m$Fom;@>o9rjzm(4L|&FPlFWxf?$QE%J{TT`&Q3U_OS+5O%wLwhJh8UC
z9S%nsh75&V9*-FS03k3KKvf}^L%|>*06_KiR^2Jow2C2lR~LlCaO~JE>ELblf9&?-
z-+0zGJC;b~M@M6lq+Wg1)C9}R5Q%_gXJ`<+F%CggbaM2CplAg-3`*;NWMm|rPGgMg
z>gohRz!=|j_yq((zV=hslb>&HcF;6=`Es(h)_mwgf|4oK|Bt*9B|wX
z>tc)rK`7h1lBFa`B7|s~CP~s@FdTq9#!{oSJVPt#y&
z3G#X3cc1QGS-U*D_})5Lt%jN!J`{2T$AKsUO<&UwNdk`tX!?pF6h(z)scU3v8ptvT
z0_1X#%|b3W{J9sF|KzXS9$plcLO~&2K7M5duFVA=2#4Y?%W5o|sTE=%%h1{iGz|b$
zQ$wR^z1c5ezkg>XXW9JnI>i`cv8>;}Yq}#5XlfD{7C-p@`+@58YBodkB_?%{4SlFg0;(-Sm&1MDwV0HB${`7|@|L|-pn;|+o5yEOb
z@z!@z3a3zD7eeC1fUN{IC4@JNb5!sXmkVpzW!Ti{JiE{>jh3
z6<&21q3T$7U4N}nDOfh5psG+?3l0ZRl&WgP&@k%lDc234DE#g_THr$q3+7Bl>gcGt
zE=^d0LTUaB3k%6)5@X!b(jv=pCHwF9bKx+!dPuhDlQd29CVNMhJhN8+&o8_)_{eB|
z+ha!qtc_2N*+V}a&OQ1>*4@6HRck)|^uwoH22R%1dQIV%Uj5Jac;e34&Y2mk=ar5Aw%kN<;tdkg~{2bm1;JOF^E!R+jV|MmA8!>X#bxNeHX2op>E
z&SNc{&rQtED6tKMP)CQmy}e2s8aBC2I}WdbvK{N_sM+d?EFjNS$By#2t1y^(_W1Fd
zY*xCaYqAVWOR&rBCRV^(WdCbwU~o|D=>-5{C=5M46iEUA#$-c#O*2D@DsV`Fr3I*Q
zz4q1bf}vRul-3r<;>4;z``HEJD|!6!^02?U9oBi0msn*;BXY#IgDX!
z40_713;V#Wi~qX1EouP`RiDdASi|P+B*F7AGXtkj144v>1rm`I)!tWo^ao#($EVod#!HtH
z9uJpJi<+kGL?w-lkWRz!Fm!e8q>qa+Jq@j`htC3(=C7)%ZvSYS-q+^;!U9~rZ2a7_
zO$@WPmU-x*CP9$V>dLt0CwEDHcU&l<&?WquM-RN(CCP=CY7&qn_B`=ty|5zw@_oLb
zpkv2;wG$J@bu7!x;c!&baC^Jk*x6Yrw~LVD#c!P&8iJm-wbeAaoY?l(_)1qT0fHd7
z@+0L?{x8hUK|Bs!U0^iA;v#HsLnyS9!&X&2!qK0lbawE?
z!_~LZDAd*MJd-42x87r)BaZdu^D@SmBneH^IId_H%xs4Bbtn|dZUNAA{^##)y8E}+
zvKE^$8qNCsR=fSM=b~Q#U)isPb-#l6AWc0HoatntJ8m
z5@>3I3m2fj|2mVVs#sA}mZeNz{^O4VU<{GS_RLH|)3Dv{Eh$M96`CexS!3B77>EP&
zR|N6>|M*3pqmW~!kQOoJm^%O+_V2UD1
zzaJ6_sIZ}e5F9-UGc(ZI3IKpHs456T?r*+5`&-ZS^!X41-8Bsa>BcJHNJg?e(t`;*w0IRFe-Q8@p0)We9
z+Stg|)R^P($#OaM()=Y!3WY)hL0BvnMNx|PKN+*JYrrd8%u7?78fUquvj#Dw&bfqi
ziqOMV-PMs}aV~FM&vB-Jb6Pd#RNmn*HZ<%>0e5v>XAWs2%eOD!x6JE)Ih;SQaDE{96NTT2U^
zKfhqEBiGl!WU3!Hwo|*M1=iMJc^UlvtCcTbh9gHxd(ai}D}4SRAz+xv7k{vB_QWXb
zWKKi{5(mLsZ>hSv`Qh+Z3O}VU>MTp;|T((D!w{p
zj7Dg0PoH`8=b!$|vk4)emsytF*3OuGhJ>~Jd67!|1Azb>X#ewW05LQI=;`t5F;&U^j|#X2
zip4j3J7jOeeTv#!O+Q(5Q1Y;!^-mPVx!qG&CGUUiy~eTkHpbrj9~k5H_4Vp&H@`PF
zHr#G^al?}LKlXlcYirAHx0k#BA&O!-b~ny{z#%mJD}oBiyM6J$f|;2agiuRMi~et+
zP&jw)97RzyO`kY%LjTOUbLRj+Rn_CikLwCQfBw8EilQhsHa0djH35Jqim$)^y47kW
zN%G{$lL#S6k_HC{3xxtgh-KM@tKO9gNoS8NLuMbYnV>E~qt0AuWOxpKK2
z08qPURUHmTI-RyyELZYy2qCZ6OAy2rX*5lHJRaRp5xXa$0)fEd;-Y>TL6_$BdQ+*C
z*=#nMOu96dW!-LfGMT(GF%d#_b#?K0T<=w7<8?6o|KG#iH|%#8|Ih!|8~+1C;bn?M
SUPHwI0000l04^

diff --git a/help/html/Example_tspUsingTSPLIB_01.png b/help/html/Example_tspUsingTSPLIB_01.png
index 4323d37aacd5f4619a1913e019b067fdfc29b75d..c75765704f0fff0fb4f940ad0dd5a3bd88b8cf72 100644
GIT binary patch
literal 23410
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 literal 22943 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 ag~cq%PBtXIy#^6OgsP&J!h5u3$bSHTz`ZE| diff --git a/help/html/Example_tspUsingTSPLIB_02.png b/help/html/Example_tspUsingTSPLIB_02.png index 84c648876d51b5a24dad33d0b20f72df9db33629..f37ecbec783e49b7014c95f0bd606bab51905a72 100644 GIT binary patch literal 44606 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

b1ONV#Tc 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 diff --git a/help/html/chn_TSP_APP.html b/help/html/chn_TSP_APP.html index 3743aa3..cd18e49 100644 --- a/help/html/chn_TSP_APP.html +++ b/help/html/chn_TSP_APP.html @@ -6,7 +6,7 @@ Hopfield Network TSP Solver App

Hopfield Network TSP Solver App

The Hopfield Network TSP Solver App allows to solve the Traveling Salesman Problem using Continuous Hopfield Networks by using several of the solver algorithms available in Hopfield Network Toolbox (euler, talavan-yanez and divide-conquer.

You will find the Hopfield Network TSP Solver App from the APPS section in your MATLAB Desktop.

The Hopfield Network TSP Solver App can solve TSPLIB problems, TSPs where its cities are located at the vertices of regular polygons, and any TSP problem defined by its coordinates or distance matrix.

About Hopfield Network Toolbox

About Hopfield Network Toolbox

Contents

Acknowledgements

The authors would like to thank:

  • Javier Yáñez of Universidad Complutense de Madrid (Spain)
  • Pedro M. Talaván of Instituto Nacional de Estadística (Spain)

for their sound contributions and recommendations.

What problems can Hopfield Network Toolbox solve?

Hopfield Networks may solve any combinatorial optimization problem, given it is properly mapped to the network. However, at this point, Hopfield Network Toolbox is mainly designed to solve The Traveling Salesman Problem.

The Toolbox has been designed though to be easily expanded to solve any combinatorial optimization problem.

This Toolbox is supporting material to the PhD Thesis by Lucas García Rodríguez titled "Algunas cuestiones notables sobre el modelo de Hopfield en optimización".

Contents

Acknowledgements

The author would like to thank:

  • Francisco Javier Yáñez Gestoso of Universidad Complutense de Madrid (Spain)
  • Pedro Martínez Talaván of Instituto Nacional de Estadística (Spain)

for their sound contributions and recommendations.

What problems can Hopfield Network Toolbox solve?

Hopfield Networks may solve any combinatorial optimization problem, given it is properly mapped to the network. At this point, Hopfield Network Toolbox major focus is to solve The Traveling Salesman Problem, though the Toolbox may also solve the Generalized Quadratic Knapsack Problem if an appropriate mapping is provided.

Concepts

Concepts

Contents

What is a Neural Network?

Artificial Neural Networks (ANN), or commonly Neural Networks, are a family of Machine Learning models, inspired by biological neural networks. ANNs were defined by Dr. Robert Hecht-Nielsen as:

"A computing system made up of a number of simple, highly interconnected processing elements, which process information by their dynamic state response to external inputs."

You can find more information about Neural Networks online. One great introductory book is Neural Network Design, by Martin T. Hagan, Howard B. Demuth and Mark H. Beale (original authors of Neural Network Toolbox). An ebook version is available from Martin T. Hagan's site.

What is a Hopfield Neural Network?

The Continuous Hopfield Network (CHN) is a recurrent neural network with an associated differential equation, whose state evolves from an initial condition to an equilibrium point by minimizing a Lyapunov function. As the Lyapunov function is associated with an objective function of the optimization problem (i.e. the mapping process), the equilibrium, or stable point, helps identify a local optimum for the optimization problem.

The dynamics of the CHN is described by a differential equation:

$$\frac{du}{dt} = - \frac{u}{\Lambda} + T v + i^b$$

and the output function $v_i = g(u_i)$ is a hyperbolic tangent:

$$g(u_i) = \frac{1}{2} \left( 1 + \tanh \left( \frac{u_i}{u_0} \right) \right), \qquad u_0 > 0$$

The existence of an equilibrium point ($u^e$ such that $u(t)=u^e \ \forall t \geq t_e$ for some $t_e \geq 0$) is guaranteed if a Lyapunov or energy function exists. The idea is that the network's Lyapunov function, when $\Lambda \rightarrow{} \infty$, is associated with the cost function to be minimized in the combinatorial problem.

The CHN will solve those combinatorial problems which can be expressed as the constrained minimization of:

$$E(v) = -  \frac{1}{2} v^t T v - (i^b)^t v$$

The Traveling Salesman Problem

Let $N$ be the number of cities in the TSP, and let $d_{xy}$ be the distance between cities $x,y \in \{ 1,2,\ldots, N \}$. Next, let $V$ be the $N \times N$ matrix of the state variable:

$$v_{x,i} = \{ 1 \, \mbox{if the city} \, x \, \mbox{is visited in the
order} \, i \mbox{,} \, 0 \, \mbox{otherwise} \} $$

$V$ identifies a valid tour for the $TSP$ if the following constraints are satisfied:

  • Every city must be visited only once: $S_x = \sum_{i=1}^N v_{x,i} = 1, \quad \forall x \in \{1,2,\ldots,N \}$
  • Every position is associated with a unique city: $S_i = \sum_{x=1}^N v_{x,i} = 1, \quad \forall i \in \{ 1,2,\ldots,N \}$

The objective function is:

$$ \min  \{ \frac{1}{2} \sum_{x=1}^N \sum_{y \neq x} \sum_{i=1}^N
d_{xy} v_{xi}(v_{y(i+1)} + v_{y(i-1)}) \}, \mbox{(the $i+1$
and $i-1$ subscripts are given modulo $N$)} $$

and the output function $v_i = g(u_i)$ is a hyperbolic tangent:

$$g(u_i) = \frac{1}{2} \left( 1 + \tanh \left( \frac{u_i}{u_0} \right) \right), \qquad u_0 > 0$$

The existence of an equilibrium point ($u^e$ such that $\mathbf{u}(t)=u^e \ \forall t \geq t_e$ for some $t_e \geq 0$) is guaranteed if a Lyapunov or energy function exists. The idea is that the network's Lyapunov function, when $\lambda \rightarrow{} \infty$, is associated with the cost function to be minimized in the combinatorial problem.

The CHN will solve those combinatorial problems which can be expressed as the constrained minimization of:

$$E(\mathbf{v}) = -  \frac{1}{2} \mathbf{v}^t \mathbf{T} \mathbf{v} - (\mathbf{i^b})^t \mathbf{v}$$

The Traveling Salesman Problem

Let $N$ be the number of cities in the TSP, and let $d_{xy}$ be the distance between cities $x,y \in \{ 1,2,\ldots, N \}$. Next, let $\mathbf{V}$ be the $N \times N$ matrix of the state variable:

$$v_{x,i} = \{ 1 \, \mbox{if the city} \, x \, \mbox{is visited in the
order} \, i \mbox{,} \, 0 \, \mbox{otherwise} \} $$

$\mathbf{V}$ identifies a valid tour for the $TSP$ if the following constraints are satisfied:

  • Every city must be visited only once: $S_x = \sum_{i=1}^N v_{x,i} = 1, \quad \forall x \in \{1,2,\ldots,N \}$
  • Every position is associated with a unique city: $S_i = \sum_{x=1}^N v_{x,i} = 1, \quad \forall i \in \{ 1,2,\ldots,N \}$

The objective function is:

$$ \min  \{ \frac{1}{2} \sum_{x=1}^N \sum_{y \neq x} \sum_{i=1}^N
d_{xy} v_{xi}(v_{y(i+1)} + v_{y(i-1)}) \}, \mbox{(the $i+1$
and $i-1$ subscripts are given modulo $N$)} $$

The Mapping Process

Given the state variable is $V\in [0,1]^{N\times N}$ for the TSP, the energy function of the CHN is:

$$ E(V) = \frac{A}{2} \sum_x^N \sum_i^{N} \sum_{j \neq i}^{N} v_{x,i}
v_{x,j} + \frac{B}{2} \sum_i^{N} \sum_x^N \sum_{y \neq x}^N v_{x,i}
v_{y,i} + \frac{C}{2} ( \sum_x^N \sum_i^N v_{x,i} - N )^2 + \frac{D}{2}
\sum_x^N \sum_{y \neq x}^N \sum_i^N d_{x,y} v_{x,i} (v_{y,i-1} +
v_{y,i+1}) $$

The Mapping Process

Given the state variable is $\mathbf{V}\in [0,1]^{N\times N}$ for the TSP, the energy function of the CHN is:

$$ E(\mathbf{v}) = \frac{A}{2} \sum_x^N \sum_i^{N} \sum_{j \neq i}^{N} v_{x,i}
v_{x,j} + \frac{B}{2} \sum_i^{N} \sum_x^N \sum_{y \neq x}^N v_{x,i}
v_{y,i} + \frac{C}{2} ( \sum_x^N \sum_i^N v_{x,i} - N )^2 + \frac{D}{2}
\sum_x^N \sum_{y \neq x}^N \sum_i^N d_{x,y} v_{x,i} (v_{y,i-1} +
v_{y,i+1}) $$Hopfield Network Toolbox

Hopfield Network Toolbox

The Hopfield Network Toolbox can solve combinatorial optimization problems by using Hopfield Neural Networks. The Hopfield Network Toolbox is focused in Continuous Hopfield Networks.

If you are interested in using Discrete Hopfield Networks, see the documentation for newhop in Neural Network Toolbox™.

The Continuous Hopfield Network (CHN) is a recurrent neural network with an associated differential equation, whose state evolves from an initial condition to an equilibrium point by minimizing a Lyapunov function. As the Lyapunov function is associated with an objective function of the optimization problem (i.e. the mapping process), the equilibrium, or stable point, helps identify a local optimum for the optimization problem.

You can find more information about Continuous Hopfield Networks in the Concepts Section of the documentation.

Available Documentation

See also the GitHub repository Hopfield Network Toolbox for the latest release of the software.

References

References

The following references have been relevant in the development of the PhD Thesis and this Toolbox.

  1. Abe, S. Global convergence and suppression of spurious states of the Hopfield neural networks. IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications 40, 4 (1993), 246-257.
  2. Aiyer, S. V., Niranjan, M., and Fallside, F. A theoretical investigation into the performance of the Hopfield model. IEEE Transactions on Neural Networks 1, 2 (1990), 204-215.
  3. Anderson, J. A. A simple neural network generating an interactive memory. Mathematical biosciences 14, 3-4 (1972), 197-220.
  4. Cortes, C., and Vapnik, V. Support-vector networks. Machine learning 20, 3 (1995), 273-297.
  5. Croes, G. A. A method for solving traveling-salesman problems. Operations research 6, 6 (1958), 791-812.
  6. Cuykendall, R., and Reese, R. Scaling the neural TSP algorithm. Biological Cybernetics 60, 5 (1989), 365-371.
  7. De Mazancourt, T., and Gerlic, D. The inverse of a block-circulant matrix. IEEE transactions on antennas and propagation 31, 5 (1983), 808-810.
  8. Di Marco, M., Forti, M., Grazzini, M., and Pancioni, L. Necessary and suficient condition for multistability of neural networks evolving on a closed hypercube. Neural Networks 54 (2014), 38-48.
  9. García, L., Talaván, P. M., and Yáñez, J. Attractor basin analysis of the Hopfield model: The Generalized Quadratic Knapsack Problem. In International Work-Conference on Artificial Neural Networks (2017), Springer, pp. 420-431.
  10. García, L., Talaván, P. M., and Yáñez, J. Improving the Hopfield model performance when applied to the traveling salesman problem. Soft Computing 21, 14 (2017), 3891-3905.
  11. Gopal, M. Modern control system theory. New Age International, 1993.
  12. Grossberg, S. Adaptive pattern classification and universal recoding: I. parallel development and coding of neural feature detectors. Biological cybernetics 23, 3 (1976), 121-134.
  13. Hagan, M. T., Demuth, H. B., Beale, M. H., and De Jesús, O. Neural network design, vol. 20. PWS publishing company Boston, 1996.
  14. Hebb, D. O. The organization of behavior: A neuropsychological theory. John Wiley & Sons Inc., 1949.
  15. Hedge, S. U., Sweet, J. L., and Levy, W. B. Determination of parameters in a Hopfield/Tank computational network. In Neural Networks, 1988., IEEE International Conference on (1988), IEEE, pp. 291-298.
  16. Hernández-Solano, Y., Atencia, M., Joya, G., and Sandoval, F. A discrete gradient method to enhance the numerical behaviour of Hopfield networks. Neurocomputing 164 (2015), 45-55.
  17. Hopfield, J. J. Neural networks and physical systems with emergent collective computational abilities. Proceedings of the national academy of sciences 79, 8 (1982), 2554-2558.
  18. Hopfield, J. J. Neurons with graded response have collective computational properties like those of two-state neurons. Proceedings of the national academy of sciences 81, 10 (1984), 3088-3092.
  19. Hopfield, J. J., and Tank, D. W. "Neural" computation of decisions in optimization problems. Biological cybernetics 52, 3 (1985), 141-152.
  20. Jolai, F., and Ghanbari, A. Integrating data transformation techniques with Hopfield neural networks for solving travelling salesman problem. Expert Systems with Applications 37, 7 (2010), 5331-5335.
  21. Joya, G., Atencia, M., and Sandoval, F. Hopfield neural networks for optimization: study of the dierent dynamics. Neurocomputing 43, 1-4 (2002), 219-237.
  22. Kamgar-Parsi, B., and Kamgar-Parsi, B. On problem solving with Hopfield neural networks. Biological Cybernetics 62, 5 (1990), 415-423.
  23. Kohonen, T. Correlation matrix memories. IEEE transactions on computers 100, 4 (1972), 353-359.
  24. Kohonen, T. Self-organized formation of topologically correct feature maps. Biological cybernetics 43, 1 (1982), 59-69.
  25. Koopmans, T. C., and Beckmann, M. Assignment problems and the location of economic activities. Econometrica: journal of the Econometric Society (1957), 53-76.
  26. Krizhevsky, A., Sutskever, I., and Hinton, G. E. Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (2012), pp. 1097-1105.
  27. LeCun, Y., Bottou, L., Bengio, Y., and Haffner, P. Gradient-based learning applied to document recognition. Proceedings of the IEEE 86, 11 (1998), 2278-2324.
  28. Lin, S., and Kernighan, B. W. An eective heuristic algorithm for the traveling-salesman problem. Operations research 21, 2 (1973), 498-516.
  29. McCulloch, W. S., and Pitts, W. A logical calculus of the ideas immanent in nervous activity. The bulletin of mathematical biophysics 5, 4 (1943), 115-133.
  30. Mérida-Casermeiro, E., Galán-Marín, G., and Munoz-Perez, J. An ecient multivalued Hopfield network for the traveling salesman problem. Neural Processing Letters 14, 3 (2001), 203-216.
  31. Minsky, M., and Papert, S. Perceptrons. Oxford, England: MIT Press, 1969.
  32. Papadimitriou, C. H. The Euclidean travelling salesman problem is NP-complete. Theoretical Computer Science 4, 3 (1977), 237-244.
  33. Park, S. Signal space interpretations of Hopfield neural network for optimization. In IEEE International Symposium on Circuits and Systems, 1989. (1989), IEEE, pp. 2181-2184.
  34. Pavlov, I. P., and ANREP, G. V. Conditioned Reexes. An Investigation of the Physiological Activity of the Cerebral Cortex. Translated and Edited by GV Anrep. London, 1927.
  35. Platt, J. C., and Barr, A. H. Constrained dierential optimization for neural networks.
  36. Qin, K. On chaotic neural network design: A new framework. Neural Processing Letters (2016), 1-19.
  37. Ramón y Cajal, S. Sur la structure de l'écorce cérébrale de quelques mammifères. Typ. de Joseph van In & Cie.; Aug. Peeters, lib, 1891.
  38. Reinelt, G. TSPLIB. A traveling salesman problem library. ORSA journal on computing 3, 4 (1991), 376-384.
  39. Rojas, R. Neural networks: a systematic introduction. Springer Science & Business Media, 2013.
  40. Rosenblatt, F. The perceptron: A probabilistic model for information storage and organization in the brain. Psychological review 65, 6 (1958), 386.
  41. Rumelhart, D. E., Hinton, G. E., and Williams, R. J. Learning representations by backpropagating errors. Cognitive modeling 5, 3 (1988), 1.
  42. Rumelhart, D. E., McClelland, J. L., Group, P. R., et al. Parallel distributed processing: Explorations in the microstructures of cognition. volume 1: Foundations, 1986.
  43. Salcedo-Sanz, S., Ortiz-García, E. G., Pérez-Bellido, Á. M., Portilla-Figueras, A., and López-Ferreras, F. On the performance of the LP-guided Hopfield network-genetic algorithm. Computers & Operations Research 36, 7 (2009), 2210-2216.
  44. Serpen, G. Adaptive Hopfield Network. Springer Berlin Heidelberg, Berlin, Heidelberg, 2003, pp. 3-10.
  45. Shepherd, G. M. The synaptic organization of the brain. Oxford University Press, 2003.
  46. Suh, T., and Esat, I. I. Solving large scale combinatorial optimisation problems based on a divide and conquer strategy. Neural Computing & Applications 7, 2 (1998), 166-179.
  47. Sun, Y., Wang, Z., and Van Wyk, B. J. Chaotic Hopfield neural network swarm optimization and its application. Journal of Applied Mathematics 2013 (2013).
  48. Talaván, P. M. El modelo de Hopfield aplicado a problemas de optimización combinatoria. PhD thesis, Universidad Complutense de Madrid, 2003.
  49. Talaván, P. M., and Yáñez, J. Parameter setting of the Hopfield network applied to TSP. Neural Networks 15, 3 (2002), 363-373.
  50. Talaván, P. M., and Yáñez, J. A continuous Hopfield network equilibrium points algorithm. Computers & operations research 32, 8 (2005), 2179-2196.
  51. Talaván, P. M., and Yáñez, J. The Generalized Quadratick Knapsack Problem. A neuronal network approach. Neural networks 19, 4 (2006), 416-428.
  52. Tan, K. C., Tang, H., and Ge, S. S. On parameter settings of Hopfield networks applied to traveling salesman problems. IEEE Transactions on Circuits and Systems I: Regular Papers 52, 5 (2005), 994-1002.
  53. Tang, H., Tan, K. C., and Yi, Z. A columnar competitive model for solving combinatorial optimization problems. IEEE Transactions on Neural Networks 15, 6 (2004), 1568-1574.
  54. Wang, R. L., Tang, Z., and Cao, Q. P. A learning method in Hopfield neural network for combinatorial optimization problem. Neurocomputing 48, 1 (2002), 1021-1024.
  55. Wasserman, P. D., and Meyer-Arendt, J. R. Neural computing, theory and practice. Applied Optics 29 (1990), 2503.
  56. Wen, U.-P., Lan, K.-M., and Shih, H.-S. A review of Hopfield neural networks for solving mathematical programming problems. European Journal of Operational Research 198, 3 (2009), 675-687.
  57. Widrow, B., Hoff, M. E., et al. Adaptive switching circuits. In IRE WESCON convention record (1960), vol. 4, New York, pp. 96-104.
  58. Wilson, G., and Pawley, G. On the stability of the travelling salesman problem algorithm of Hopfield and Tank. Biological Cybernetics 58, 1 (1988), 63-70.
  59. Woeginger, G. J. Exact algorithms for NP-hard problems: A survey. In Combinatorial Optimization - Eureka, You Shrink! Springer, 2003, pp. 185-207.
\ No newline at end of file diff --git a/help/html/chn_release_notes.html b/help/html/chn_release_notes.html index 5dc2c59..92592d1 100644 --- a/help/html/chn_release_notes.html +++ b/help/html/chn_release_notes.html @@ -6,7 +6,7 @@ Hopfield Network Toolbox Release Notes

Hopfield Network Toolbox Release Notes

This toolbox is solves combinatorial optimization problems by using Continuous Hopfield Networks (CHN).

The Hopfield Network Toolbox requires the following products: MATLAB® and Statistics and Machine Learning Toolbox™

Contents

Version 1.1.2, 09-Apr-2017

Minor Bugs

List of Bugs fixed and Enhancements in this release.

Version 1.1.2 on GitHub

Version 1.1.1, 21-Feb-2016

Bug fixing for Unix platforms

List of Bugs fixed in this release.

Version 1.1.1 on GitHub

Version 1.1, 21-Feb-2016

New App, Toolbox Documentation and Examples.

New Features:

  • Hopfield Net TSP solver App
  • Toolbox documentation
  • Step-by-step examples
  • TSPLIB automatic download

List of Bugs fixed in this release.

Version 1.1 on GitHub

Version 1.0, 02-Nov-2015

Initial release of Hopfield Network Toolbox.

This release is mainly focused in solving the Traveling Salesman Problem using the Continuous Hopfield Network (CHN). However, the release also provides a class structure to solve generic combinatorial optimization problems. Development in this area is undergoing.

The class to solve the TSP problems using CHNs is tsphopfieldnet. This network can solve any TSP problem, provided its coordinates or distance matrix. The Toolbox also includes the library TSPLIB, a de facto library for TSP benchmarks. Instances with up to 13509 cities have been tested using the tsphopfieldnet network. Note that solving such instances might require a large amount of memory.

Two main algorithms can be tested in this release:

  • talavan-yanez: based on the paper Parameter setting of the Hopfield network applied to TSP by Pedro M. Talaván and Javier Yáñez.
  • divide-conquer: based on the paper (pending publishing at the time of this release) Improving the Hopfield model performance when applied to the traveling salesman problem: A divide-and-conquer scheme by Lucas García, Pedro M. Talaván and Javier Yáñez.

Version 1.0 on GitHub

References

The latest version of this toolbox is available on GitHub.

This toolbox is solves combinatorial optimization problems by using Continuous Hopfield Networks (CHN).

The Hopfield Network Toolbox requires the following products: MATLAB® and Statistics and Machine Learning Toolbox™

Contents

Version 2.0, 21-Sep-2017

New App, Simulink Models, Runge-Kutta simulation method for TSP and GQKP, improved documentation, new examples, minor bugs and enhancements

List of Bugs fixed and Enhancements in this release.

Version 2.0 on GitHub

Version 1.2, 30-Jun-2017

Interface redesign to include schemes. Minor bugs and enhancements

List of Bugs fixed and Enhancements in this release.

Version 1.2 on GitHub

Version 1.1.2, 09-Apr-2017

Minor Bugs

List of Bugs fixed and Enhancements in this release.

Version 1.1.2 on GitHub

Version 1.1.1, 21-Feb-2016

Bug fixing for Unix platforms

List of Bugs fixed in this release.

Version 1.1.1 on GitHub

Version 1.1, 21-Feb-2016

New App, Toolbox Documentation and Examples.

New Features:

  • Hopfield Net TSP solver App
  • Toolbox documentation
  • Step-by-step examples
  • TSPLIB automatic download

List of Bugs fixed in this release.

Version 1.1 on GitHub

Version 1.0, 02-Nov-2015

Initial release of Hopfield Network Toolbox.

This release is mainly focused in solving the Traveling Salesman Problem using the Continuous Hopfield Network (CHN). However, the release also provides a class structure to solve generic combinatorial optimization problems. Development in this area is undergoing.

The class to solve the TSP problems using CHNs is tsphopfieldnet. This network can solve any TSP problem, provided its coordinates or distance matrix. The Toolbox also includes the library TSPLIB, a de facto library for TSP benchmarks. Instances with up to 13509 cities have been tested using the tsphopfieldnet network. Note that solving such instances might require a large amount of memory.

Two main algorithms can be tested in this release:

  • talavan-yanez: based on the paper Parameter setting of the Hopfield network applied to TSP by Pedro M. Talaván and Javier Yáñez.
  • divide-conquer: based on the paper (pending publishing at the time of this release) Improving the Hopfield model performance when applied to the traveling salesman problem: A divide-and-conquer scheme by Lucas García, Pedro M. Talaván and Javier Yáñez.

Version 1.0 on GitHub

References

The latest version of this toolbox is available on GitHub.

Hopfield Network Toolbox System Requirements

Hopfield Network Toolbox System Requirements

Hopfield Network Toolbox requires MATLAB® and Statistics and Machine Learning Toolbox™

Hopfield Network Toolbox User's Guidechn_users_guide_howToUse \ No newline at end of file diff --git a/help/html/chn_users_guide_TSP.html b/help/html/chn_users_guide_TSP.html index 7e9d92f..b6b71a1 100644 --- a/help/html/chn_users_guide_TSP.html +++ b/help/html/chn_users_guide_TSP.html @@ -6,7 +6,7 @@ How to solve the Traveling Salesman Problem using Hopfield Networks

How to solve the Traveling Salesman Problem using Hopfield Networks

The Continuous Hopfield Network has been extensively used to solve the Travelling Salesman Problem. However, only after Talaván and Yáñez's approach with an appropriate problem parametrization, it is reasonable to solve the TSP using a Hopfield Network, as obtaining a feasible solution is guaranteed.

The Hopfield Network tsphopfieldnet can solve the following types of problems:

What is hopfieldnet?

What is hopfieldnet?

hopfieldnet is a MATLAB class that has been developed to solve the Continuous Hopfield Network using MATLAB.

hopfieldnet has been programmed in a similiar way to other Artificial Neural Networks available in Neural Network Toolbox™, using classdef to create and design the class.

hopfielnet is a generic class which can be used to solve any kind of combinatorial optimization problem.

A child class from hopfielnet, tsphopfieldnet, is specially focused in solving the Traveling Salesman Problem using Continuous Hopfield Networks. See the examples using tsphopfieldnet to learn more.

\ No newline at end of file diff --git a/help/html/chn_users_guide_howToUseCreateOptions.html b/help/html/chn_users_guide_howToUseCreateOptions.html deleted file mode 100644 index 826d2c9..0000000 --- a/help/html/chn_users_guide_howToUseCreateOptions.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - How to use tsphopfieldnet and createOptions

How to use tsphopfieldnet and createOptions

tsphopfieldnet is the class that creates Continuous Hopfield Networks for solving the Traveling Salesman Problem.

Contents

How tsphopfieldnet works

tsphopfieldnet's default behavior is to take only 2 input arguments:

  • N: number of cities
  • C: free parameter (greater than 0)

In this case, the cities are place in the vertices of regular polygons (see Example).

Optionally, tsphopfieldnet may receive a third input argument that gives further information of the TSP problem considered. This should be the case for most of the TSP problems you may want to solve.

Syntax

    net = tsphopfieldnet(N,C)
-    net = tsphopfieldnet(N,C,options)

How tsphopfieldnetOptions work

tsphopfieldnetOptions is a class for tsphopfieldnet that allows to specify the details of each TSP problem.

Syntax

    options = tsphopfieldnetOptions('param1','value1','param2','value2',...)

The following table lists the available options for tsphopfieldnet.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionValueDescription
'Coordinates'Nx2 real numeric matrixTSP coordinates
'DistanceMatrix'NxN real numeric matrixTSP distance matrix
'DistanceType''EUC'
'EUC_2D'
'GEO'
'ATT'
'CEIL_2D'
'EXPLICIT'
Distance type
'Names'1xN cellTSP city names
'Subtours'1xN cellTSP fixed subtours
'SubtoursPositions'1xN matrixTSP fixed subtours starting positions
'Tau'1x1 doubleNumber of neighboring cities
'SimFcn''euler'
'talavan-yanez'
'divide-conquer'
Simulation method
'TrainFcn''trainty'Training method
'K'1x1 doubleNumber of chains
'CheckpointPath'charValid writable path to store simulation
'Dt'1x1 doubleStep for Euler method
'E'1x1 doubleTolerance exponent
'ExecutionEnvironment''CPU'
'GPU'
Hardware resources
'MaxIter'1x1 doubleMaximum number of iterations
'Q'1x1 doubleParameter factor for reducing
integration step
'R_Iter'1x1 doubleNumber of iterations for reducing
integration step
'SimulationPlot'1x1 logicalShow simulation process plot
'SimulationPlotPauseTime'1x1 doublePause time during simulation
process plot
'TransferFcn''satlin'
'tanh'
Transfer function
'U0'1x1 doubleInitial potential
'Verbose'1x1 logicalDisplay information of
simulation process
'VerboseFrequency'1x1 integer valueFrequency of verbose printing
-

See Examples using TSPLIB or when city coordinates or distance matrix are provided.

\ No newline at end of file diff --git a/help/html/chn_users_guide_howToUseTsphopfieldnetOptions.html b/help/html/chn_users_guide_howToUseTsphopfieldnetOptions.html new file mode 100644 index 0000000..af56928 --- /dev/null +++ b/help/html/chn_users_guide_howToUseTsphopfieldnetOptions.html @@ -0,0 +1,407 @@ + + + + + How to use tsphopfieldnet and tsphopfieldnetOptions

How to use tsphopfieldnet and tsphopfieldnetOptions

tsphopfieldnet is a function that returns an object of the class HopfieldNetworkTSP. This object is a Continuous Hopfield Network designed to solve the Traveling Salesman Problem.

At the same time, tsphopfieldnetOptions returns an object of the class HopfieldNetworkTSPOptions. Such object may be used to customize the Hopfield network object from HopfieldNetworkTSP.

Contents

How tsphopfieldnet works

tsphopfieldnet's default behavior is to take only 2 input arguments:

  • N: number of cities
  • C: free parameter (greater than 0)

In this case, the cities are place in the vertices of regular polygons (see Example).

Optionally, tsphopfieldnet may receive a third input argument (of the class HopfieldNetworkTSPOptions using the function tsphopfieldnetOptions) which gives further information of the TSP problem considered. This way an arbitrary TSP problem can be created.

Syntax

    net = tsphopfieldnet(N,C)
+    net = tsphopfieldnet(N,C,options)

How tsphopfieldnetOptions works

tsphopfieldnetOptions is a function returning an object of the class HopfieldNetworkTSPOptions which allows to specify all the settings and details of the TSP problem.

Syntax

    options = tsphopfieldnetOptions('param1','value1','param2','value2',...)

The following table lists the available options for HopfieldNetworkTSPOptions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionValueDescription
'Scheme''classic' (default) | 'divide-conquer' | '2opt' | 'classic&2opt' | 'divide-conquer&2opt'Architecture or scheme of the Hopfield model
'SimFcn''euler' | 'runge-kutta' | 'talavan-yanez' (default)CHN Simulation method
'TrainFcn''trainty'Training method for the CHN applied to the TSP
'K'0 (default) | scalar integer value greater or equal than 0Number of fixed chains
'Coordinates'[] (default) | real-value 2-column matrixTSP Cities' coordinates
'DistanceMatrix'[] (default) | real-value square matrixTSP Distance Matrix
'DistanceType''geo' | 'euc_2d' | 'euc' (default) | 'att' | 'ceil_2d' | 'explicit'Distance type between TSP cities
'Names''' (default) | cell array of stringsTSP city names
'PlotPhase'false (default) | trueIndicator to display the result of the phases in 'divide-conquer'
'Subtours''' (default) | cell array of stringsChains of cities separated by hyphens
'SubtoursPositions'[] (default) | vector of integer values with as many columns as elements in 'Subtours'Location of the first city in each pre-fixed chains of cities in 'Subtours'
'Tau'[] (default) | scalar integer valueNumber of neighboring cities considered in the first phase of 'divide-conquer'
'CheckpointPath''' (default) | character vectorPath to store the simulation trayectory
'Dt'0.01 (default) | scalar positive valueIntegration step for 'euler' and 'runge-kutta' methods
'E'13 (default) | scalar positive integer valueExponent for the stopping criteria tolerance, 1e-E
'ExecutionEnvironment''cpu' (default) | 'gpu'Execution environment of the CHN
'MaxIter'2000 (default) | scalar positive integer valueMaximum number of iterations
'Q'0.8 (default) | scalar positive valueIntegration step reduction in 'talavan-yanez' during the first 'R_Iter' iterations
'R_Iter'20 (default) | scalar positive integer valueNumber of iterations in 'talavan-yanez' where the integration step is reduced
'SimulationPlot'false (default) | trueIndicator to visualize the simulation
'SimulationPlotPauseTime'0.8 (default) | scalar positive valuePause time in between iterations in the visualization of the simulation
'TransferFcn''satlin' | 'tanh' (default)Activation or Transfer function
'U0'0.3 (default) | scalar positive valueSlope of the transfer function
'Verbose'false (default) | trueIndicator to show information on the simulation of the CHN
'VerboseFrequency'25 (default) | scalar positive integer valueFrequency of verbose printing
+

See Examples using TSPLIB or when city coordinates or distance matrix are provided.

\ No newline at end of file diff --git a/help/html/chn_users_guide_howToUsehopfieldnetOptions.html b/help/html/chn_users_guide_howToUsehopfieldnetOptions.html new file mode 100644 index 0000000..6ff8db6 --- /dev/null +++ b/help/html/chn_users_guide_howToUsehopfieldnetOptions.html @@ -0,0 +1,315 @@ + + + + + How to use hopfieldnet and hopfieldnetOptions

How to use hopfieldnet and hopfieldnetOptions

hopfieldnet is a function that returns an object of the class HopfieldNetworkGQKP. This object is a Continuous Hopfield Network designed to solve the Generalized Quadratic Knapsack Problem.

At the same time, hopfieldnetOptions returns an object of the class HopfieldNetworkGQKPOptions. Such object may be used to customize the Hopfield network object from HopfieldNetworkGQKP.

Contents

How hopfieldnet works

hopfieldnet's default behavior is to take 6 input arguments:

  • P: Square matrix defining the quadratic term of the optimization problem
  • q: Vector defining the linear term of the optimization problem
  • Aeq: Matrix defining the linear equality constraints. Aeq*x = beq
  • beq: Vector defining the linear equality constraints. Aeq*x = beq
  • A: Matrix defining the linear inequality constraints. A*x <= b
  • b: Vector defining the linear inequality constraints. A*x <= b

Optionally, hopfieldnet may receive a seven input argument (of the class HopfieldNetworkGQKPOptions using the function hopfieldnetOptions) which gives further information of the GQKP problem considered. This way an arbitrary GQKP problem can be created.

Syntax

    net = hopfieldnet(P,q,Aeq,beq,A,b)
+    net = hopfieldnet(P,q,Aeq,beq,A,b,options)

How hopfieldnetOptions works

hopfieldnetOptions is a function returning an object of the class HopfieldNetworkGQKPOptions which allows to specify all the settings and details of the GQKP problem.

Syntax

    options = hopfieldnetOptions('param1','value1','param2','value2',...)

The following table lists the available options for HopfieldNetworkGQKPOptions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionValueDescription
'Scheme''classic'Architecture or scheme of the Hopfield model
'SimFcn''euler' | 'runge-kutta' | 'talavan-yanez' (default)CHN Simulation method
'TrainFcn''traingty'Training method for the CHN applied to the GQKP
'CheckpointPath''' (default) | character vectorPath to store the simulation trayectory
'Dt'0.01 (default) | scalar positive valueIntegration step for 'euler' and 'runge-kutta' methods
'E'13 (default) | scalar positive integer valueExponent for the stopping criteria tolerance, 1e-E
'ExecutionEnvironment''cpu' (default) | 'gpu'Execution environment of the CHN
'MaxIter'2000 (default) | scalar positive integer valueMaximum number of iterations
'Q'0.8 (default) | scalar positive valueIntegration step reduction in 'talavan-yanez' during the first 'R_Iter' iterations
'R_Iter'20 (default) | scalar positive integer valueNumber of iterations in 'talavan-yanez' where the integration step is reduced
'SimulationPlot'false (default) | trueIndicator to visualize the simulation
'SimulationPlotPauseTime'0.8 (default) | scalar positive valuePause time in between iterations in the visualization of the simulation
'TransferFcn''satlin' | 'tanh' (default)Activation or Transfer function
'U0'0.3 (default) | scalar positive valueSlope of the transfer function
'Verbose'false (default) | trueIndicator to show information on the simulation of the CHN
'VerboseFrequency'25 (default) | scalar positive integer valueFrequency of verbose printing
+

See example to solve a GQKP using a CHN.

\ No newline at end of file diff --git a/help/html/chn_users_guide_improve.html b/help/html/chn_users_guide_improve.html index 07ce564..bac52e2 100644 --- a/help/html/chn_users_guide_improve.html +++ b/help/html/chn_users_guide_improve.html @@ -6,7 +6,7 @@ How to solve improve the performance of the Hopfield Network for the TSP

How to solve improve the performance of the Hopfield Network for the TSP using Hybrid methods

\ No newline at end of file diff --git a/help/html/chn_users_guide_tsplib.html b/help/html/chn_users_guide_tsplib.html index b436504..a1d004c 100644 --- a/help/html/chn_users_guide_tsplib.html +++ b/help/html/chn_users_guide_tsplib.html @@ -6,7 +6,7 @@ TSPLIB - A library for Traveling Salesman Problems -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%
OptionValueDescription
'Coordinates'Nx2 real numeric matrixTSP coordinates
'DistanceMatrix'NxN real numeric matrixTSP distance matrix
'DistanceType''EUC'
'EUC_2D'
'GEO'
'ATT'
'CEIL_2D'
'EXPLICIT'
Distance type
'Names'1xN cellTSP city names
'Subtours'1xN cellTSP fixed subtours
'SubtoursPositions'1xN matrixTSP fixed subtours starting positions
'Tau'1x1 doubleNumber of neighboring cities
'SimFcn''euler'
'talavan-yanez'
'divide-conquer'
Simulation method
'TrainFcn''trainty'Training method
'K'1x1 doubleNumber of chains
'CheckpointPath'charValid writable path to store simulation
'Dt'1x1 doubleStep for Euler method
'E'1x1 doubleTolerance exponent
'ExecutionEnvironment''CPU'
'GPU'
Hardware resources
'MaxIter'1x1 doubleMaximum number of iterations
'Q'1x1 doubleParameter factor for reducing
integration step
'R_Iter'1x1 doubleNumber of iterations for reducing
integration step
'SimulationPlot'1x1 logicalShow simulation process plot
'SimulationPlotPauseTime'1x1 doublePause time during simulation
process plot
'TransferFcn''satlin'
'tanh'
Transfer function
'U0'1x1 doubleInitial potential
'Verbose'1x1 logicalDisplay information of
simulation process
'VerboseFrequency'1x1 integer valueFrequency of verbose printing
-% -% -%% -% See Examples using or when -% or -% are provided. diff --git a/help_source/chn_users_guide_howToUseTsphopfieldnetOptions.m b/help_source/chn_users_guide_howToUseTsphopfieldnetOptions.m new file mode 100644 index 0000000..a92e223 --- /dev/null +++ b/help_source/chn_users_guide_howToUseTsphopfieldnetOptions.m @@ -0,0 +1,191 @@ +%% How to use tsphopfieldnet and tsphopfieldnetOptions +% |tsphopfieldnet| is a function that returns an object of the class +% |HopfieldNetworkTSP|. This object is a Continuous Hopfield Network +% designed to solve the Traveling Salesman Problem. +% +% At the same time, |tsphopfieldnetOptions| returns an object of the class +% |HopfieldNetworkTSPOptions|. Such object may be used to customize the +% Hopfield network object from |HopfieldNetworkTSP|. +% +%% How |tsphopfieldnet| works +% |tsphopfieldnet|'s default behavior is to take only 2 input arguments: +%% +% * N: number of cities +% * C: free parameter (greater than 0) +% +% In this case, the cities are place in the vertices of regular polygons +% (see ). +% +% Optionally, |tsphopfieldnet| may receive a third input argument (of the +% class |HopfieldNetworkTSPOptions| using the function +% |tsphopfieldnetOptions|) which gives further information of the TSP +% problem considered. This way an arbitrary TSP problem can be created. +% +%% +% *Syntax* +% +% net = tsphopfieldnet(N,C) +% net = tsphopfieldnet(N,C,options) +% +%% How |tsphopfieldnetOptions| works +% |tsphopfieldnetOptions| is a function returning an object of the class +% |HopfieldNetworkTSPOptions| which allows to specify all the settings and +% details of the TSP problem. +% +%% +% *Syntax* +% +% options = tsphopfieldnetOptions('param1','value1','param2','value2',...) + +%% +% The following table lists the available options for +% |HopfieldNetworkTSPOptions|. +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +%
OptionValueDescription
'Scheme''classic' (default) | 'divide-conquer' | '2opt' | 'classic&2opt' | 'divide-conquer&2opt'Architecture or scheme of the Hopfield model
'SimFcn''euler' | 'runge-kutta' | 'talavan-yanez' (default)CHN Simulation method
'TrainFcn''trainty'Training method for the CHN applied to the TSP
'K'0 (default) | scalar integer value greater or equal than 0Number of fixed chains
'Coordinates'[] (default) | real-value 2-column matrixTSP Cities' coordinates
'DistanceMatrix'[] (default) | real-value square matrixTSP Distance Matrix
'DistanceType''geo' | 'euc_2d' | 'euc' (default) | 'att' | 'ceil_2d' | 'explicit'Distance type between TSP cities
'Names''' (default) | cell array of stringsTSP city names
'PlotPhase'false (default) | trueIndicator to display the result of the phases in 'divide-conquer'
'Subtours''' (default) | cell array of stringsChains of cities separated by hyphens
'SubtoursPositions'[] (default) | vector of integer values with as many columns as elements in 'Subtours'Location of the first city in each pre-fixed chains of cities in 'Subtours'
'Tau'[] (default) | scalar integer valueNumber of neighboring cities considered in the first phase of 'divide-conquer'
'CheckpointPath''' (default) | character vectorPath to store the simulation trayectory
'Dt'0.01 (default) | scalar positive valueIntegration step for 'euler' and 'runge-kutta' methods
'E'13 (default) | scalar positive integer valueExponent for the stopping criteria tolerance, 1e-E
'ExecutionEnvironment''cpu' (default) | 'gpu'Execution environment of the CHN
'MaxIter'2000 (default) | scalar positive integer valueMaximum number of iterations
'Q'0.8 (default) | scalar positive valueIntegration step reduction in 'talavan-yanez' during the first 'R_Iter' iterations
'R_Iter'20 (default) | scalar positive integer valueNumber of iterations in 'talavan-yanez' where the integration step is reduced
'SimulationPlot'false (default) | trueIndicator to visualize the simulation
'SimulationPlotPauseTime'0.8 (default) | scalar positive valuePause time in between iterations in the visualization of the simulation
'TransferFcn''satlin' | 'tanh' (default)Activation or Transfer function
'U0'0.3 (default) | scalar positive valueSlope of the transfer function
'Verbose'false (default) | trueIndicator to show information on the simulation of the CHN
'VerboseFrequency'25 (default) | scalar positive integer valueFrequency of verbose printing
+% +% +%% +% See Examples using or when +% or +% are provided. diff --git a/help_source/chn_users_guide_howToUsehopfieldnetOptions.m b/help_source/chn_users_guide_howToUsehopfieldnetOptions.m new file mode 100644 index 0000000..3cf9e82 --- /dev/null +++ b/help_source/chn_users_guide_howToUsehopfieldnetOptions.m @@ -0,0 +1,145 @@ +%% How to use hopfieldnet and hopfieldnetOptions +% |hopfieldnet| is a function that returns an object of the class +% |HopfieldNetworkGQKP|. This object is a Continuous Hopfield Network +% designed to solve the Generalized Quadratic Knapsack Problem. +% +% At the same time, |hopfieldnetOptions| returns an object of the class +% |HopfieldNetworkGQKPOptions|. Such object may be used to customize the +% Hopfield network object from |HopfieldNetworkGQKP|. +% +%% How |hopfieldnet| works +% |hopfieldnet|'s default behavior is to take 6 input arguments: +%% +% * P: Square matrix defining the quadratic term of the optimization problem +% * q: Vector defining the linear term of the optimization problem +% * Aeq: Matrix defining the linear equality constraints. Aeq*x = beq +% * beq: Vector defining the linear equality constraints. Aeq*x = beq +% * A: Matrix defining the linear inequality constraints. A*x <= b +% * b: Vector defining the linear inequality constraints. A*x <= b +% +% Optionally, |hopfieldnet| may receive a seven input argument (of the +% class |HopfieldNetworkGQKPOptions| using the function +% |hopfieldnetOptions|) which gives further information of the GQKP +% problem considered. This way an arbitrary GQKP problem can be created. +% +%% +% *Syntax* +% +% net = hopfieldnet(P,q,Aeq,beq,A,b) +% net = hopfieldnet(P,q,Aeq,beq,A,b,options) +% +%% How |hopfieldnetOptions| works +% |hopfieldnetOptions| is a function returning an object of the class +% |HopfieldNetworkGQKPOptions| which allows to specify all the settings and +% details of the GQKP problem. +% +%% +% *Syntax* +% +% options = hopfieldnetOptions('param1','value1','param2','value2',...) + +%% +% The following table lists the available options for +% |HopfieldNetworkGQKPOptions|. +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +%
OptionValueDescription
'Scheme''classic'Architecture or scheme of the Hopfield model
'SimFcn''euler' | 'runge-kutta' | 'talavan-yanez' (default)CHN Simulation method
'TrainFcn''traingty'Training method for the CHN applied to the GQKP
'CheckpointPath''' (default) | character vectorPath to store the simulation trayectory
'Dt'0.01 (default) | scalar positive valueIntegration step for 'euler' and 'runge-kutta' methods
'E'13 (default) | scalar positive integer valueExponent for the stopping criteria tolerance, 1e-E
'ExecutionEnvironment''cpu' (default) | 'gpu'Execution environment of the CHN
'MaxIter'2000 (default) | scalar positive integer valueMaximum number of iterations
'Q'0.8 (default) | scalar positive valueIntegration step reduction in 'talavan-yanez' during the first 'R_Iter' iterations
'R_Iter'20 (default) | scalar positive integer valueNumber of iterations in 'talavan-yanez' where the integration step is reduced
'SimulationPlot'false (default) | trueIndicator to visualize the simulation
'SimulationPlotPauseTime'0.8 (default) | scalar positive valuePause time in between iterations in the visualization of the simulation
'TransferFcn''satlin' | 'tanh' (default)Activation or Transfer function
'U0'0.3 (default) | scalar positive valueSlope of the transfer function
'Verbose'false (default) | trueIndicator to show information on the simulation of the CHN
'VerboseFrequency'25 (default) | scalar positive integer valueFrequency of verbose printing
+% +% +%% +% See to solve a GQKP using a CHN. \ No newline at end of file diff --git a/help_source/chn_users_guide_improveHybrid.m b/help_source/chn_users_guide_improveHybrid.m index 23048a6..6707a4a 100644 --- a/help_source/chn_users_guide_improveHybrid.m +++ b/help_source/chn_users_guide_improveHybrid.m @@ -1,4 +1,4 @@ %% How to solve improve the performance of the Hopfield Network for the TSP using Hybrid methods % -% * -% +% * +% * diff --git a/help_source/publishingHelpFiles.m b/help_source/publishingHelpFiles.m index 7f302af..2a5e266 100644 --- a/help_source/publishingHelpFiles.m +++ b/help_source/publishingHelpFiles.m @@ -2,7 +2,8 @@ customXsl = fullfile(mainFolder,'help_source','mxdom2mathjax.xsl'); addpath(mainFolder) -addpath(genpath(fullfile(mainFolder,'TSPFiles'))); +addpath(fullfile(mainFolder,'chn')); +addpath(genpath(fullfile(mainFolder,'data','TSPFiles'))); helpFolder = fullfile(mainFolder,'help'); helpSourceFilesLocation = fullfile(mainFolder,'help_source'); @@ -20,8 +21,11 @@ publish(fullfile(helpSourceFilesLocation,'chn_users_guide'),optionsPublish); publish(fullfile(helpSourceFilesLocation,'chn_users_guide_hopfieldnet'),optionsPublish); publish(fullfile(helpSourceFilesLocation,'chn_users_guide_tsplib'),optionsPublish); -publish(fullfile(helpSourceFilesLocation,'chn_users_guide_howToUseCreateOptions'),optionsPublish); +publish(fullfile(helpSourceFilesLocation,'chn_users_guide_howToUseTsphopfieldnetOptions'),optionsPublish); +publish(fullfile(helpSourceFilesLocation,'chn_users_guide_howToUsehopfieldnetOptions'),optionsPublish); publish(fullfile(helpSourceFilesLocation,'chn_users_guide_TSP'),optionsPublish); +publish(fullfile(helpSourceFilesLocation,'chn_users_guide_SimulinkModels'),optionsPublish); +publish(fullfile(helpSourceFilesLocation,'chn_references'),optionsPublish); publish(fullfile(helpFolder,'Example_tspUsingRegularPolygons')); publish(fullfile(helpFolder,'Example_tspUsingTSPLIB')); publish(fullfile(helpFolder,'Example_tspUsingCoords')); @@ -31,10 +35,14 @@ publish(fullfile(helpFolder,'Example_tspSaddlePoint')); publish(fullfile(helpSourceFilesLocation,'chn_users_guide_improveHybrid'),optionsPublish); publish(fullfile(helpFolder,'Example_tspDivideConquer')); +publish(fullfile(helpFolder,'Example_tsp2opt')); publish(fullfile(helpSourceFilesLocation,'chn_TSP_APP'),optionsPublish); +publish(fullfile(helpFolder,'Example_GQKPusingCHN')); +publish(fullfile(helpFolder,'Example_SimulinkDiscrete')); +publish(fullfile(helpFolder,'Example_SimulinkContinuous')); builddocsearchdb(fullfile(pwd,helpFolder,'html')); -rmpath(genpath(fullfile(helpSourceFilesLocation))) +rmpath(fullfile(helpSourceFilesLocation)) close all;