From b82fc2145ed4ed0c1e330b49df878d78da3118c1 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Mon, 28 Oct 2019 15:28:36 +0100 Subject: [PATCH 01/32] New fixes, works with kb2623 branch --- CEC/.idea/CEC.iml | 11 + .../inspectionProfiles/profiles_settings.xml | 6 + CEC/.idea/misc.xml | 4 + CEC/.idea/modules.xml | 8 + CEC/.idea/vcs.xml | 6 + CEC/.idea/workspace.xml | 58 + CEC/Makefile | 6 + CEC/Pipfile | 19 + CEC/cec2005/Makefile | 3 +- CEC/cec2008/Makefile | 3 +- CEC/cec2008/setup.py | 2 +- CEC/cec2013/Makefile | 3 +- CEC/cec2014/Makefile | 3 +- CEC/cec2015/Makefile | 3 +- CEC/cec2016/Makefile | 3 +- CEC/cec2017/Makefile | 3 +- CEC/cec2018/Makefile | 3 +- CEC/cec2019/Makefile | 3 +- CEC/cec2019/cec19_test_func.cpp | 9 +- CEC/cec2019/cec19_test_func.h | 4 - CEC/cecargparser.py | 4 +- CEC/run_cec.py | 58 +- CECC/Makefile | 5 + CECC/Pipfile | 14 + alogorithm_statistical_comparison/Makefile | 33 + alogorithm_statistical_comparison/Pipfile | 18 + alogorithm_statistical_comparison/README.md | 6 + .../data_analyze.ipynb | 290 ++++ alogorithm_statistical_comparison/nemenyi.csv | 100 ++ clustering_datasets/Clustering.ipynb | 504 ++++++ clustering_datasets/Data.ipynb | 653 ++++++++ clustering_datasets/Makefile | 25 + clustering_datasets/Pipfile | 23 + clustering_datasets/Pipfile.lock | 649 ++++++++ clustering_datasets/README.md | 9 + clustering_datasets/clusterargparser.py | 38 + clustering_datasets/cmc.csv | 1474 +++++++++++++++++ clustering_datasets/glass.csv | 215 +++ clustering_datasets/run_cluster.py | 71 + clustering_datasets/run_cluster_kmeans.py | 48 + optimize_KNN_parameters/run.py | 8 +- 41 files changed, 4355 insertions(+), 50 deletions(-) create mode 100644 CEC/.idea/CEC.iml create mode 100644 CEC/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 CEC/.idea/misc.xml create mode 100644 CEC/.idea/modules.xml create mode 100644 CEC/.idea/vcs.xml create mode 100644 CEC/.idea/workspace.xml create mode 100644 CEC/Makefile create mode 100644 CEC/Pipfile create mode 100644 CECC/Makefile create mode 100644 CECC/Pipfile create mode 100644 alogorithm_statistical_comparison/Makefile create mode 100644 alogorithm_statistical_comparison/Pipfile create mode 100644 alogorithm_statistical_comparison/README.md create mode 100644 alogorithm_statistical_comparison/data_analyze.ipynb create mode 100644 alogorithm_statistical_comparison/nemenyi.csv create mode 100644 clustering_datasets/Clustering.ipynb create mode 100644 clustering_datasets/Data.ipynb create mode 100644 clustering_datasets/Makefile create mode 100644 clustering_datasets/Pipfile create mode 100644 clustering_datasets/Pipfile.lock create mode 100644 clustering_datasets/README.md create mode 100644 clustering_datasets/clusterargparser.py create mode 100644 clustering_datasets/cmc.csv create mode 100644 clustering_datasets/glass.csv create mode 100644 clustering_datasets/run_cluster.py create mode 100644 clustering_datasets/run_cluster_kmeans.py diff --git a/CEC/.idea/CEC.iml b/CEC/.idea/CEC.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/CEC/.idea/CEC.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/CEC/.idea/inspectionProfiles/profiles_settings.xml b/CEC/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/CEC/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/CEC/.idea/misc.xml b/CEC/.idea/misc.xml new file mode 100644 index 0000000..23715ca --- /dev/null +++ b/CEC/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CEC/.idea/modules.xml b/CEC/.idea/modules.xml new file mode 100644 index 0000000..c924456 --- /dev/null +++ b/CEC/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/CEC/.idea/vcs.xml b/CEC/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/CEC/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CEC/.idea/workspace.xml b/CEC/.idea/workspace.xml new file mode 100644 index 0000000..632035e --- /dev/null +++ b/CEC/.idea/workspace.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + 1568040396942 + + + + + + + \ No newline at end of file diff --git a/CEC/Makefile b/CEC/Makefile new file mode 100644 index 0000000..69ce9ab --- /dev/null +++ b/CEC/Makefile @@ -0,0 +1,6 @@ +install: Pipfile + pipenv install + +clean: Pipfile.lock + pipenv --rm + rm Pipfile.lock diff --git a/CEC/Pipfile b/CEC/Pipfile new file mode 100644 index 0000000..39b0b1c --- /dev/null +++ b/CEC/Pipfile @@ -0,0 +1,19 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[requires] +python_version = '3.7' + +[packages] +pipfile = "*" +numpy = ">=1.16.3" +scipy = ">=1.2.1" +matplotlib = ">=3.0.3" +pandas = ">=0.24.2" +pydot = ">=1.4.1" +graphviz = ">=0.10.1" +Cython = ">=0.29.7" +scikit-learn = ">=0.21.3" +niapy = {path = "./../../NiaPy/dist/NiaPy-feature-cp37-cp37m-linux_x86_64.whl"} diff --git a/CEC/cec2005/Makefile b/CEC/cec2005/Makefile index 80f1ed1..d1e17fd 100644 --- a/CEC/cec2005/Makefile +++ b/CEC/cec2005/Makefile @@ -2,8 +2,7 @@ PYTHON=python PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info.major, sys.version_info.minor, sys.version_info.micro))") build: cec5_test_func.cpp cec5_test_func.h data.h cec2005.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-3.7/cec2005.cpython-37m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2005.cpp diff --git a/CEC/cec2008/Makefile b/CEC/cec2008/Makefile index 6aa1fb1..4d4c15c 100644 --- a/CEC/cec2008/Makefile +++ b/CEC/cec2008/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec8_test_func.cpp cec8_test_func.h data.h cec2008.pyx - $(PYTHON) setup.py build_ext -i - 8cp build/lib.linux-x86_64-$(PVERSION)/cec2008.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2008.cpp diff --git a/CEC/cec2008/setup.py b/CEC/cec2008/setup.py index eeb2a35..0118a50 100644 --- a/CEC/cec2008/setup.py +++ b/CEC/cec2008/setup.py @@ -4,7 +4,7 @@ import numpy extensions = [ - Extension('cec2016', ['cec2016.pyx', 'cec16_test_func.cpp'], + Extension('cec2008', ['cec2008.pyx', 'cec8_test_func.cpp'], include_dirs=[numpy.get_include()], extra_compile_args=['-std=c++17'], language='c++' diff --git a/CEC/cec2013/Makefile b/CEC/cec2013/Makefile index 1e18ad6..347a131 100644 --- a/CEC/cec2013/Makefile +++ b/CEC/cec2013/Makefile @@ -3,8 +3,7 @@ PVERSION=--python $(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.vers PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec13_test_func.cpp cec13_test_func.h cec2013.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2013.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2013.cpp diff --git a/CEC/cec2014/Makefile b/CEC/cec2014/Makefile index f7cd263..0a85a22 100644 --- a/CEC/cec2014/Makefile +++ b/CEC/cec2014/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec14_test_func.cpp cec14_test_func.h cec2014.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2014.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2014.cpp diff --git a/CEC/cec2015/Makefile b/CEC/cec2015/Makefile index fd4a34f..cb40b37 100644 --- a/CEC/cec2015/Makefile +++ b/CEC/cec2015/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec15_test_func.cpp cec15_test_func.h - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2015.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2015.cpp diff --git a/CEC/cec2016/Makefile b/CEC/cec2016/Makefile index 3ebe114..59d069f 100644 --- a/CEC/cec2016/Makefile +++ b/CEC/cec2016/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec16_test_func.cpp cec16_test_func.h cec2016.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2016.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2016.cpp diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index 90d96aa..c926e1c 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec17_test_func.cpp cec17_test_func.h cec2017.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2017.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2017.cpp diff --git a/CEC/cec2018/Makefile b/CEC/cec2018/Makefile index a272e56..2291479 100644 --- a/CEC/cec2018/Makefile +++ b/CEC/cec2018/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec18_test_func.cpp cec18_test_func.h cec2018.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2018.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2018.cpp diff --git a/CEC/cec2019/Makefile b/CEC/cec2019/Makefile index 1ae228b..2fb0e83 100644 --- a/CEC/cec2019/Makefile +++ b/CEC/cec2019/Makefile @@ -3,8 +3,7 @@ PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info. PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") build: cec19_test_func.cpp cec19_test_func.h cec2019.pyx - $(PYTHON) setup.py build_ext -i - cp build/lib.linux-x86_64-$(PVERSION)/cec2018.cpython-$(PVERSIONS)m-x86_64-linux-gnu.so . + $(PYTHON) setup.py build_ext --inplace clean: rm cec2019.cpp diff --git a/CEC/cec2019/cec19_test_func.cpp b/CEC/cec2019/cec19_test_func.cpp index 9cb61e6..148fe3b 100644 --- a/CEC/cec2019/cec19_test_func.cpp +++ b/CEC/cec2019/cec19_test_func.cpp @@ -17,6 +17,9 @@ #include "cec19_test_func.h" +double *OShift, *M, *y, *z, *x_bound; +int ini_flag = 0, n_flag, func_flag, *SS; + //void cec19_test_func(double *, double *,int,int,int); /* @@ -91,7 +94,7 @@ void cec19_test_func(double *x, double *f, int nx, int mx, int func_num) { /* Load Matrix M*/ if (func_num > 3) { - sprintf(FileName, "input_data/M_%d_D%d.txt", func_num,nx); + sprintf(FileName, "cec2019/input_data/M_%d_D%d.txt", func_num,nx); fpt = fopen(FileName,"r"); if (fpt==NULL) { @@ -111,7 +114,7 @@ void cec19_test_func(double *x, double *f, int nx, int mx, int func_num) { /* Load shift_data */ if (func_num > 3) { - sprintf(FileName, "input_data/shift_data_%d.txt", func_num); + sprintf(FileName, "cec2019/input_data/shift_data_%d.txt", func_num); fpt = fopen(FileName,"r"); if (fpt==NULL) { @@ -340,7 +343,7 @@ void schwefel_func (double *x, double *f, int nx, double *Os,double *Mr,int s_fl -void escaffer6_func (double *x, double *f, int nx, double *Os,double *Mr,int s_flag, int r_flag) /* Expanded Scaffer¡¯s F6 */ +void escaffer6_func (double *x, double *f, int nx, double *Os,double *Mr,int s_flag, int r_flag) /* Expanded Scaffer��s F6 */ { int i; double temp1, temp2; diff --git a/CEC/cec2019/cec19_test_func.h b/CEC/cec2019/cec19_test_func.h index a976e9c..1ebd873 100644 --- a/CEC/cec2019/cec19_test_func.h +++ b/CEC/cec2019/cec19_test_func.h @@ -6,10 +6,6 @@ #define E 2.7182818284590452353602874713526625 #define PI 3.1415926535897932384626433832795029 -extern double *OShift,*M,*y,*z,*x_bound; -//extern int ini_flag=0,n_flag,func_flag,*SS; -extern int ini_flag,n_flag,func_flag,*SS; - double runtest(double*, int, int); void cec19_test_func(double*, double*, int, int, int); void schaffer_F7_func (double*, double*, int, double*, double*, int, int); diff --git a/CEC/cecargparser.py b/CEC/cecargparser.py index f3fdac7..5c12f9a 100644 --- a/CEC/cecargparser.py +++ b/CEC/cecargparser.py @@ -1,7 +1,7 @@ import sys from NiaPy.util import MakeArgParser -ccecs = [8, 13, 14, 15, 16, 17, 18] +ccecs = [8, 13, 14, 15, 16, 17, 18, 19] creduces = [0.01, 0.02, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0] def positiveInt(x): return abs(int(x)) @@ -16,7 +16,7 @@ def MakeArgParserCEC(): parser.add_argument('-d', '--dim', dest='D', default=10, type=positiveInt) parser.add_argument('-nr', '--nFESreduc', dest='reduc', default=creduces[-1], choices=creduces, type=float) parser.add_argument('-rn', '--rnum', dest='runs', default=51, type=positiveInt) - parser.add_argument('-o', '--wout', dest='wout', default=False, type=str2bool) + parser.add_argument('-o', '--wout', dest='wout', default=True, type=str2bool) return parser def getArgs(argv): diff --git a/CEC/run_cec.py b/CEC/run_cec.py index 79bba1d..2f377b1 100644 --- a/CEC/run_cec.py +++ b/CEC/run_cec.py @@ -3,9 +3,10 @@ import random import logging -from numpy import asarray, savetxt, set_printoptions +import pandas as pd +from numpy import asarray, savetxt, set_printoptions, inf from NiaPy import Runner -from NiaPy.util import Task, TaskConvPrint, TaskConvPlot, OptimizationType +from NiaPy.util import StoppingTask, TaskConvPrint, TaskConvPlot, TaskConvSave, OptimizationType from cecargparser import getDictArgs logging.basicConfig() @@ -23,20 +24,18 @@ def __init__(self, run_fun, Lower=-100, Upper=100, fnum=1): self.fnum = fnum self.run_fun = run_fun - def function(self): - def evaluate(D, sol): return self.run_fun(asarray(sol), self.fnum) - return evaluate + def function(self): return lambda x: self.run_fun(asarray(x), self.fnum) class MaxMB(MinMB): def function(self): f = MinMB.function(self) - def e(D, sol): return -f(D, sol) - return e + return lambda x: -f(x) cdimsOne = [2, 10, 30, 50] cdimsTwo = [2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] cdimsThree = [10, 30, 50, 100] cdimsFour = [10, 30] +cdimsFive = [9, 10, 16, 18] def getCecBench(cec, d): if cec == 5: @@ -73,20 +72,21 @@ def getCecBench(cec, d): elif cec == 19: sys.path.append('cec2019') from cec2019 import run_fun - if d not in cdimsThree: raise Exception('Dimension sould be in %s' % (cdimsThree)) + if d not in cdimsFive: raise Exception('Dimension sould be in %s' % (cdimsThree)) return run_fun def getMaxFES(cec): if cec == 8: return 5000 - if cec in [5, 13, 14, 15, 17, 18]: return 10000 + elif cec in [5, 13, 14, 15, 17, 18]: return 10000 + elif cec == 19: return inf else: return 10000 def simple_example(alg, cec, fnum=1, runs=10, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=False, sr=[-100, 100], **kwu): bests, func = list(), getCecBench(cec, D) for i in range(runs): - task = Task(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) - algo = alg(seed=seed[i % len(seed)], task=task) - best = algo.run() + task = StoppingTask(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) + algo = alg(seed=seed[i % len(seed)]) + best = algo.run(task) logger.info('%s %s' % (best[0], best[1])) bests.append(best) if wout: @@ -94,18 +94,38 @@ def simple_example(alg, cec, fnum=1, runs=10, D=10, nFES=50000, nGEN=5000, seed= savetxt('%s_%d_%d_p' % (algo.Name[-1], fnum, D), bpos) savetxt('%s_%d_%d_v' % (algo.Name[-1], fnum, D), bval) -def logging_example(alg, cec, fnum=1, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=False, sr=[-100, 100], **kwu): +def logging_example(alg, cec, fnum=1, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=False, sr=[-8192, 8192], **kwu): func = getCecBench(cec, D) task = TaskConvPrint(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) - algo = alg(seed=seed[0], task=task) - best = algo.run() + algo = alg(seed=seed[0], NP=100, vMin=-16000, vMax=16000, w=0.5) + best = algo.run(task) logger.info('%s %s' % (best[0], best[1])) +def save_example(alg, cec, fnum=1, runs=10, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=True, sr=[-100, 100], **kwu): + bests, conv_it, conv_f, func = list(), list(), list(), getCecBench(cec, D) + for i in range(runs): + task = TaskConvSave(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) + algo = alg(seed=seed[i % len(seed)]) + best = algo.run(task) + logger.info('%s %s' % (best[0], best[1])) + bests.append(best) + conv_it.append(task.evals) + conv_f.append(task.x_f_vals) + if wout: + bpos, bval = asarray([x[0] for x in bests]), asarray([x[1] for x in bests]) + savetxt('%s_%d_%d_p' % (algo.Name[-1], fnum, D), bpos) + savetxt('%s_%d_%d_v' % (algo.Name[-1], fnum, D), bval) + inds = [] + for i in range(runs): inds.append('evals'), inds.append('funvl') + data = [] + for i in range(runs): data.append(conv_it[i]), data.append(conv_f[i]) + pd.DataFrame(data, index=inds).T.to_csv('%s_%d_%d.csv' % (algo.Name[-1], fnum, D), sep=',', index=False) + def plot_example(alg, cec, fnum=1, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=False, sr=[-100, 100], **kwu): func = getCecBench(cec, D) task = TaskConvPlot(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) - algo = alg(seed=seed[0], task=task) - best = algo.run() + algo = alg(seed=seed[0]) + best = algo.run(task) logger.info('%s %s' % (best[0], best[1])) input('Press [enter] to continue') @@ -116,12 +136,14 @@ def getOptType(otype): if __name__ == '__main__': pargs = getDictArgs(sys.argv[1:]) - pargs['nFES'] = round(pargs['D'] * getMaxFES(pargs['cec']) * pargs['reduc']) + fes = getMaxFES(pargs['cec']) if not inf else sys.maxsize + pargs['nFES'] = round(pargs['D'] * fes * pargs['reduc']) algo = Runner.getAlgorithm(pargs['algo']) optFunc = getOptType(pargs['optType']) if not pargs['runType']: simple_example(algo, optFunc=optFunc, **pargs) elif pargs['runType'] == 'log': logging_example(algo, optFunc=optFunc, **pargs) elif pargs['runType'] == 'plot': plot_example(algo, optFunc=optFunc, **pargs) + elif pargs['runType'] == 'save': save_example(algo, optFunc=optFunc, **pargs) else: simple_example(algo, optFunc=optFunc, **pargs) # vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3 diff --git a/CECC/Makefile b/CECC/Makefile new file mode 100644 index 0000000..f39cb5c --- /dev/null +++ b/CECC/Makefile @@ -0,0 +1,5 @@ +install: Pipfile + pipenv install + +clean: Pipfile.lock + pipenv --rm diff --git a/CECC/Pipfile b/CECC/Pipfile new file mode 100644 index 0000000..c72915b --- /dev/null +++ b/CECC/Pipfile @@ -0,0 +1,14 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +pipfile = "*" +numpy = ">=1.16.3" +scipy = ">=1.2.1" +matplotlib = ">=3.0.3" +pandas = ">=0.24.2" +pydot = ">=1.4.1" +graphviz = ">=0.10.1" +Cython = ">=0.29.7" diff --git a/alogorithm_statistical_comparison/Makefile b/alogorithm_statistical_comparison/Makefile new file mode 100644 index 0000000..688f3ff --- /dev/null +++ b/alogorithm_statistical_comparison/Makefile @@ -0,0 +1,33 @@ +kernelName:=rosispy + +install: Pipfile + pipenv install + pipenv run jupyter labextension install @jupyter-widgets/jupyterlab-manager + pipenv run jupyter labextension install jupyter-matplotlib + pipenv run jupyter labextension install @jupyterlab/toc + pipenv run jupyter labextension install @oriolmirosa/jupyterlab_materialdarker + pipenv run jt -t onedork -lineh 110 -nfs 10 -fs 10 -tfs 10 -cellw 80% + +kernel: install + pipenv run python -m ipykernel install --user --name=$(kernelName) + +rKernel: + jupyter kernelspec remove -f $(kernelName) + +run: + pipenv run jupyter lab + +lab: + pipenv run jupyter lab + +notebook: + pipenv run jupyter notebook + +console: + pipenv run ipython + +clean: Pipfile.lock + pipenv --rm + rm Pipfile.lock + +all: install kernel run diff --git a/alogorithm_statistical_comparison/Pipfile b/alogorithm_statistical_comparison/Pipfile new file mode 100644 index 0000000..6f25b60 --- /dev/null +++ b/alogorithm_statistical_comparison/Pipfile @@ -0,0 +1,18 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[requires] +python_version = '3.7' + +[packages] +pipfile = "*" +jupyterlab = ">=0.35.5" +ipykernel = ">=5.1.0" +numpy = ">=1.16.3" +scipy = ">=1.2.1" +matplotlib = ">=3.0.3" +pandas = ">=0.24.2" +ipympl = ">=0.2.1" +jupyterthemes = ">=0.20.0" diff --git a/alogorithm_statistical_comparison/README.md b/alogorithm_statistical_comparison/README.md new file mode 100644 index 0000000..d90c9f4 --- /dev/null +++ b/alogorithm_statistical_comparison/README.md @@ -0,0 +1,6 @@ +# Install and run +1. Install [Nodejs](https://nodejs.org/) +2. Install [NPM](https://www.npmjs.com/) +3. Run `make install` for creating environmen +4. Install [NiaPy](https://github.com/NiaOrg/NiaPy) onto created python environment +5. Run `make run` for runing the jupyter lab diff --git a/alogorithm_statistical_comparison/data_analyze.ipynb b/alogorithm_statistical_comparison/data_analyze.ipynb new file mode 100644 index 0000000..fc5cbf0 --- /dev/null +++ b/alogorithm_statistical_comparison/data_analyze.ipynb @@ -0,0 +1,290 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "from typing import List, Tuple\n", + "import pandas as pd\n", + "pd.set_option('display.max_columns', 100)\n", + "pd.set_option('display.max_rows', 100)\n", + "import numpy as np\n", + "np.set_printoptions(threshold=sys.maxsize)\n", + "%matplotlib widget\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.ticker import (AutoMinorLocator, MultipleLocator)\n", + "import scipy.stats as stats" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Nalaganje podatkov" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pso_df = pd.DataFrame(np.asarray([np.loadtxt('PSO/PSO_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "mkev3_df = pd.DataFrame(np.asarray([np.loadtxt('MKEv3/MKEv3_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "nmm_df = pd.DataFrame(np.asarray([np.loadtxt('NMM/NMM_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "es11_df = pd.DataFrame(np.asarray([np.loadtxt('ES(1+1)/ES(1+1)_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "de_df = pd.DataFrame(np.asarray([np.loadtxt('DE/DE_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "jde_df = pd.DataFrame(np.asarray([np.loadtxt('jDE/jDE_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "aco_df = pd.DataFrame(np.asarray([np.loadtxt('ACO/ACO_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)\n", + "cso_df = pd.DataFrame(np.asarray([np.loadtxt('CSO/CSO_%d_10_v' % fnum) - fnum * 100 for fnum in range(1, 31)]).T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Predalava podtkov" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uporaba povpreÄja" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "de_data = de_df.describe().iloc[1, :].values.flatten()\n", + "jde_data = jde_df.describe().iloc[1, :].values.flatten()\n", + "pso_data = pso_df.describe().iloc[1, :].values.flatten()\n", + "mkev3_data = mkev3_df.describe().iloc[1, :].values.flatten()\n", + "nmm_data = nmm_df.describe().iloc[1, :].values.flatten()\n", + "es11_data = es11_df.describe().iloc[1, :].values.flatten()\n", + "aco_data = aco_df.describe().iloc[1, :].values.flatten()\n", + "cso_data = cso_df.describe().iloc[1, :].values.flatten()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uporaba mediane" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "de_data = de_df.describe().iloc[5, :].values.flatten()\n", + "jde_data = jde_df.describe().iloc[5, :].values.flatten()\n", + "pso_data = pso_df.describe().iloc[5, :].values.flatten()\n", + "mkev3_data = mkev3_df.describe().iloc[5, :].values.flatten()\n", + "nmm_data = nmm_df.describe().iloc[5, :].values.flatten()\n", + "es11_data = es11_df.describe().iloc[5, :].values.flatten()\n", + "aco_data = aco_df.describe().iloc[5, :].values.flatten()\n", + "cso_data = cso_df.describe().iloc[5, :].values.flatten()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uporaba vseh podatkov" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "de_data = de_df.values.T.flatten()\n", + "jde_data = jde_df.values.T.flatten()\n", + "pso_data = pso_df.values.T.flatten()\n", + "mkev3_data = mkev3_df.values.T.flatten()\n", + "nmm_data = nmm_df.values.T.flatten()\n", + "es11_data = es11_df.values.T.flatten()\n", + "aco_data = aco_df.values.T.flatten()\n", + "cso_data = cso_df.values.T.flatten()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uporaba mediane, povpreÄja, standardnega odklona, maksimalne in minimalne vrednosti" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "de_data = de_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "jde_data = jde_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "pso_data = pso_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "mkev3_data = mkev3_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "nmm_data = nmm_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "es11_data = es11_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "aco_data = aco_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()\n", + "cso_data = cso_df.describe().iloc[[1, 2, 3, 5, 7], :].T.values.flatten()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## KonÄan priprava podatkov" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# algs_data = [de_data, jde_data, pso_data, mkev3_data, nmm_data, es11_data, aco_data, cso_data]\n", + "# algs_labels = ['DE', 'jDE', 'PSO', 'MKEv3', 'NMM', 'ES(1+1)', 'ACO', 'CSO']\n", + "algs_data = [pso_data, mkev3_data, nmm_data, es11_data, aco_data, cso_data]\n", + "algs_labels = ['PSO', 'MKEv3', 'NMM', 'ES(1+1)', 'ACO', 'CSO']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# StatistiÄni testi" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Friedman test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Kriticne razdalje za friedman test\n", + "$$\n", + "CD = q_{\\alpha} \\sqrt{\\frac{k(k + 1)}{6N}}\n", + "$$\n", + ", kjer:\n", + "* $k \\mapsto$ Stevilo algoritmov\n", + "* $N \\mapsto$ Stevilo problemov\n", + "* $q_{\\alpha} \\mapsto$ Kriticna vrednost" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def wilcoxonSignedRanks(a:np.ndarray, b:np.ndarray) -> Tuple[float, float, float]:\n", + " r\"\"\"Get rank values from signed wilcoxon test.\n", + " \n", + " Args:\n", + "\t a: First data.\n", + "\t b: Second data.\n", + "\t \n", + " Returns:\n", + "\t 1. Positive ranks.\n", + "\t 2. Negative ranks.\n", + "\t 3. T value\n", + " \"\"\"\n", + " y = a - b\n", + " y_diff = y[y != 0]\n", + " r = stats.rankdata(np.abs(y_diff))\n", + " r_all = np.sum(r) / 2\n", + " r_p, r_n = r_all + np.sum(r[np.where(y_diff > 0)]) , r_all + np.sum(r[np.where(y_diff < 0)])\n", + " return r_p, r_n, np.min([r_p, r_n])\n", + "\n", + "def friedmanRanks(*arrs:List[np.ndarray]) -> np.array:\n", + " r = np.asarray([stats.rankdata([arrs[j][i] for j in range(len(arrs))]) for i in range(len(arrs[0]))])\n", + " return np.asarray([np.sum(r[:, i]) / len(arrs[0]) for i in range(len(arrs))])\n", + "\n", + "def cd(alpha:float, k:float, n:float) -> float:\n", + " r\"\"\"Get critial distance for friedman test.\n", + " \n", + " Args:\n", + " alpha: Fold value.\n", + " k: Number of algorithms.\n", + " n: Number of algorithm results.\n", + " \"\"\"\n", + " nemenyi_df = pd.read_csv('nemenyi.csv')\n", + " q_a = nemenyi_df['%.2f' % alpha][nemenyi_df['k'] == k].values\n", + " return q_a[0] * np.sqrt((k * (k + 1)) / (6 * n))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cd_h = cd(0.01, len(algs_data), len(algs_data[0])) / 2.0\n", + "r = friedmanRanks(*algs_data)\n", + "f, a = plt.subplots(figsize=(6, 4))\n", + "a.boxplot([(e - cd_h, e, e + cd_h) for e in r], labels=algs_labels, widths=.15)\n", + "a.xaxis.set_minor_locator(AutoMinorLocator(7)); a.yaxis.set_minor_locator(AutoMinorLocator(7))\n", + "a.grid(which='both'); a.grid(which='minor', alpha=0.2, linestyle=':'); a.grid(which='major', alpha=0.5, linestyle='--')\n", + "a.set_ylabel('Average rank'); a.set_xlabel('Algorithm')\n", + "f.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pw_data = pd.DataFrame(np.asarray([[stats.wilcoxon(algs_data[j], algs_data[i])[1] if j != i else 1 for i in range(len(algs_data))] for j in range(len(algs_data))]), index=algs_labels, columns=algs_labels)\n", + "pw_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pw_data.to_csv('res_data.csv')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/alogorithm_statistical_comparison/nemenyi.csv b/alogorithm_statistical_comparison/nemenyi.csv new file mode 100644 index 0000000..61a9750 --- /dev/null +++ b/alogorithm_statistical_comparison/nemenyi.csv @@ -0,0 +1,100 @@ +k,0.01,0.05,0.10 +2,2.575829491,1.959964233,1.64485341 +3,2.913494192,2.343700476,2.05229258 +4,3.113250443,2.569032073,2.291341341 +5,3.254685942,2.727774717,2.459516082 +6,3.363740192,2.849705382,2.588520643 +7,3.452212685,2.948319908,2.692731919 +8,3.526470918,3.030878867,2.779883537 +9,3.590338924,3.10173026,2.854606339 +10,3.646291577,3.16368342,2.919888558 +11,3.696020982,3.218653901,2.977768077 +12,3.740733465,3.268003591,3.029694463 +13,3.781318566,3.312738701,3.076733328 +14,3.818450865,3.353617959,3.1196936 +15,3.852654327,3.391230382,3.159198949 +16,3.884343317,3.426041249,3.195743642 +17,3.913850176,3.458424619,3.229723658 +18,3.941446432,3.488684546,3.261461439 +19,3.967356946,3.517072762,3.29122427 +20,3.991769808,3.543799277,3.31923277 +21,4.014841995,3.569040161,3.345675735 +22,4.036709272,3.592946027,3.370711558 +23,4.057487605,3.615646276,3.39447671 +24,4.077275281,3.637252631,3.417089277 +25,4.096160689,3.657860551,3.438651085 +26,4.114219489,3.677556303,3.459252641 +27,4.131518856,3.696413427,3.478971727 +28,4.148118188,3.71449839,3.497877641 +29,4.164069103,3.731869175,3.516032608 +30,4.179419684,3.748578108,3.533492489 +31,4.194212358,3.764671858,3.550305367 +32,4.208483894,3.780192852,3.566516497 +33,4.222268941,3.795178566,3.58216477 +34,4.235598611,3.809663649,3.597287662 +35,4.248501188,3.823679212,3.611916995 +36,4.261002129,3.837254248,3.626083879 +37,4.273124768,3.850413505,3.639814478 +38,4.284891024,3.863181025,3.653134249 +39,4.296319991,3.875578729,3.666065818 +40,4.307430053,3.887627121,3.678630398 +41,4.31823818,3.899344587,3.690847789 +42,4.328759929,3.910747391,3.702736375 +43,4.339009442,3.921852503,3.714311713 +44,4.348999447,3.932673359,3.725589359 +45,4.358743378,3.943224099,3.736584163 +46,4.368251843,3.953518159,3.747309558 +47,4.377536155,3.963566147,3.757777567 +48,4.386605506,3.973379375,3.767999503 +49,4.395470504,3.98296845,3.777987386 +50,4.404138926,3.992343271,3.787749702 +51,4.412619258,4.001512325,3.797297058 +52,4.42091857,4.010484803,3.806637939 +53,4.429046055,4.019267776,3.815781537 +54,4.437006664,4.02786973,3.824734923 +55,4.444807466,4.036297029,3.833505168 +56,4.452454825,4.044556036,3.842100758 +57,4.4599544,4.05265453,3.850526642 +58,4.467311139,4.060596753,3.858790599 +59,4.474529992,4.068389777,3.866897579 +60,4.481617323,4.076037844,3.874853237 +61,4.488575961,4.083547318,3.882663231 +62,4.495411562,4.090921028,3.890333219 +63,4.50212837,4.098166044,3.897866734 +64,4.508729212,4.105284488,3.905268728 +65,4.51521833,4.112282016,3.912543443 +66,4.521599969,4.119161458,3.919695828 +67,4.527876956,4.125927056,3.926729419 +68,4.53405212,4.132582345,3.933647045 +69,4.540129702,4.139131568,3.940452947 +70,4.546111826,4.145576139,3.94715137 +71,4.552002025,4.151921008,3.953744433 +72,4.557802422,4.158168297,3.960235674 +73,4.563515138,4.164320833,3.966628626 +74,4.569143708,4.170380738,3.972924705 +75,4.574690253,4.176352255,3.979128153 +76,4.580156896,4.182236797,3.985240384 +77,4.585545757,4.188036487,3.991264934 +78,4.590859664,4.19375486,3.997203923 +79,4.596099325,4.199392622,4.003058768 +80,4.601267569,4.204952603,4.008833001 +81,4.606365809,4.21043763,4.01452804 +82,4.611396874,4.215848411,4.02014671 +83,4.616481678,4.221187067,4.02568972 +84,4.621261013,4.22645572,4.031159898 +85,4.626098331,4.23165649,4.036558658 +86,4.63087413,4.236790793,4.041887415 +87,4.635590532,4.241859334,4.047148997 +88,4.64024683,4.246864943,4.052344817 +89,4.644847267,4.251809034,4.057475584 +90,4.649391842,4.256692313,4.062543418 +91,4.65388197,4.261516196,4.067549734 +92,4.658319065,4.266282802,4.072495239 +93,4.662703834,4.270992841,4.077382761 +94,4.667037692,4.275648432,4.082213008 +95,4.671322759,4.280249575,4.086986686 +96,4.675558329,4.284798393,4.091705209 +97,4.679746522,4.289294885,4.0963707 +98,4.683888754,4.29374188,4.100983157 +99,4.687985023,4.298139377,4.105544703 +100,4.692036745,4.302488791,4.110055337 diff --git a/clustering_datasets/Clustering.ipynb b/clustering_datasets/Clustering.ipynb new file mode 100644 index 0000000..f1c59c7 --- /dev/null +++ b/clustering_datasets/Clustering.ipynb @@ -0,0 +1,504 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "from typing import Dict, Tuple, Any\n", + "# Librarys\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.datasets import load_iris, load_wine, load_breast_cancer, make_blobs\n", + "from sklearn.cluster import KMeans\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from sklearn.model_selection import train_test_split\n", + "%matplotlib widget\n", + "import matplotlib.pyplot as plt\n", + "# Theme for matplotlib and \n", + "from jupyterthemes import jtplot\n", + "jtplot.style()\n", + "# NiaPy\n", + "from NiaPy.algorithms.basic import ParticleSwarmOptimization, ComprehensiveLearningParticleSwarmOptimizer, OppositionVelocityClampingParticleSwarmOptimization, DifferentialEvolution, BatAlgorithm, BlackHole\n", + "from NiaPy.algorithms.modified import SelfAdaptiveDifferentialEvolution\n", + "from NiaPy.benchmarks import Clustering, ClusteringMin, ClusteringMinPenalty, ClusteringClassification\n", + "from NiaPy.util import StoppingTask, groupdatabylabel, classifie, clusters2labels\n", + "# Output options\n", + "np.set_printoptions(threshold=sys.maxsize)\n", + "np.set_printoptions(formatter={'float': '{: 0.3f}'.format})\n", + "pd.set_option('display.max_columns', 100)\n", + "pd.set_option('display.max_rows', 100)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def grupdata(data: np.ndarray, C: np.ndarray) -> np.ndarray:\n", + " G = [[] for _ in range(C.shape[0])]\n", + " for e in data: G[np.argmin([np.sqrt(np.sum((e - C[i]) ** 2)) for i in range(C.shape[0])])].append(e)\n", + " return np.asarray([np.asarray(e) for e in G])\n", + "\n", + "def labeltransform(l): return LabelEncoder().fit(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc-hr-collapsed": true + }, + "source": [ + "# Algorithms" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## KMeans" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def kmeans(data, C, benchmark, nFES):\n", + " print ('KMeans')\n", + " kmeans = KMeans(n_clusters=noc, init='random', n_init=100, max_iter=nFES, random_state=None, algorithm='full').fit(data)\n", + " C['km'] = kmeans.cluster_centers_\n", + " print('Min val: %f' % benchmark.function()(C['km'].flatten()))\n", + " print (C['km'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Differetial evolution clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def de(data, C, benchmark, nFES):\n", + " algo = DifferentialEvolution()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['de'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['de'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Self Adaptive Differential Evolution clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def jde(data, C, benchmark, nFES):\n", + " algo = SelfAdaptiveDifferentialEvolution()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['jde'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['jde'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Particle Swarm Optimization clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def pso(data, C, benchmark, nFES):\n", + " algo = ParticleSwarmOptimization()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['pso'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['pso'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comprehensive Learning Particle Swarm Optimizer clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def clpso(data, C, benchmark, nFES):\n", + " algo = ComprehensiveLearningParticleSwarmOptimizer()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['clpso'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['clpso'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opposition Velocity Clamping Particle Swarm Optimization clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def ovcpso(data, C, benchmark, nFES):\n", + " algo = OppositionVelocityClampingParticleSwarmOptimization()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['ovcpso'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['ovcpso'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bat Algorithm clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def ba(data, C, benchmark, nFES):\n", + " algo = BatAlgorithm()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['ba'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['ba'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Black Hole clustering" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def bh(data, C, benchmark, nFES):\n", + " algo = BlackHole()\n", + " print (algo.Name[0])\n", + " task = StoppingTask(D=noc * len(data[0]), nFES=nFES, benchmark=benchmark)\n", + " res = algo.runTask(task)\n", + " print('Min val: %f' % res[1])\n", + " C['bh'] = res[0].reshape((noc, len(data[0])))\n", + " print (C['bh'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data preparation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generated data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "nof, noc = 9, 4\n", + "data, labels = make_blobs(n_samples=500, n_features=nof, centers=noc, random_state=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Iris" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data, labels = load_iris(True)\n", + "noc = len(np.unique(labels))\n", + "C_best = {\n", + " 'report_bh': np.asarray([[6.73305, 3.06805, 5.62938, 2.10908], [5.01186, 3.40303, 1.47143, 0.23532], [5.93229, 2.79775, 4.41857, 1.41608]]),\n", + " 'bh': np.asarray([[5.650, 2.878, 5.605, 1.298], [5.048, 3.426, 1.347, 0.397], [6.082, 2.698, 4.174, 0.834]]),\n", + " 'clpso': np.asarray([[5.793, 3.636, 1.792, 0.813], [5.146, 2.828, 4.051, 0.539], [4.603, 2.588, 5.491, 1.561]])\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Cancer Wisconsin Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data, labels = load_breast_cancer(True)\n", + "noc = len(np.unique(labels))\n", + "C_best = {\n", + " 'jde': np.asarray([[17.654, 9.710, 172.041, 1157.277, 0.053, 0.303, 0.000, 0.184, 0.177, 0.075, 1.617, 1.369, 0.847, 44.476, 0.010, 0.042, 0.318, 0.000, 0.021, 0.001, 14.003, 15.286, 92.127, 1787.341, 0.201, 0.265, 0.159, 0.191, 0.289, 0.206], [6.981, 11.369, 43.790, 1430.514, 0.130, 0.168, 0.315, 0.201, 0.254, 0.091, 1.317, 3.862, 9.089, 138.556, 0.010, 0.129, 0.053, 0.021, 0.062, 0.025, 7.930, 49.540, 190.337, 185.200, 0.160, 0.653, 0.625, 0.000, 0.247, 0.146]]),\n", + " 'bh': np.asarray([[14.366, 23.217, 71.421, 1229.990, 0.123, 0.237, 0.140, 0.109, 0.242, 0.076, 0.890, 2.616, 6.428, 107.904, 0.021, 0.063, 0.266, 0.017, 0.049, 0.009, 19.898, 30.594, 176.826, 1727.838, 0.117, 0.596, 0.755, 0.101, 0.538, 0.144], [13.153, 25.890, 153.234, 1569.438, 0.109, 0.115, 0.140, 0.084, 0.166, 0.081, 2.177, 3.526, 7.352, 338.804, 0.014, 0.054, 0.280, 0.041, 0.058, 0.015, 10.863, 41.038, 138.735, 1286.425, 0.113, 0.304, 0.565, 0.175, 0.297, 0.099]])\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Wine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data, labels = load_wine(True)\n", + "noc = len(np.unique(labels))\n", + "C_best = {\n", + " 'report_bh': np.asarray([[12.87096, 2.11606, 2.39431, 19.46178, 98.84497, 2.03580, 1.44765, 0.43320, 1.49193, 5.36444, 0.88652, 2.12046, 686.93205], [12.63469, 2.44139, 2.37083, 21.26462, 92.39332, 2.12789, 1.58430, 0.40206, 1.13521, 4.83774, 0.81497, 2.71348, 463.69590], [13.31401, 2.26752, 2.56857, 17.34232, 105.03031, 2.82361, 3.24277, 0.28947, 2.67352, 5.20622, 1.03286, 3.38781, 1137.44167]]),\n", + " 'jde': np.asarray([[14.472, 1.100, 2.389, 21.122, 121.500, 2.752, 3.342, 0.130, 2.343, 5.531, 1.104, 1.970, 1066.214], [14.546, 4.664, 2.626, 14.452, 156.808, 2.860, 4.975, 0.288, 3.475, 3.524, 1.185, 2.614, 313.572], [14.450, 5.324, 2.324, 10.798, 115.543, 1.063, 1.835, 0.236, 2.812, 8.268, 1.657, 3.978, 731.918]])\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Glass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('glass.csv')\n", + "data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values\n", + "noc = len(np.unique(labels))\n", + "C_best = {\n", + " 'report_bh': np.asarray([[1.51474, 14.59500, 0.06789, 2.25305, 73.29150, 0.00937, 8.71261, 1.01385, -0.01161], [1.52117, 13.79589, 3.55131, 0.95428, 71.84335, 0.19175, 9.54099, 0.08156, 0.00710], [1.51745, 13.31326, 3.59522, 1.42358, 72.67659, 0.57686, 8.20015, -0.00741, 0.03106], [1.51326, 13.01074, -0.00358, 3.02527, 70.66960, 6.22227, 6.94351, -0.00710, -0.00041], [1.51743, 12.85016, 3.45851, 1.30894, 73.02754, 0.60704, 8.58511, 0.02745, 0.05789], [1.52095, 13.02689, 0.26652, 1.51925, 72.75985, 0.35290, 11.95589, -0.04668, 0.03072]]),\n", + " 'bh': np.asarray([[1.523, 13.305, 3.020, 2.195, 72.693, 2.201, 9.734, 0.939, 0.276], [1.518, 14.215, 3.066, 2.046, 71.789, 1.707, 10.576, 0.970, 0.231], [1.521, 12.349, 2.250, 1.126, 73.202, 1.175, 10.913, 1.403, 0.297], [1.519, 14.941, 1.919, 2.003, 72.113, 2.191, 8.563, 1.805, 0.300], [1.526, 13.190, 3.412, 1.522, 72.512, 1.194, 8.402, 0.587, 0.135], [1.529, 13.265, 2.718, 1.620, 70.936, 2.665, 11.614, 1.322, 0.219]]),\n", + " 'jde': np.asarray([[1.529, 16.186, 1.588, 2.817, 72.258, 0.000, 8.043, 0.824, 0.374], [1.532, 10.730, 0.495, 0.768, 71.836, 3.082, 8.435, 1.831, 0.504], [1.533, 16.842, 4.488, 3.237, 71.848, 5.223, 10.575, 0.154, 0.416], [1.516, 14.662, 4.253, 0.507, 72.073, 0.000, 7.095, 0.072, 0.114], [1.524, 11.501, 2.029, 1.710, 75.310, 3.203, 15.281, 1.354, 0.353], [1.512, 11.318, 3.625, 0.290, 75.101, 4.514, 5.430, 0.544, 0.085]])\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CMC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('cmc.csv')\n", + "data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values\n", + "noc = len(np.unique(labels))\n", + "C_best = {\n", + " 'report_bh': np.asarray([[24.42273, 3.03421, 3.51476, 1.79348, 0.92053, 0.82924, 2.29826, 2.95830, 0.02510], [43.63258, 2.99608, 3.45429, 4.57393, 0.82686, 0.83295, 1.82888, 3.47833, 0.11822], [33.49565, 3.13181, 3.56438, 3.64850, 0.79404, 0.66550, 2.09068, 3.29362, 0.06771]]),\n", + " 'pso': np.asarray([[25.671, 2.096, 4.000, 1.963, 0.913, 0.700, 1.000, 3.505, 0.234], [46.014, 4.000, 4.000, 16.000, 0.000, 1.000, 2.017, 3.675, 1.000], [46.394, 2.021, 2.468, 15.206, 1.000, 0.000, 4.000, 3.004, 0.145]])\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Benchmark preparation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "benchmark = Clustering(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Min" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "benchmark = ClusteringMin(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Min with penalty" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "benchmark = ClusteringMinPenalty(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clustering for classification" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "benchmark = ClusteringClassification(data, labels)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Klasifikacija" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "funcs, C, nFES = [kmeans, de, jde, pso, clpso, ovcpso, ba, bh], {}, 1000\n", + "for algo in funcs: algo(data, C, benchmark, nFES); print ()\n", + "lt = labeltransform(labels)\n", + "gl = groupdatabylabel(data, labels, lt)\n", + "for k, V in C.items():\n", + " l, ok = clusters2labels(V, gl), 0\n", + " for i, d in enumerate(data): ok += 1 if lt.inverse_transform([l[classifie(d, V)]])[0] == labels[i] else 0\n", + " print ('Sucess of %s: %f' % (k, ok / len(data)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = labeltransform(labels)\n", + "gl = groupdatabylabel(data, labels, lt)\n", + "for k, V in C_best.items():\n", + " l, ok = clusters2labels(V, gl), 0\n", + " for i, d in enumerate(data): ok += 1 if lt.inverse_transform([l[classifie(d, V)]])[0] == labels[i] else 0\n", + " print ('Sucess of %s: %f' % (k, ok / len(data)))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc-showtags": false + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/clustering_datasets/Data.ipynb b/clustering_datasets/Data.ipynb new file mode 100644 index 0000000..b2018a0 --- /dev/null +++ b/clustering_datasets/Data.ipynb @@ -0,0 +1,653 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "from typing import Union, Optional\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn import datasets\n", + "%matplotlib widget\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from jupyterthemes import jtplot\n", + "import seaborn as sns\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from NiaPy.util import groupdatabylabel\n", + "# Dodatne opcije\n", + "jtplot.style()\n", + "# sns.set_style(\"whitegrid\"), sns.set_context(\"talk\")\n", + "pd.set_option('display.max_columns', None)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def getdims(d: Union[np.ndarray, list], n: int = 0) -> None:\n", + " for i, e in enumerate(d):\n", + " if isinstance(e, (list, np.ndarray)): print ('%d:%d -> %d' % (n, i, len(e)))\n", + " else: continue\n", + " if isinstance(e[0], (list, np.ndarray)) and isinstance(e[0][0], (list, np.ndarray)): getdims(e, n + 1)\n", + "\t\t \n", + "def mplot(data: pd.DataFrame, clabel: str, ax: Optional[mpl.axes.Axes] = None) -> None:\n", + " d = pd.melt(data, clabel, var_name=\"measurement\")\n", + " if ax is None: f, ax = plt.subplots()\n", + " sns.despine(bottom=True, left=True)\n", + " sns.stripplot(x=\"value\", y=\"measurement\", hue=clabel, data=d, dodge=True, jitter=True, alpha=.25, zorder=1)\n", + " sns.pointplot(x=\"value\", y=\"measurement\", hue=clabel, data=d, dodge=.532, join=False, palette=\"dark\", markers=\"d\", scale=.75, ci=None)\n", + " handles, labels = ax.get_legend_handles_labels()\n", + " noc = len(data[clabel].unique())\n", + " ax.legend(handles[noc:], labels[noc:], title=clabel, handletextpad=0, columnspacing=1, loc=\"lower right\", ncol=noc, frameon=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generated Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X, y = datasets.make_blobs()\n", + "fig, ax = plt.subplots(1, 1, figsize=(6, 5))\n", + "for e in np.unique(y): ax.scatter(X[np.where(y == e), 0], X[np.where(y == e), 1], label='Class %d' % e)\n", + "ax.set_xlabel('$a_1$'); ax.set_ylabel('$a_2$')\n", + "ax.legend()\n", + "fig.tight_layout()\n", + "fig.savefig(\"clusterExample.pdf\", bbox_inches='tight')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gdata = pd.DataFrame(np.hstack((X, y.reshape(len(y), 1))), columns=['a1', 'a2', 'Class'])\n", + "gdata" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(y)\n", + "lt.classes_\n", + "d = groupdatabylabel(X, y, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(gdata, 'Class')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Iris Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute description\n", + "1. sepal length in cm\n", + "2. sepal width in cm\n", + "3. petal length in cm\n", + "4. petal width in cm\n", + "5. class:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Class attribute\n", + "* 0: Iris Setosa\n", + "* 1: Iris Versicolour\n", + "* 2: Iris Virginica" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris = datasets.load_iris()\n", + "X, y = iris.data, iris.target\n", + "iris = pd.DataFrame(np.hstack((X, y.reshape(len(y), 1))), columns=['Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'])\n", + "iris" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('irisStat.tex', 'w') as file: file.write(iris.describe().to_latex())\n", + "iris.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(y)\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(X, y, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(iris, 'Species')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc-hr-collapsed": false + }, + "source": [ + "# The Cancer Wisconsin Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute information\n", + "1. ID number\n", + "2. Diagnosis (M = malignant, B = benign)\n", + "3. Ten real-valued features are computed for each cell nucleus:\n", + " 1. radius (mean of distances from center to points on the perimeter)\n", + " 2. texture (standard deviation of gray-scale values)\n", + " 3. perimeter\n", + " 4. area\n", + " 5. smoothness (local variation in radius lengths)\n", + " 6. compactness (perimeter^2 / area - 1.0)\n", + " 7. concavity (severity of concave portions of the contour)\n", + " 8. concave points (number of concave portions of the contour)\n", + " 9. symmetry \n", + " 10. fractal dimension (\"coastline approximation\" - 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Class attirbute\n", + "* 0: No cancer\n", + "* 1: Cancer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cwd = datasets.load_breast_cancer()\n", + "X, y = cwd.data, cwd.target\n", + "columns = ['radius 1', 'texture 1', 'perimeter 1', 'area 1', 'smoothness 1', 'compactness 1', 'concavity 1', 'concave points 1', 'symmetry 1', 'fractal dimension 1', 'radius 2', 'texture 2', 'perimeter 2', 'area 2', 'smoothness 2', 'compactness 2', 'concavity 2', 'concave points 2', 'symmetry 2', 'fractal dimension 2', 'radius 3', 'texture 3', 'perimeter 3', 'area 3', 'smoothness 3', 'compactness 3', 'concavity 3', 'concave points 3', 'symmetry 3', 'fractal dimension 3', 'Diagnosis']\n", + "cwd = pd.DataFrame(np.hstack((X, y.reshape(len(y), 1))), columns=columns)\n", + "cwd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('cancerStat.tex', 'w') as file: file.write(cwd.describe().to_latex())\n", + "cwd.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(y)\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(X, y, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(cwd, 'Diagnosis')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc-hr-collapsed": false + }, + "source": [ + "# The Wine Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute description\n", + "1. Alcohol\n", + "2. Malic acid\n", + "3. Ash\n", + "4. Alcalinity of ash\n", + "5. Magnesium\n", + "6. Total phenols\n", + "7. Flavanoids\n", + "8. Nonflavanoid phenols\n", + "9. Proanthocyanins\n", + "10. Color intensity\n", + "11. Hue\n", + "12. OD280/OD315 of diluted wines\n", + "13. Proline " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Class attiribute\n", + "* 0: TODO\n", + "* 1: TODO\n", + "* 2: TODO" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wine = datasets.load_wine()\n", + "X, y = wine.data, wine.target\n", + "wine = pd.DataFrame(np.hstack((X, y.reshape(len(y), 1))), columns=['Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline', 'Class'])\n", + "wine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('wineStat.tex', 'w') as file: file.write(wine.describe().to_latex())\n", + "wine.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(y)\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(X, y, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(wine, 'Class')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Glass Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute information\n", + "1. RI: refractive index\n", + "2. Na: Sodium (unit measurement: weight percent in corresponding oxide, as are attributes 4-10)\n", + "3. Mg: Magnesium\n", + "4. Al: Aluminum\n", + "5. Si: Silicon\n", + "6. K: Potassium\n", + "7. Ca: Calcium\n", + "8. Ba: Barium\n", + "9. Fe: Iron\n", + "10. Type of glass: (class attribute)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Class attribute\n", + "Type of glass:\n", + "* 1: building_windows_float_processed\n", + "* 2: building_windows_non_float_processed\n", + "* 3: vehicle_windows_float_processed\n", + "* 4: vehicle_windows_non_float_processed (none in this database)\n", + "* 5: containers\n", + "* 6: tableware\n", + "* 7: headlamps" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "glass = pd.read_csv('glass.csv')\n", + "glass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('glassStat.tex', 'w') as file: file.write(glass.describe().to_latex())\n", + "glass.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(glass.iloc[:, -1].values)\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(glass.iloc[:, :-1].values, glass.iloc[:, -1].values, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(glass, 'Type')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Contraceptive Method Choice Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute information\n", + "1. Wife's age (numerical)\n", + "2. Wife's education (categorical) 1=low, 2, 3, 4=high\n", + "3. Husband's education (categorical) 1=low, 2, 3, 4=high\n", + "4. Number of children ever born (numerical)\n", + "5. Wife's religion (binary) 0=Non-Islam, 1=Islam\n", + "6. Wife's now working? (binary) 0=Yes, 1=No\n", + "7. Husband's occupation (categorical) 1, 2, 3, 4\n", + "8. Standard-of-living index (categorical) 1=low, 2, 3, 4=high\n", + "9. Media exposure (binary) 0=Good, 1=Not good\n", + "10. Contraceptive method used (class attribute)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Class attribute\n", + "Contraceptive method used:\n", + "* 1: No-use\n", + "* 2: Long-term\n", + "* 3: Short-term" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmc = pd.read_csv('cmc.csv')\n", + "cmc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('cmcStat.tex', 'w') as file: file.write(cmc.describe().to_latex())\n", + "cmc.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(cmc.iloc[:, -1])\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(cmc.iloc[:, :-1].values, cmc.iloc[:, -1].values, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(cmc, ' Contraceptive method used')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Covertype dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attribute information\n", + "1. Elevation / quantitative /meters / Elevation in meters\n", + "2. Aspect / quantitative / azimuth / Aspect in degrees azimuth\n", + "3. Slope / quantitative / degrees / Slope in degrees\n", + "4. Horizontal_Distance_To_Hydrology / quantitative / meters / Horz Dist to nearest surface water features\n", + "5. Vertical_Distance_To_Hydrology / quantitative / meters / Vert Dist to nearest surface water features\n", + "6. Horizontal_Distance_To_Roadways / quantitative / meters / Horz Dist to nearest roadway\n", + "7. Hillshade_9am / quantitative / 0 to 255 index / Hillshade index at 9am, summer solstice\n", + "8. Hillshade_Noon / quantitative / 0 to 255 index / Hillshade index at noon, summer soltice\n", + "9. Hillshade_3pm / quantitative / 0 to 255 index / Hillshade index at 3pm, summer solstice\n", + "10. Horizontal_Distance_To_Fire_Points / quantitative / meters / Horz Dist to nearest wildfire ignition points\n", + "11. Wilderness_Area (4 binary columns) / qualitative / 0 (absence) or 1 (presence) / Wilderness area designation\n", + "12. Soil_Type (40 binary columns) / qualitative / 0 (absence) or 1 (presence) / Soil Type designation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Class attribute\n", + "* Cover_Type (7 types) / integer / 1 to 7 / Forest Cover Type designation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "covtype = datasets.fetch_covtype()\n", + "X, y = covtype.data, covtype.target\n", + "covtype = pd.DataFrame(np.hstack((X, y.reshape(len(y), 1))), columns=['Elevation', 'Aspect', 'Slope', 'Horizontal_Distance_To_Hydrology', 'Vertical_Distance_To_Hydrology', 'Horizontal_Distance_To_Roadways', 'Hillshade_9am', 'Hillshade_Noon', 'Hillshade_3pm', 'Horizontal_Distance_To_Fire_Points', 'Wilderness_Area_1', 'Wilderness_Area_2', 'Wilderness_Area_3', 'Wilderness_Area_4', 'Soil_Type_1', 'Soil_Type_2', 'Soil_Type_3', 'Soil_Type_4', 'Soil_Type_5', 'Soil_Type_6', 'Soil_Type_7', 'Soil_Type_8', 'Soil_Type_9', 'Soil_Type_10', 'Soil_Type_11', 'Soil_Type_12', 'Soil_Type_13', 'Soil_Type_14', 'Soil_Type_15', 'Soil_Type_16', 'Soil_Type_17', 'Soil_Type_18', 'Soil_Type_19', 'Soil_Type_20', 'Soil_Type_21', 'Soil_Type_22', 'Soil_Type_23', 'Soil_Type_24', 'Soil_Type_25', 'Soil_Type_26', 'Soil_Type_27', 'Soil_Type_28', 'Soil_Type_29', 'Soil_Type_30', 'Soil_Type_31', 'Soil_Type_32', 'Soil_Type_33', 'Soil_Type_34', 'Soil_Type_35', 'Soil_Type_36', 'Soil_Type_37', 'Soil_Type_38', 'Soil_Type_39', 'Soil_Type_40', 'Cover_Type'])\n", + "covtype" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('covtypeStat.tex', 'w') as file: file.write(covtype.describe().to_latex())\n", + "covtype.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lt = LabelEncoder().fit(y)\n", + "lt.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = groupdatabylabel(X, y, lt)\n", + "getdims(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mplot(covtype, 'Cover_Type')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/clustering_datasets/Makefile b/clustering_datasets/Makefile new file mode 100644 index 0000000..13db6d1 --- /dev/null +++ b/clustering_datasets/Makefile @@ -0,0 +1,25 @@ +install: Pipfile + pipenv install + pipenv run jupyter labextension install @jupyter-widgets/jupyterlab-manager + pipenv run jupyter labextension install jupyter-matplotlib + pipenv run jupyter labextension install @jupyterlab/toc + pipenv run jupyter labextension install @oriolmirosa/jupyterlab_materialdarker + pipenv run jt -t onedork -lineh 110 -nfs 10 -fs 10 -tfs 10 -cellw 80% + +run: + pipenv run jupyter lab + +lab: + pipenv run jupyter lab + +notebook: + pipenv run jupyter notebook + +console: + pipenv run ipython + +clean: Pipfile.lock + pipenv --rm + rm Pipfile.lock + +all: install run diff --git a/clustering_datasets/Pipfile b/clustering_datasets/Pipfile new file mode 100644 index 0000000..8867a5b --- /dev/null +++ b/clustering_datasets/Pipfile @@ -0,0 +1,23 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[requires] +python_version = '3.7' + +[packages] +pipfile = "*" +wheel = ">=0.33.4" +jupyterlab = ">=0.35.5" +ipykernel = ">=5.1.0" +numpy = ">=1.16.3" +scipy = ">=1.2.1" +matplotlib = ">=3.0.3" +pandas = ">=0.24.2" +scikit-learn = ">=0.21.2" +ipywidgets = ">=7.4.2" +ipympl = ">=0.2.1" +jupyterthemes = ">=0.20.0" +seaborn = ">=0.9.0" +niapy = {path = "./../../NiaPy/dist/NiaPy-2.0.0rc4-cp37-cp37m-linux_x86_64.whl"} diff --git a/clustering_datasets/Pipfile.lock b/clustering_datasets/Pipfile.lock new file mode 100644 index 0000000..e142845 --- /dev/null +++ b/clustering_datasets/Pipfile.lock @@ -0,0 +1,649 @@ +{ + "_meta": { + "hash": { + "sha256": "6a6aedc480b1c8e8f46496d767e73f048abc078975d3379bd64b49e22d458c51" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "backcall": { + "hashes": [ + "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", + "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" + ], + "version": "==0.1.0" + }, + "bleach": { + "hashes": [ + "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16", + "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa" + ], + "version": "==3.1.0" + }, + "cycler": { + "hashes": [ + "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", + "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" + ], + "version": "==0.10.0" + }, + "cython": { + "hashes": [ + "sha256:0afa0b121b89de619e71587e25702e2b7068d7da2164c47e6eee80c17823a62f", + "sha256:1c608ba76f7a20cc9f0c021b7fe5cb04bc1a70327ae93a9298b1bc3e0edddebe", + "sha256:26229570d6787ff3caa932fe9d802960f51a89239b990d275ae845405ce43857", + "sha256:2a9deafa437b6154cac2f25bb88e0bfd075a897c8dc847669d6f478d7e3ee6b1", + "sha256:2f28396fbce6d9d68a40edbf49a6729cf9d92a4d39ff0f501947a89188e9099f", + "sha256:3983dd7b67297db299b403b29b328d9e03e14c4c590ea90aa1ad1d7b35fb178b", + "sha256:4100a3f8e8bbe47d499cdac00e56d5fe750f739701ea52dc049b6c56f5421d97", + "sha256:51abfaa7b6c66f3f18028876713c8804e73d4c2b6ceddbcbcfa8ec62429377f0", + "sha256:61c24f4554efdb8fb1ac6c8e75dab301bcdf2b7b739ed0c2b267493bb43163c5", + "sha256:700ccf921b2fdc9b23910e95b5caae4b35767685e0812343fa7172409f1b5830", + "sha256:7b41eb2e792822a790cb2a171df49d1a9e0baaa8e81f58077b7380a273b93d5f", + "sha256:803987d3b16d55faa997bfc12e8b97f1091f145930dee229b020487aed8a1f44", + "sha256:99af5cfcd208c81998dcf44b3ca466dee7e17453cfb50e98b87947c3a86f8753", + "sha256:9faea1cca34501c7e139bc7ef8e504d532b77865c58592493e2c154a003b450f", + "sha256:a7ba4c9a174db841cfee9a0b92563862a0301d7ca543334666c7266b541f141a", + "sha256:b26071c2313d1880599c69fd831a07b32a8c961ba69d7ccbe5db1cd8d319a4ca", + "sha256:b49dc8e1116abde13a3e6a9eb8da6ab292c5a3325155fb872e39011b110b37e6", + "sha256:bd40def0fd013569887008baa6da9ca428e3d7247adeeaeada153006227bb2e7", + "sha256:bfd0db770e8bd4e044e20298dcae6dfc42561f85d17ee546dcd978c8b23066ae", + "sha256:c2fad1efae5889925c8fd7867fdd61f59480e4e0b510f9db096c912e884704f1", + "sha256:c81aea93d526ccf6bc0b842c91216ee9867cd8792f6725a00f19c8b5837e1715", + "sha256:da786e039b4ad2bce3d53d4799438cf1f5e01a0108f1b8d78ac08e6627281b1a", + "sha256:deab85a069397540987082d251e9c89e0e5b2e3e044014344ff81f60e211fc4b", + "sha256:e3f1e6224c3407beb1849bdc5ae3150929e593e4cffff6ca41c6ec2b10942c80", + "sha256:e74eb224e53aae3943d66e2d29fe42322d5753fd4c0641329bccb7efb3a46552", + "sha256:ee697c7ea65cb14915a64f36874da8ffc2123df43cf8bc952172e04a26656cd6", + "sha256:f37792b16d11606c28e428460bd6a3d14b8917b109e77cdbe4ca78b0b9a52c87", + "sha256:fd2906b54cbf879c09d875ad4e4687c58d87f5ed03496063fec1c9065569fd5d" + ], + "version": "==0.29.10" + }, + "decorator": { + "hashes": [ + "sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de", + "sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6" + ], + "version": "==4.4.0" + }, + "defusedxml": { + "hashes": [ + "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93", + "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5" + ], + "version": "==0.6.0" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "enum34": { + "hashes": [ + "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", + "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", + "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", + "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1" + ], + "version": "==1.1.6" + }, + "ipykernel": { + "hashes": [ + "sha256:346189536b88859937b5f4848a6fd85d1ad0729f01724a411de5cae9b618819c", + "sha256:f0e962052718068ad3b1d8bcc703794660858f58803c3798628817f492a8769c" + ], + "index": "pypi", + "version": "==5.1.1" + }, + "ipympl": { + "hashes": [ + "sha256:48ede51641bee78c32994cbd86b385714d61beb7d80c87f0cc1b70efb51dd5f5", + "sha256:cefac1229d9eeb6b1c96ab671214dbdc05428973194f4f126514b3547ae6ca08" + ], + "index": "pypi", + "version": "==0.2.1" + }, + "ipython": { + "hashes": [ + "sha256:54c5a8aa1eadd269ac210b96923688ccf01ebb2d0f21c18c3c717909583579a8", + "sha256:e840810029224b56cd0d9e7719dc3b39cf84d577f8ac686547c8ba7a06eeab26" + ], + "markers": "python_version >= '3.3'", + "version": "==7.5.0" + }, + "ipython-genutils": { + "hashes": [ + "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", + "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" + ], + "version": "==0.2.0" + }, + "ipywidgets": { + "hashes": [ + "sha256:0f2b5cde9f272cb49d52f3f0889fdd1a7ae1e74f37b48dac35a83152780d2b7b", + "sha256:a3e224f430163f767047ab9a042fc55adbcab0c24bbe6cf9f306c4f89fdf0ba3" + ], + "version": "==7.4.2" + }, + "jedi": { + "hashes": [ + "sha256:2bb0603e3506f708e792c7f4ad8fc2a7a9d9c2d292a358fbbd58da531695595b", + "sha256:2c6bcd9545c7d6440951b12b44d373479bf18123a401a52025cf98563fbd826c" + ], + "version": "==0.13.3" + }, + "jinja2": { + "hashes": [ + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" + ], + "version": "==2.10.1" + }, + "joblib": { + "hashes": [ + "sha256:21e0c34a69ad7fde4f2b1f3402290e9ec46f545f15f1541c582edfe05d87b63a", + "sha256:315d6b19643ec4afd4c41c671f9f2d65ea9d787da093487a81ead7b0bac94524" + ], + "version": "==0.13.2" + }, + "jsonschema": { + "hashes": [ + "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d", + "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a" + ], + "version": "==3.0.1" + }, + "jupyter-client": { + "hashes": [ + "sha256:b5f9cb06105c1d2d30719db5ffb3ea67da60919fb68deaefa583deccd8813551", + "sha256:c44411eb1463ed77548bc2d5ec0d744c9b81c4a542d9637c7a52824e2121b987" + ], + "version": "==5.2.4" + }, + "jupyter-core": { + "hashes": [ + "sha256:927d713ffa616ea11972534411544589976b2493fc7e09ad946e010aa7eb9970", + "sha256:ba70754aa680300306c699790128f6fbd8c306ee5927976cbe48adacf240c0b7" + ], + "version": "==4.4.0" + }, + "jupyterlab": { + "hashes": [ + "sha256:0e47743c117609052ea75d211a85b2cad72b208f5fef664fab0c11afa1f5f0f7", + "sha256:2ec845845d51221e39d0d753884a19342c953f39febf3148a68631bf57ecb774" + ], + "index": "pypi", + "version": "==0.35.6" + }, + "jupyterlab-server": { + "hashes": [ + "sha256:65eaf85b27a37380329fbdd8ebd095a0bd65fe9261d73ef6a1abee1dbaeaac1f", + "sha256:72d916a73957a880cdb885def6d8664a6d1b2760ef5dca5ad665aa1e8d1bb783" + ], + "version": "==0.2.0" + }, + "jupyterthemes": { + "hashes": [ + "sha256:2a8ebc0c84b212ab99b9f1757fc0582a3f53930d3a75b2492d91a7c8b36ab41e", + "sha256:4bd42fc88a06e3afabbe70c2ee25e6467147512993a3cbd9bec57ae3fd2e2fb1" + ], + "index": "pypi", + "version": "==0.20.0" + }, + "kiwisolver": { + "hashes": [ + "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", + "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", + "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", + "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", + "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", + "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", + "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", + "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", + "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", + "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", + "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", + "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", + "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", + "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", + "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", + "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", + "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", + "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", + "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", + "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", + "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", + "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", + "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", + "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", + "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", + "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", + "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", + "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f" + ], + "version": "==1.1.0" + }, + "lesscpy": { + "hashes": [ + "sha256:72a38c751681e91e258825c1e826c38508c183f48b2e420e1a65d01eaa04bac3", + "sha256:f3c6d0b544c5bcdadcd3d8319feccb4128d06676d4117c6c9396ab39c25372ad" + ], + "version": "==0.13.0" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" + }, + "matplotlib": { + "hashes": [ + "sha256:08d9bc2e2acef42965256acd5015dc2c899cbd53e01bf4214c5510c7ea0efd2d", + "sha256:1e0213f87cc0076f7b0c4c251d7e23601e2419cd98691df79edb95517ba06f0c", + "sha256:1f31053f660df5f0310118d7f5bd1e8025170e9773f0bebe8fec486d0926adf6", + "sha256:399bf6352633aeeb45ca55c6c943fa2738022fb17ae498c32a142ced0b41528d", + "sha256:409a5894efb810d630d2512449c7a4394de9a4d15fc6394e26a409b17d9cc18c", + "sha256:5c5ef5cf1bc8f483123102e2615644937af7d4c01d100acc72bf74a044a78717", + "sha256:d0052be5cdfa27018bb08194b8812c47cb985d60eb682e1809c76e9600839516", + "sha256:e7d6620d145ca9f6c3e88248e5734b6fda430e75e70755b887e48f8e9bc1de2a", + "sha256:f3d8b6bccc577e4e5ecbd58fdd63cacb8e58f0ed1e97616a7f7a7baaf4b8d036" + ], + "index": "pypi", + "version": "==3.1.0" + }, + "mistune": { + "hashes": [ + "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e", + "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4" + ], + "version": "==0.8.4" + }, + "nbconvert": { + "hashes": [ + "sha256:138381baa41d83584459b5cfecfc38c800ccf1f37d9ddd0bd440783346a4c39c", + "sha256:4a978548d8383f6b2cfca4a3b0543afb77bc7cb5a96e8b424337ab58c12da9bc" + ], + "version": "==5.5.0" + }, + "nbformat": { + "hashes": [ + "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b", + "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402" + ], + "version": "==4.4.0" + }, + "niapy": { + "hashes": [ + "sha256:be583b1b205fa40527f1685cf901d3044564744b12f01307494d6992cc4243fe", + "sha256:f9ff0d87e0471f935140b251b7b8d513f46a8d5bfeb9ef80fb983b602ed3324f", + "sha256:fa675395ffbe955930b4b0e509fc28b2d3ecd7db0f3992e24b433040452482c1" + ], + "path": "./../../NiaPy/dist/NiaPy-2.0.0rc4-cp37-cp37m-linux_x86_64.whl", + "version": "==2.0.0rc4" + }, + "notebook": { + "hashes": [ + "sha256:573e0ae650c5d76b18b6e564ba6d21bf321d00847de1d215b418acb64f056eb8", + "sha256:f64fa6624d2323fbef6210a621817d6505a45d0d4a9367f1843b20a38a4666ee" + ], + "version": "==5.7.8" + }, + "numpy": { + "hashes": [ + "sha256:0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633", + "sha256:141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7", + "sha256:14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b", + "sha256:27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5", + "sha256:2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e", + "sha256:3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca", + "sha256:52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336", + "sha256:6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5", + "sha256:7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7", + "sha256:7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7", + "sha256:94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69", + "sha256:a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3", + "sha256:ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166", + "sha256:b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8", + "sha256:b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722", + "sha256:cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525", + "sha256:d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10", + "sha256:dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29", + "sha256:dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8", + "sha256:e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52", + "sha256:ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797", + "sha256:f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a", + "sha256:f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7" + ], + "index": "pypi", + "version": "==1.16.4" + }, + "pandas": { + "hashes": [ + "sha256:071e42b89b57baa17031af8c6b6bbd2e9a5c68c595bc6bf9adabd7a9ed125d3b", + "sha256:17450e25ae69e2e6b303817bdf26b2cd57f69595d8550a77c308be0cd0fd58fa", + "sha256:17916d818592c9ec891cbef2e90f98cc85e0f1e89ed0924c9b5220dc3209c846", + "sha256:2538f099ab0e9f9c9d09bbcd94b47fd889bad06dc7ae96b1ed583f1dc1a7a822", + "sha256:366f30710172cb45a6b4f43b66c220653b1ea50303fbbd94e50571637ffb9167", + "sha256:42e5ad741a0d09232efbc7fc648226ed93306551772fc8aecc6dce9f0e676794", + "sha256:4e718e7f395ba5bfe8b6f6aaf2ff1c65a09bb77a36af6394621434e7cc813204", + "sha256:4f919f409c433577a501e023943e582c57355d50a724c589e78bc1d551a535a2", + "sha256:4fe0d7e6438212e839fc5010c78b822664f1a824c0d263fd858f44131d9166e2", + "sha256:5149a6db3e74f23dc3f5a216c2c9ae2e12920aa2d4a5b77e44e5b804a5f93248", + "sha256:627594338d6dd995cfc0bacd8e654cd9e1252d2a7c959449228df6740d737eb8", + "sha256:83c702615052f2a0a7fb1dd289726e29ec87a27272d775cb77affe749cca28f8", + "sha256:8c872f7fdf3018b7891e1e3e86c55b190e6c5cee70cab771e8f246c855001296", + "sha256:90f116086063934afd51e61a802a943826d2aac572b2f7d55caaac51c13db5b5", + "sha256:a3352bacac12e1fc646213b998bce586f965c9d431773d9e91db27c7c48a1f7d", + "sha256:bcdd06007cca02d51350f96debe51331dec429ac8f93930a43eb8fb5639e3eb5", + "sha256:c1bd07ebc15285535f61ddd8c0c75d0d6293e80e1ee6d9a8d73f3f36954342d0", + "sha256:c9a4b7c55115eb278c19aa14b34fcf5920c8fe7797a09b7b053ddd6195ea89b3", + "sha256:cc8fc0c7a8d5951dc738f1c1447f71c43734244453616f32b8aa0ef6013a5dfb", + "sha256:d7b460bc316064540ce0c41c1438c416a40746fd8a4fb2999668bf18f3c4acf1" + ], + "index": "pypi", + "version": "==0.24.2" + }, + "pandocfilters": { + "hashes": [ + "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9" + ], + "version": "==1.4.2" + }, + "parso": { + "hashes": [ + "sha256:17cc2d7a945eb42c3569d4564cdf49bde221bc2b552af3eca9c1aad517dcdd33", + "sha256:2e9574cb12e7112a87253e14e2c380ce312060269d04bd018478a3c92ea9a376" + ], + "version": "==0.4.0" + }, + "pexpect": { + "hashes": [ + "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1", + "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.7.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "pipfile": { + "hashes": [ + "sha256:f7d9f15de8b660986557eb3cc5391aa1a16207ac41bc378d03f414762d36c984" + ], + "index": "pypi", + "version": "==0.0.2" + }, + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "version": "==3.11" + }, + "prometheus-client": { + "hashes": [ + "sha256:ee0c90350595e4a9f36591f291e6f9933246ea67d7cd7d1d6139a9781b14eaae" + ], + "version": "==0.7.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:11adf3389a996a6d45cc277580d0d53e8a5afd281d0c9ec71b28e6f121463780", + "sha256:2519ad1d8038fd5fc8e770362237ad0364d16a7650fb5724af6997ed5515e3c1", + "sha256:977c6583ae813a37dc1c2e1b715892461fcbdaa57f6fc62f33a528c4886c8f55" + ], + "version": "==2.0.9" + }, + "ptyprocess": { + "hashes": [ + "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", + "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f" + ], + "markers": "os_name != 'nt'", + "version": "==0.6.0" + }, + "pygments": { + "hashes": [ + "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", + "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297" + ], + "version": "==2.4.2" + }, + "pyparsing": { + "hashes": [ + "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", + "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" + ], + "version": "==2.4.0" + }, + "pyrsistent": { + "hashes": [ + "sha256:16692ee739d42cf5e39cef8d27649a8c1fdb7aa99887098f1460057c5eb75c3a" + ], + "version": "==0.15.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", + "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" + ], + "version": "==2.8.0" + }, + "pytz": { + "hashes": [ + "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", + "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" + ], + "version": "==2019.1" + }, + "pyzmq": { + "hashes": [ + "sha256:1651e52ed91f0736afd6d94ef9f3259b5534ce8beddb054f3d5ca989c4ef7c4f", + "sha256:5ccb9b3d4cd20c000a9b75689d5add8cd3bce67fcbd0f8ae1b59345247d803af", + "sha256:5e120c4cd3872e332fb35d255ad5998ebcee32ace4387b1b337416b6b90436c7", + "sha256:5e2a3707c69a7281a9957f83718815fd74698cba31f6d69f9ed359921f662221", + "sha256:63d51add9af8d0442dc90f916baf98fdc04e3b0a32afec4bfc83f8d85e72959f", + "sha256:65c5a0bdc49e20f7d6b03a661f71e2fda7a99c51270cafe71598146d09810d0d", + "sha256:66828fabe911aa545d919028441a585edb7c9c77969a5fea6722ef6e6ece38ab", + "sha256:7d79427e82d9dad6e9b47c0b3e7ae5f9d489b1601e3a36ea629bb49501a4daf3", + "sha256:824ee5d3078c4eae737ffc500fbf32f2b14e6ec89b26b435b7834febd70120cf", + "sha256:89dc0a83cccec19ff3c62c091e43e66e0183d1e6b4658c16ee4e659518131494", + "sha256:8b319805f6f7c907b101c864c3ca6cefc9db8ce0791356f180b1b644c7347e4c", + "sha256:90facfb379ab47f94b19519c1ecc8ec8d10813b69d9c163117944948bdec5d15", + "sha256:a0a178c7420021fc0730180a914a4b4b3092ce9696ceb8e72d0f60f8ce1655dd", + "sha256:a7a89591ae315baccb8072f216614b3e59aed7385aef4393a6c741783d6ee9cf", + "sha256:ba2578f0ae582452c02ed9fac2dc477b08e80ce05d2c0885becf5fff6651ccb0", + "sha256:c69b0055c55702f5b0b6b354133e8325b9a56dbc80e1be2d240bead253fb9825", + "sha256:ca434e1858fe222380221ddeb81e86f45522773344c9da63c311d17161df5e06", + "sha256:d4b8ecfc3d92f114f04d5c40f60a65e5196198b827503341521dda12d8b14939", + "sha256:d706025c47b09a54f005953ebe206f6d07a22516776faa4f509aaff681cc5468", + "sha256:d8f27e958f8a2c0c8ffd4d8855c3ce8ac3fa1e105f0491ce31729aa2b3229740", + "sha256:dbd264298f76b9060ce537008eb989317ca787c857e23cbd1b3ddf89f190a9b1", + "sha256:e926d66f0df8fdbf03ba20583af0f215e475c667fb033d45fd031c66c63e34c9", + "sha256:efc3bd48237f973a749f7312f68062f1b4ca5c2032a0673ca3ea8e46aa77187b", + "sha256:f59bc782228777cbfe04555707a9c56d269c787ed25d6d28ed9d0fbb41cb1ad2", + "sha256:f8da5322f4ff5f667a0d5a27e871b560c6637153c81e318b35cb012b2a98835c" + ], + "version": "==18.0.1" + }, + "scikit-learn": { + "hashes": [ + "sha256:051c53f9e900b0e9eccff2391f5317d1673d72e842bcbcd3e5d0b132459086ed", + "sha256:0aafc312a55ebf58073151b9308761a5fcfa45b7f7730cea4b1f066f824c72db", + "sha256:185d88ee4955cd68d7ff57356d1dd99cfc2de4b6aa5e5d679cafbc9df54716ff", + "sha256:195465c39daded4f3ef8759291ffde81365486d4293e63dd9e32de0f569ecbbf", + "sha256:4a6398500d035a4402476a2e3ae9f65a7a3f1b366ec6a7f6dd45c289f72dc954", + "sha256:56f14e98632fb9237e7d005c6d8e346d01fa67f7b92f5f5d57a0bd06c741f9f6", + "sha256:77092513dd780e12affde46a6394b52947db3fc00cf1d8c1c8eede52b37591d1", + "sha256:7d2cdfe16b1ae6f9a1760b69be27c2004a84fc362984f930df135c847c47b765", + "sha256:82c3450fc375f27e3529fa05fec627c9fc75915e05fcd55de43f193b3aa907af", + "sha256:a5fba00d9037b62b0e0906f64efe9e4a754e556bc091cc12f84bc81655b4a414", + "sha256:acba6bf5928e415b6296799a7aa069b66254c9440bce88ed2e5915865a317093", + "sha256:b474f00d2533f18761fb17fb0950b27e72baf0796176247b5a7cf0ee369790ee", + "sha256:ca45e0def97f73a828cee417174fafa0ab35a41f8bdca4424120a29c5589c548", + "sha256:f09e544a6756afbd9d31e1d8ddfde5a2c9c17f6d4274104c988fceb611e2d5c5", + "sha256:f979bb85cbfd9ed4d54709d86ab8893b316726abd1c9ab04abe7e6414b71b753", + "sha256:fb4c7a2294447515fffec33c1f5eedbe942e9be56edb8c6619607e7882531d40" + ], + "index": "pypi", + "version": "==0.21.2" + }, + "scipy": { + "hashes": [ + "sha256:03b1e0775edbe6a4c64effb05fff2ce1429b76d29d754aa5ee2d848b60033351", + "sha256:09d008237baabf52a5d4f5a6fcf9b3c03408f3f61a69c404472a16861a73917e", + "sha256:10325f0ffac2400b1ec09537b7e403419dcd25d9fee602a44e8a32119af9079e", + "sha256:1db9f964ed9c52dc5bd6127f0dd90ac89791daa690a5665cc01eae185912e1ba", + "sha256:409846be9d6bdcbd78b9e5afe2f64b2da5a923dd7c1cd0615ce589489533fdbb", + "sha256:4907040f62b91c2e170359c3d36c000af783f0fa1516a83d6c1517cde0af5340", + "sha256:6c0543f2fdd38dee631fb023c0f31c284a532d205590b393d72009c14847f5b1", + "sha256:826b9f5fbb7f908a13aa1efd4b7321e36992f5868d5d8311c7b40cf9b11ca0e7", + "sha256:a7695a378c2ce402405ea37b12c7a338a8755e081869bd6b95858893ceb617ae", + "sha256:a84c31e8409b420c3ca57fd30c7589378d6fdc8d155d866a7f8e6e80dec6fd06", + "sha256:adadeeae5500de0da2b9e8dd478520d0a9945b577b2198f2462555e68f58e7ef", + "sha256:b283a76a83fe463c9587a2c88003f800e08c3929dfbeba833b78260f9c209785", + "sha256:c19a7389ab3cd712058a8c3c9ffd8d27a57f3d84b9c91a931f542682bb3d269d", + "sha256:c3bb4bd2aca82fb498247deeac12265921fe231502a6bc6edea3ee7fe6c40a7a", + "sha256:c5ea60ece0c0c1c849025bfc541b60a6751b491b6f11dd9ef37ab5b8c9041921", + "sha256:db61a640ca20f237317d27bc658c1fc54c7581ff7f6502d112922dc285bdabee" + ], + "index": "pypi", + "version": "==1.3.0" + }, + "send2trash": { + "hashes": [ + "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2", + "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b" + ], + "version": "==1.5.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "terminado": { + "hashes": [ + "sha256:d9d012de63acb8223ac969c17c3043337c2fcfd28f3aea1ee429b345d01ef460", + "sha256:de08e141f83c3a0798b050ecb097ab6259c3f0331b2f7b7750c9075ced2c20c2" + ], + "version": "==0.8.2" + }, + "testpath": { + "hashes": [ + "sha256:46c89ebb683f473ffe2aab0ed9f12581d4d078308a3cb3765d79c6b2317b0109", + "sha256:b694b3d9288dbd81685c5d2e7140b81365d46c29f5db4bc659de5aa6b98780f8" + ], + "version": "==0.4.2" + }, + "toml": { + "hashes": [ + "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", + "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" + ], + "version": "==0.10.0" + }, + "tornado": { + "hashes": [ + "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", + "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", + "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", + "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", + "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", + "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", + "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" + ], + "version": "==6.0.2" + }, + "traitlets": { + "hashes": [ + "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", + "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" + ], + "version": "==4.3.2" + }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "version": "==0.1.7" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "widgetsnbextension": { + "hashes": [ + "sha256:14b2c65f9940c9a7d3b70adbe713dbd38b5ec69724eebaba034d1036cf3d4740", + "sha256:fa618be8435447a017fd1bf2c7ae922d0428056cfc7449f7a8641edf76b48265" + ], + "version": "==3.4.2" + }, + "xlsxwriter": { + "hashes": [ + "sha256:5ec6aa71f6ae4b6298376d8b6a56ca9cdcb8b80323a444212226447aed4fa10f", + "sha256:ec51d99c0cc5d95ec8d8e9c8de7c8fbbf461988bec01a8c86b5155a6716b0a5a" + ], + "version": "==1.1.8" + } + }, + "develop": {} +} diff --git a/clustering_datasets/README.md b/clustering_datasets/README.md new file mode 100644 index 0000000..660ed94 --- /dev/null +++ b/clustering_datasets/README.md @@ -0,0 +1,9 @@ +# Install and run +1. Install [Nodejs](https://nodejs.org/) +2. Install [NPM](https://www.npmjs.com/) +3. Run `make install` for creating environmen +4. Run `make run` for runing the jupyter lab + +# Run experiment + +```pipenv run python run_cluster.py -a 'jDE' -rn 5 -ds 'iris' -of 'gc' -nFES 1000``` diff --git a/clustering_datasets/clusterargparser.py b/clustering_datasets/clusterargparser.py new file mode 100644 index 0000000..bd7adfb --- /dev/null +++ b/clustering_datasets/clusterargparser.py @@ -0,0 +1,38 @@ +# encoding=utf8 +import sys + +import numpy as np + +from NiaPy.util import MakeArgParser + +datasets = ['iris', 'cancer', 'wine', 'glass', 'cmc', 'gen'] +optfuncs = ['c', 'cm', 'cmp', 'cc'] + +def positiveInt(x: str) -> int: return abs(int(x)) + +def prob(x: str) -> float: return float(x) if 0 < float(x) < 1 else np.random.rand() + +def str2bool(x: str) -> bool: return True if x in ['true', 'True', 'TRUE', 'T', 'yes', 'Yes', 'YES', 'Y'] else False + +def MakeArgParserClustering(): + parser = MakeArgParser() + parser.add_argument('-ds', '--dataset', dest='dataset', default=datasets[0], choices=datasets, type=str) + parser.add_argument('-of', '--optfunc', dest='ofun', default=optfuncs[-1], choices=optfuncs, type=str) + parser.add_argument('-rn', '--rnum', dest='runs', default=51, type=positiveInt) + parser.add_argument('-ss', '--sseed', dest='sseed', default=1, type=positiveInt) + parser.add_argument('-sp', '--split', dest='split', default=.3, type=prob) + parser.add_argument('-o', '--wout', dest='wout', default=True, type=str2bool) + return parser + +def getArgs(argv): + parser = MakeArgParserClustering() + args = parser.parse_args(argv) + return args + +def getDictArgs(argv): return vars(getArgs(argv)) + +if __name__ == '__main__': + args = getArgs(sys.argv[1:]) + print (args) + +# vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3 diff --git a/clustering_datasets/cmc.csv b/clustering_datasets/cmc.csv new file mode 100644 index 0000000..db6cf6e --- /dev/null +++ b/clustering_datasets/cmc.csv @@ -0,0 +1,1474 @@ +Wife's age, Wife's education, Husband's education, Number of children ever born, Wife's religion, Wife's now working, Husband's occupation, Standard-of-living, Media exposure, Contraceptive method used +24,2,3,3,1,1,2,3,0,1 +45,1,3,10,1,1,3,4,0,1 +43,2,3,7,1,1,3,4,0,1 +42,3,2,9,1,1,3,3,0,1 +36,3,3,8,1,1,3,2,0,1 +19,4,4,0,1,1,3,3,0,1 +38,2,3,6,1,1,3,2,0,1 +21,3,3,1,1,0,3,2,0,1 +27,2,3,3,1,1,3,4,0,1 +45,1,1,8,1,1,2,2,1,1 +38,1,3,2,1,0,3,3,1,1 +42,1,4,4,1,1,1,3,0,1 +44,4,4,1,1,0,1,4,0,1 +42,2,4,1,1,0,3,3,0,1 +38,3,4,2,1,1,2,3,0,1 +26,2,4,0,1,1,4,1,0,1 +48,1,1,7,1,1,2,4,0,1 +39,2,2,6,1,1,2,4,0,1 +37,2,2,8,1,1,2,3,0,1 +39,2,1,5,1,1,2,1,1,1 +26,3,4,1,1,0,4,1,0,1 +24,3,4,0,1,0,3,1,0,1 +46,4,4,1,0,1,1,4,0,1 +39,4,4,1,1,1,1,4,0,1 +48,4,4,5,1,1,1,4,0,1 +40,2,4,8,1,1,3,3,0,1 +38,4,4,1,1,0,1,4,0,1 +29,4,4,0,1,0,1,4,0,1 +24,4,4,0,1,0,2,2,0,1 +43,1,2,8,1,1,2,4,0,1 +31,3,4,2,1,1,1,4,0,1 +31,4,4,2,1,1,3,2,0,1 +26,2,4,0,1,0,1,2,0,1 +33,2,2,2,1,1,3,1,0,1 +24,2,3,1,1,1,3,3,0,1 +42,1,3,9,1,1,3,2,1,1 +43,1,2,8,1,0,3,1,0,1 +25,3,3,4,1,1,3,2,0,1 +42,2,2,3,1,1,3,4,0,1 +28,2,2,1,1,1,2,4,0,1 +28,1,1,3,1,1,3,1,0,1 +47,2,3,0,1,0,1,3,0,1 +48,2,4,2,1,1,1,3,0,1 +40,4,4,2,0,1,1,4,0,1 +28,2,2,1,1,1,3,2,0,1 +25,1,4,1,1,1,2,1,0,1 +32,4,4,2,1,1,2,3,0,1 +45,4,4,0,1,1,2,4,0,1 +26,4,4,1,1,1,1,4,0,1 +26,4,4,0,1,0,1,4,0,1 +31,4,4,0,1,0,1,4,0,1 +49,4,4,7,0,1,2,4,0,1 +40,3,4,8,1,1,3,3,0,1 +34,4,4,1,0,0,2,3,0,1 +36,2,4,5,1,1,2,3,0,1 +20,2,2,2,1,1,2,2,1,1 +43,4,4,5,1,0,1,4,0,1 +37,3,4,7,1,1,2,1,0,1 +21,2,3,0,1,1,3,4,0,1 +49,4,4,6,1,1,1,2,0,1 +42,3,3,10,1,1,3,3,0,1 +20,2,3,1,1,1,2,3,0,1 +47,1,2,2,1,0,1,3,0,1 +22,2,3,1,1,1,2,1,0,1 +27,2,4,1,1,0,1,3,0,1 +24,2,4,1,1,1,3,1,0,1 +44,4,2,8,1,1,3,3,0,1 +30,2,3,3,1,1,3,1,0,1 +23,3,4,2,1,1,3,4,0,1 +25,4,4,1,1,0,3,3,0,1 +47,2,3,4,1,1,2,3,0,1 +48,2,3,8,1,1,1,4,0,1 +29,2,3,1,1,1,1,1,0,1 +29,2,3,1,1,1,1,2,0,1 +21,3,4,0,1,1,2,3,0,1 +21,3,4,1,1,1,2,3,0,1 +29,4,4,0,1,0,2,4,0,1 +45,3,4,3,1,1,1,4,0,1 +33,2,3,2,1,1,3,2,0,1 +38,4,4,1,1,0,1,4,0,1 +24,4,4,0,0,1,1,4,0,1 +49,4,4,6,0,0,1,4,0,1 +24,2,4,1,1,0,4,4,0,1 +28,4,4,0,0,0,1,4,0,1 +30,4,4,2,1,1,1,4,0,1 +33,4,4,2,1,1,1,4,0,1 +25,4,4,1,1,1,1,3,0,1 +35,4,4,3,0,1,1,4,0,1 +27,2,4,4,1,1,1,4,0,1 +24,2,2,3,1,0,2,1,0,1 +25,2,3,0,1,1,2,1,0,1 +46,2,4,6,1,1,1,4,0,1 +26,2,2,3,1,1,2,1,0,1 +38,2,2,1,1,0,3,2,0,1 +47,1,2,3,1,1,1,3,0,1 +41,1,3,10,1,1,2,3,1,1 +41,2,3,1,1,0,2,3,0,1 +28,4,4,5,1,1,2,1,0,1 +17,2,2,3,1,1,3,1,0,1 +27,2,3,5,1,1,2,1,0,1 +27,1,2,4,1,1,3,1,1,1 +19,2,3,0,1,0,2,2,0,1 +27,2,4,3,1,0,3,2,0,1 +26,4,3,4,1,1,2,3,0,1 +23,2,4,2,1,1,3,3,0,1 +40,3,3,3,1,1,3,2,0,1 +22,4,4,0,1,1,1,1,0,1 +44,3,4,4,1,0,1,3,0,1 +29,2,3,2,1,1,3,1,0,1 +26,2,3,3,1,1,3,1,0,1 +45,4,4,1,1,0,3,3,0,1 +32,3,3,7,1,0,2,3,0,1 +21,4,4,1,1,1,1,4,0,1 +31,2,2,4,1,1,3,3,0,1 +21,3,4,0,1,1,1,3,0,1 +37,4,4,1,1,1,1,4,0,1 +34,4,4,3,0,0,3,3,0,1 +44,3,4,1,1,1,1,3,0,1 +49,4,3,5,1,1,2,3,0,1 +26,2,3,2,1,1,3,3,0,1 +38,1,2,1,1,1,2,4,1,1 +36,2,3,5,1,1,2,3,0,1 +26,3,4,2,1,1,3,3,0,1 +20,2,3,1,0,1,3,2,0,1 +44,2,1,3,1,0,3,2,0,1 +31,3,4,2,1,1,1,2,1,1 +45,4,4,1,1,1,1,3,0,1 +36,2,3,2,1,1,3,2,1,1 +43,1,3,2,1,0,2,2,1,1 +25,3,4,0,1,1,1,3,0,1 +48,3,4,3,1,1,3,1,0,1 +30,4,4,0,0,0,1,3,0,1 +48,1,2,8,1,1,3,1,0,1 +28,3,4,1,1,1,3,1,1,1 +26,4,4,1,1,1,1,3,0,1 +26,3,3,3,1,0,2,4,0,1 +24,4,4,2,1,1,3,3,0,1 +21,3,3,2,1,1,2,2,0,1 +30,4,4,2,0,1,3,1,0,1 +20,4,4,1,1,1,1,4,0,1 +33,4,4,2,1,1,1,3,0,1 +30,4,4,0,0,0,3,3,0,1 +47,4,4,1,1,0,1,3,0,1 +35,4,4,2,0,1,3,3,0,1 +30,2,4,2,1,1,3,4,0,1 +33,4,4,3,1,1,1,4,0,1 +45,4,4,4,1,1,2,3,0,1 +41,4,4,2,1,1,1,4,0,1 +32,4,4,1,1,0,1,3,0,1 +43,4,4,5,1,1,1,4,0,1 +44,4,4,3,1,1,2,4,0,1 +21,1,3,4,1,1,3,2,0,1 +44,3,4,2,1,1,1,4,1,1 +23,4,4,2,1,1,2,4,0,1 +47,1,2,4,1,1,2,2,0,1 +47,1,1,7,1,1,2,3,1,1 +35,4,4,2,1,0,2,4,0,1 +32,2,4,4,1,1,3,2,0,1 +45,1,4,5,1,1,1,2,1,1 +22,2,2,2,1,1,3,1,0,1 +23,1,1,3,1,1,2,1,1,1 +30,4,4,0,1,0,1,4,0,1 +44,1,3,0,1,1,2,3,0,1 +40,3,3,1,1,0,3,3,0,1 +34,4,4,4,1,1,2,3,0,1 +37,3,4,1,1,1,2,4,0,1 +49,3,4,5,1,1,1,4,0,1 +26,4,4,1,1,1,1,4,0,1 +22,4,4,0,1,1,2,4,0,1 +20,3,4,0,1,0,2,4,0,1 +47,4,4,4,1,1,1,4,0,1 +49,2,2,8,1,0,3,1,0,1 +22,2,4,1,1,1,2,4,0,1 +22,3,3,2,1,1,3,4,0,1 +25,3,2,2,1,1,3,2,0,1 +32,2,4,0,1,0,3,4,0,1 +28,4,4,0,0,1,1,3,0,1 +30,2,4,4,1,0,1,4,0,1 +45,2,4,2,1,0,2,4,0,1 +49,2,1,10,1,0,2,4,0,1 +34,4,4,2,1,0,1,4,0,1 +25,2,4,1,1,1,2,2,0,1 +42,1,3,12,1,1,3,3,0,1 +48,2,1,3,1,0,4,3,0,1 +35,3,4,5,1,0,2,2,0,1 +33,2,3,1,1,1,3,4,0,1 +20,2,4,0,1,1,3,2,0,1 +36,2,3,4,1,1,3,1,1,1 +19,3,3,2,1,1,3,2,0,1 +27,3,2,3,1,1,3,2,0,1 +30,1,2,4,1,1,4,1,0,1 +31,3,4,3,1,0,3,2,0,1 +44,1,1,11,1,1,4,1,1,1 +24,3,3,2,1,1,3,3,0,1 +18,3,4,0,1,0,3,1,0,1 +45,1,2,6,1,1,3,3,1,1 +25,2,2,3,1,0,3,1,0,1 +36,3,4,6,1,1,2,4,0,1 +30,1,1,5,1,1,2,2,0,1 +32,2,4,2,1,1,3,3,0,1 +42,1,4,11,0,1,2,2,1,1 +22,2,4,0,1,1,3,3,0,1 +36,2,4,2,1,0,2,4,0,1 +27,2,3,2,1,1,3,3,0,1 +40,3,4,1,1,1,1,2,0,1 +22,2,3,2,1,1,3,1,0,1 +26,2,4,0,1,1,3,1,0,1 +31,3,4,0,1,0,2,3,0,1 +32,4,4,1,1,1,1,4,0,1 +34,2,3,3,1,0,3,2,0,1 +40,3,3,1,0,1,3,4,0,1 +45,1,2,1,1,0,3,3,0,1 +26,3,4,3,1,1,3,2,0,1 +48,1,3,5,1,1,3,2,0,1 +43,1,3,8,1,1,3,1,0,1 +27,3,4,2,1,0,2,2,0,1 +42,3,2,1,1,1,3,3,0,1 +34,3,2,8,1,0,2,3,1,1 +32,3,2,4,1,1,2,2,1,1 +31,3,3,2,1,0,2,3,0,1 +22,2,3,1,1,1,3,3,0,1 +27,3,4,0,1,1,3,3,0,1 +37,1,2,2,1,1,2,2,1,1 +22,1,2,0,1,1,2,4,0,1 +47,4,4,4,1,1,1,4,0,1 +32,4,4,4,1,0,1,3,0,1 +37,3,3,2,1,1,1,4,0,1 +45,1,3,1,1,1,2,3,1,1 +47,1,4,8,1,1,3,3,0,1 +28,3,4,0,1,1,3,2,0,1 +48,1,3,4,1,1,3,4,1,1 +26,2,4,1,1,1,1,3,0,1 +21,3,4,0,1,0,3,1,0,1 +20,2,3,1,1,1,2,4,0,1 +39,1,1,5,1,0,3,1,1,1 +27,2,3,1,1,0,3,4,0,1 +37,2,3,5,1,0,3,2,0,1 +24,4,4,1,1,1,3,3,0,1 +39,3,3,6,1,1,3,3,0,1 +20,3,3,1,1,1,2,3,0,1 +19,3,4,1,1,1,2,3,0,1 +40,3,3,4,1,1,2,2,0,1 +41,1,4,4,1,1,3,3,0,1 +22,4,4,2,1,1,1,3,0,1 +32,3,4,4,1,1,1,4,0,1 +34,4,4,2,0,1,1,4,0,1 +34,4,4,2,1,0,1,3,0,1 +23,4,4,2,1,1,1,4,0,1 +27,4,4,1,1,1,1,2,0,1 +46,3,2,11,1,0,2,2,1,1 +34,4,4,3,0,1,1,2,0,1 +33,4,4,5,1,1,3,3,0,1 +25,3,3,1,1,1,3,2,0,1 +26,4,4,1,1,0,1,4,0,1 +48,1,3,4,1,1,3,3,1,1 +36,4,4,2,1,1,3,3,0,1 +38,3,4,2,0,1,2,4,0,1 +44,1,2,7,1,1,3,4,0,1 +44,2,2,1,1,0,3,2,0,1 +39,3,3,1,0,1,3,4,0,1 +47,1,2,7,1,0,3,2,0,1 +43,1,3,5,1,0,3,2,0,1 +29,3,3,3,1,0,2,4,0,1 +22,3,3,0,1,1,2,2,0,1 +31,2,4,5,1,1,3,2,0,1 +22,4,4,0,1,1,1,3,0,1 +45,3,4,6,1,1,2,4,0,1 +42,3,4,10,1,0,3,2,0,1 +38,3,3,7,1,1,3,1,0,1 +47,1,1,6,1,0,3,1,0,1 +30,4,4,2,1,1,1,4,0,1 +28,3,4,1,1,1,3,4,0,1 +25,3,4,1,1,1,2,1,0,1 +49,2,4,6,0,1,2,3,0,1 +23,3,4,2,1,0,2,3,0,1 +35,3,4,1,0,1,2,3,0,1 +47,2,1,5,0,1,2,4,0,1 +35,2,3,0,1,1,2,4,0,1 +44,3,4,6,1,1,3,4,0,1 +48,4,4,3,1,1,2,4,0,1 +43,2,3,6,1,0,3,3,0,1 +21,2,4,2,1,1,3,1,0,1 +22,4,4,0,1,1,1,4,0,1 +41,3,3,5,1,1,3,4,0,1 +29,2,4,2,1,0,4,4,1,1 +44,4,4,5,0,1,2,4,0,1 +22,4,4,0,1,0,1,4,0,1 +23,2,4,4,1,1,3,3,0,1 +22,2,1,0,1,1,3,2,0,1 +35,1,3,0,1,1,2,2,1,1 +24,4,4,1,1,1,2,2,0,1 +36,4,4,4,1,1,1,4,0,1 +47,1,2,2,1,1,2,4,0,1 +40,4,4,3,1,1,3,4,0,1 +29,4,4,1,1,1,1,3,0,1 +49,3,4,6,1,1,1,4,0,1 +49,3,4,9,1,1,1,4,0,1 +47,4,4,2,1,1,1,4,0,1 +28,4,4,3,0,1,1,4,0,1 +26,4,4,1,1,1,1,4,0,1 +29,1,2,7,1,1,2,4,0,1 +29,4,2,0,1,0,2,2,0,1 +25,3,3,1,1,1,3,4,0,1 +24,2,4,2,1,1,3,4,0,1 +23,4,4,1,1,0,2,4,0,1 +23,4,4,2,1,0,3,3,0,1 +44,1,2,2,1,1,2,4,0,1 +39,3,4,6,1,1,1,4,0,1 +21,3,3,0,1,1,2,2,0,1 +22,3,4,2,1,1,2,3,0,1 +47,3,4,3,1,1,2,3,0,1 +36,3,3,2,1,0,2,4,0,1 +25,1,4,2,1,0,3,3,1,1 +40,4,4,2,1,1,3,4,0,1 +36,2,2,0,0,0,3,3,0,1 +37,2,3,5,0,0,2,4,0,1 +28,1,4,2,1,0,2,3,0,1 +30,3,3,5,1,0,3,4,0,1 +16,3,4,1,1,1,3,3,0,1 +32,2,3,4,0,1,2,4,0,1 +40,4,4,3,0,1,3,4,0,1 +40,1,1,2,1,0,3,4,0,1 +45,3,4,2,0,1,1,4,0,1 +21,1,3,0,1,0,3,4,1,1 +28,4,4,1,0,1,1,3,0,1 +25,4,4,1,0,1,2,3,0,1 +44,1,3,4,1,1,3,3,1,1 +35,4,4,2,0,1,3,4,0,1 +49,4,4,4,1,1,3,4,0,1 +39,3,4,1,0,1,3,4,0,1 +32,3,4,1,0,1,2,4,0,1 +35,1,2,0,1,0,4,4,0,1 +21,1,2,1,1,0,3,4,0,1 +47,4,4,1,0,1,1,4,0,1 +27,4,4,1,0,1,3,4,0,1 +31,2,2,8,1,1,2,2,1,1 +34,4,3,0,0,0,3,3,0,1 +30,4,4,3,1,0,2,4,0,1 +25,4,4,0,1,0,2,4,0,1 +28,3,4,3,1,1,2,1,0,1 +30,2,3,4,1,0,3,2,0,1 +42,3,3,8,1,1,4,3,0,1 +23,4,4,0,0,1,2,4,0,1 +45,3,4,3,0,1,3,4,0,1 +21,4,4,1,1,1,3,3,0,1 +28,4,4,1,0,1,2,4,0,1 +33,4,4,1,0,0,3,4,0,1 +32,1,2,4,1,1,3,2,1,1 +25,2,2,3,1,1,3,3,0,1 +25,3,3,1,1,1,3,1,0,1 +19,2,2,2,1,1,3,1,0,1 +40,1,2,6,1,1,3,1,1,1 +24,2,2,2,1,1,3,1,1,1 +32,2,2,1,1,1,2,1,0,1 +35,2,3,8,1,1,3,2,0,1 +27,2,2,1,1,0,3,2,1,1 +23,2,4,2,1,1,1,4,0,1 +22,2,4,4,1,1,3,4,0,1 +49,2,3,0,1,1,1,2,0,1 +25,2,3,0,1,1,2,4,0,1 +18,3,4,1,1,1,3,1,0,1 +43,3,3,4,1,1,2,4,0,1 +37,1,3,0,1,1,3,4,0,1 +30,2,3,2,1,0,2,4,0,1 +29,3,2,0,1,1,2,2,0,1 +20,2,3,3,1,1,3,4,0,1 +42,3,3,3,1,0,2,4,0,1 +23,4,4,1,1,1,2,3,0,1 +34,2,3,7,1,0,3,3,0,1 +23,3,3,6,1,1,3,3,0,1 +38,3,3,5,1,1,1,4,0,1 +37,2,3,4,1,1,2,3,0,1 +17,2,3,1,1,1,3,2,0,1 +39,3,4,3,1,1,1,4,0,1 +49,1,3,0,1,1,3,3,1,1 +23,3,3,2,1,1,2,2,0,1 +40,3,3,3,1,1,2,2,1,1 +32,2,4,5,1,1,2,3,0,1 +18,2,3,1,1,1,2,3,0,1 +46,1,2,8,1,1,3,3,1,1 +37,3,3,6,1,1,2,2,0,1 +38,2,4,5,0,1,2,2,0,1 +37,2,3,2,0,0,3,3,0,1 +25,2,3,1,1,0,2,1,0,1 +38,2,4,5,1,1,3,3,0,1 +39,4,4,2,1,0,1,4,0,1 +44,4,4,3,1,0,1,4,1,1 +19,4,4,0,0,1,3,4,0,1 +28,2,4,1,1,0,3,4,0,1 +20,2,3,1,1,1,3,4,0,1 +33,4,4,0,1,0,3,3,0,1 +33,4,4,5,1,1,3,4,0,1 +47,1,4,6,1,1,1,4,0,1 +25,3,3,0,1,1,3,4,0,1 +29,4,4,0,1,0,2,4,0,1 +37,4,4,2,0,1,1,4,0,1 +49,1,3,6,1,1,2,4,0,1 +48,1,1,8,1,0,2,2,1,1 +19,2,2,0,1,1,2,2,0,1 +46,1,2,3,1,1,2,1,1,1 +39,1,2,2,1,1,3,1,1,1 +30,3,4,5,1,1,1,4,0,1 +40,2,2,8,1,1,2,2,0,1 +43,1,2,1,1,1,3,4,1,1 +29,3,4,4,1,0,1,3,0,1 +23,3,3,2,1,1,3,3,0,1 +24,2,2,3,1,1,2,4,0,1 +47,3,3,2,1,1,2,4,0,1 +35,3,3,2,1,0,2,2,0,1 +19,3,3,1,1,1,2,4,0,1 +45,2,3,4,1,0,2,4,0,1 +42,2,4,2,1,1,3,4,0,1 +47,1,1,1,1,1,3,4,0,1 +25,2,2,2,1,1,3,1,0,1 +20,2,3,3,1,1,3,4,0,1 +33,3,3,6,1,1,3,4,0,2 +46,4,3,5,1,1,1,4,0,2 +35,4,4,4,1,1,1,4,0,2 +26,4,4,2,1,0,1,4,0,2 +36,3,3,5,1,0,1,3,0,2 +37,3,4,3,1,1,1,3,0,2 +44,2,4,4,1,1,3,3,0,2 +32,4,4,2,1,1,1,4,0,2 +25,2,4,6,1,1,3,4,0,2 +42,2,3,7,1,1,3,4,0,2 +30,4,4,2,0,0,1,4,0,2 +39,4,4,4,1,1,1,4,0,2 +26,1,1,2,1,1,3,4,0,2 +30,2,4,3,1,1,3,4,0,2 +38,4,4,4,0,0,1,2,0,2 +23,4,4,1,1,1,1,2,0,2 +18,3,4,1,1,1,3,4,0,2 +25,3,4,3,1,1,2,3,0,2 +37,4,4,2,1,0,3,3,0,2 +20,3,4,1,1,1,3,2,0,2 +45,4,4,7,1,1,1,4,0,2 +28,2,1,2,1,0,3,3,0,2 +33,2,2,3,1,1,2,3,0,2 +28,2,3,2,1,1,3,3,0,2 +30,2,4,1,1,0,3,4,0,2 +32,4,4,4,1,1,2,4,0,2 +48,4,3,7,1,0,2,4,0,2 +46,4,4,2,1,0,1,4,0,2 +32,4,4,2,0,0,1,4,0,2 +49,4,4,10,1,1,1,4,0,2 +33,2,2,6,1,0,3,4,0,2 +39,4,4,3,1,1,1,4,0,2 +35,4,4,5,0,0,1,4,0,2 +36,4,4,3,0,1,1,3,0,2 +20,3,4,1,1,1,2,4,0,2 +23,4,4,1,1,1,3,4,0,2 +26,2,4,2,1,1,1,3,0,2 +25,3,3,1,1,1,3,1,0,2 +31,4,4,1,1,1,1,4,0,2 +36,4,4,2,1,1,2,4,0,2 +32,3,3,2,1,0,3,4,0,2 +36,4,4,3,1,1,1,4,0,2 +40,4,4,3,1,1,1,4,0,2 +46,4,4,4,1,1,1,4,0,2 +42,4,4,8,0,1,1,4,0,2 +39,4,4,4,1,0,1,4,0,2 +34,4,4,2,1,1,1,4,0,2 +36,4,4,3,1,1,1,4,0,2 +37,4,4,3,1,1,1,4,0,2 +36,4,4,4,0,1,1,4,0,2 +38,4,4,2,1,1,1,4,0,2 +27,3,3,1,0,0,2,4,0,2 +37,4,3,8,1,1,1,4,0,2 +24,1,4,1,1,0,4,2,1,2 +42,2,4,8,1,1,1,4,0,2 +31,4,4,3,0,0,4,4,0,2 +34,2,3,2,1,1,3,3,0,2 +34,4,4,4,1,1,3,3,0,2 +36,4,4,4,0,0,1,4,0,2 +47,4,4,8,1,1,1,4,0,2 +34,4,4,3,1,1,1,4,0,2 +44,4,4,6,0,1,1,3,0,2 +21,4,4,1,1,1,1,4,0,2 +42,4,4,6,1,1,1,3,0,2 +44,4,4,4,1,0,2,3,0,2 +19,4,4,1,1,1,2,3,0,2 +35,1,3,7,1,0,2,3,1,2 +24,4,4,1,1,1,3,2,0,2 +32,3,4,7,0,1,1,3,0,2 +31,3,3,2,1,0,3,3,0,2 +47,3,4,11,1,0,2,3,0,2 +38,4,4,6,1,0,3,3,0,2 +40,4,4,4,1,1,1,3,0,2 +35,3,3,4,1,1,3,2,0,2 +26,3,4,3,1,1,3,4,0,2 +23,4,3,3,1,1,3,3,0,2 +40,4,4,6,0,0,1,4,0,2 +37,4,4,3,1,1,1,4,0,2 +39,4,4,5,1,1,2,4,0,2 +25,4,4,2,1,1,2,4,0,2 +48,4,4,4,0,1,1,4,0,2 +31,4,4,3,1,1,1,4,0,2 +26,4,4,1,0,1,2,4,0,2 +44,4,4,5,1,0,1,4,0,2 +29,4,4,1,1,0,2,4,0,2 +36,2,1,6,1,1,2,1,0,2 +29,4,4,2,1,0,1,3,0,2 +37,2,3,7,1,1,3,4,0,2 +28,3,3,3,1,1,1,2,0,2 +40,2,3,6,1,1,1,2,0,2 +33,4,4,4,1,1,1,4,0,2 +22,4,4,1,1,1,1,2,0,2 +35,3,4,5,1,0,1,3,1,2 +32,4,4,3,0,1,3,3,0,2 +35,4,4,5,1,0,1,3,0,2 +29,4,4,2,1,1,1,4,0,2 +23,3,3,2,1,0,3,4,0,2 +35,4,4,2,1,0,1,4,0,2 +36,4,4,3,1,0,2,4,0,2 +32,4,4,2,1,0,1,4,0,2 +30,4,1,4,1,1,3,3,0,2 +36,4,4,4,0,1,2,4,0,2 +33,4,4,3,1,1,3,4,0,2 +33,3,4,5,0,1,3,3,0,2 +43,2,4,13,1,1,2,3,0,2 +35,3,3,6,1,1,2,3,0,2 +38,4,4,5,1,1,1,3,0,2 +25,3,1,4,1,1,3,1,0,2 +26,3,3,2,1,1,3,2,0,2 +24,4,4,1,1,1,3,4,0,2 +22,3,4,1,1,1,4,4,0,2 +33,2,3,5,1,0,2,1,0,2 +45,3,3,7,1,1,3,4,0,2 +29,4,4,2,1,0,1,3,0,2 +47,2,2,7,1,1,2,4,0,2 +36,3,2,6,1,1,3,2,0,2 +45,3,3,8,1,1,2,3,0,2 +47,4,4,6,1,0,1,4,0,2 +43,3,4,2,1,0,2,4,0,2 +44,4,4,7,1,1,3,2,0,2 +24,2,4,2,1,1,3,3,0,2 +28,4,4,2,1,0,1,3,0,2 +34,4,4,5,1,1,3,4,0,2 +31,3,4,4,1,1,1,3,0,2 +27,4,4,3,1,1,1,4,0,2 +27,3,3,1,1,0,3,4,0,2 +26,4,4,1,1,0,1,3,0,2 +36,3,4,7,1,1,2,2,0,2 +35,4,4,4,0,1,3,3,0,2 +38,4,4,6,1,1,3,3,0,2 +44,4,4,7,1,1,2,4,0,2 +25,4,4,1,1,1,1,4,0,2 +25,4,4,2,0,1,1,3,0,2 +41,4,4,4,1,1,1,4,0,2 +41,3,4,5,1,1,1,3,0,2 +24,4,4,1,1,0,1,4,0,2 +33,4,4,3,1,1,3,3,0,2 +29,4,4,3,1,0,3,3,0,2 +47,4,4,4,1,0,1,4,0,2 +28,4,4,4,1,1,1,3,0,2 +21,2,2,1,1,1,3,2,0,2 +32,3,3,6,1,0,3,3,0,2 +30,3,4,2,1,1,1,4,0,2 +37,4,4,5,1,1,3,4,0,2 +29,4,3,4,1,0,3,2,0,2 +38,4,4,3,1,0,1,4,0,2 +49,3,3,11,1,1,1,4,0,2 +41,3,3,5,1,1,1,4,0,2 +43,3,4,5,1,1,3,2,1,2 +47,1,1,10,1,1,3,3,0,2 +22,4,4,1,1,1,1,3,0,2 +27,4,4,1,0,0,1,4,0,2 +34,3,4,2,0,1,2,3,0,2 +42,3,3,4,1,1,2,4,0,2 +39,4,4,3,0,0,1,4,0,2 +36,4,4,3,0,1,2,4,0,2 +21,4,4,1,1,1,2,1,0,2 +36,3,4,4,0,0,2,4,0,2 +25,2,3,1,1,0,4,4,0,2 +41,4,4,4,0,0,2,4,0,2 +32,4,4,4,0,0,2,4,0,2 +41,4,4,4,0,0,2,4,0,2 +43,4,4,3,0,1,1,4,0,2 +35,4,4,3,1,1,2,3,0,2 +24,4,4,2,1,0,1,3,0,2 +43,4,4,6,1,1,1,4,0,2 +48,4,4,7,0,1,1,4,0,2 +28,4,4,2,1,1,1,3,0,2 +24,4,4,1,1,1,1,4,0,2 +42,4,4,3,1,0,1,4,0,2 +39,4,4,3,1,1,1,4,0,2 +24,4,4,1,1,1,1,4,0,2 +33,4,3,5,1,1,2,4,0,2 +29,4,4,2,1,1,3,4,0,2 +44,4,4,5,1,1,1,4,0,2 +17,4,4,1,1,1,2,4,0,2 +35,3,4,3,1,1,2,2,0,2 +32,3,4,5,1,1,1,2,0,2 +27,4,4,2,1,0,1,3,0,2 +44,4,4,4,1,1,1,4,0,2 +42,4,4,5,1,1,1,4,0,2 +40,4,4,6,1,1,1,3,0,2 +44,4,4,3,1,1,1,4,0,2 +33,4,4,5,1,1,2,4,0,2 +35,2,4,3,0,0,3,4,1,2 +31,4,2,2,0,1,1,3,0,2 +37,4,4,3,0,1,3,4,0,2 +45,4,4,3,0,1,2,4,0,2 +26,4,4,2,0,1,1,4,0,2 +40,3,4,2,0,1,3,4,0,2 +30,4,4,1,0,1,2,4,0,2 +36,3,4,3,0,0,3,4,0,2 +33,3,4,3,0,1,2,4,0,2 +41,4,4,5,0,1,2,4,0,2 +45,3,3,6,0,1,2,4,0,2 +48,4,4,6,0,1,2,4,0,2 +35,4,4,3,0,0,3,4,0,2 +37,4,4,4,0,0,2,4,0,2 +46,4,4,3,0,0,1,4,0,2 +38,4,4,4,0,1,3,4,0,2 +30,3,4,7,1,1,2,4,0,2 +42,4,3,7,1,0,1,4,0,2 +35,2,2,6,1,1,3,4,0,2 +34,4,4,6,1,1,3,4,0,2 +37,4,4,4,1,1,1,4,0,2 +38,4,4,6,1,1,1,4,0,2 +30,3,3,2,1,1,2,3,0,2 +46,4,4,4,1,1,1,4,0,2 +31,4,4,3,0,1,2,4,0,2 +41,4,4,6,0,1,1,4,0,2 +41,4,4,7,1,1,2,4,0,2 +32,4,4,2,0,0,2,4,0,2 +44,4,4,4,1,1,1,4,0,2 +39,4,4,4,0,1,1,4,0,2 +39,4,4,5,1,1,1,4,0,2 +45,4,4,4,1,1,1,4,0,2 +33,4,4,3,1,1,1,4,0,2 +39,4,4,3,0,1,1,4,0,2 +44,4,4,3,1,0,1,4,0,2 +34,3,3,6,1,1,3,4,0,2 +33,3,3,5,1,1,3,4,0,2 +34,2,2,8,1,1,2,2,0,2 +27,3,2,5,1,1,2,4,0,2 +47,1,1,8,1,1,3,4,1,2 +25,2,4,3,1,1,1,4,1,2 +24,3,4,5,1,1,1,2,1,2 +41,4,4,4,1,0,1,4,0,2 +29,3,3,4,1,1,3,4,0,3 +27,2,2,5,1,1,3,1,0,3 +40,3,4,5,1,1,1,2,0,3 +30,2,2,6,1,1,3,1,0,3 +24,4,4,1,1,0,1,4,0,3 +36,4,4,2,1,0,1,4,0,3 +17,2,2,1,1,1,3,2,0,3 +28,1,2,4,1,1,2,3,0,3 +27,2,4,1,1,1,1,4,0,3 +21,3,3,1,1,1,3,3,0,3 +30,2,2,4,1,1,2,4,0,3 +48,4,4,16,1,1,1,4,0,3 +29,2,4,3,1,0,3,3,0,3 +29,4,4,2,1,1,3,4,0,3 +20,3,4,2,1,1,1,3,0,3 +28,4,4,1,1,1,3,2,0,3 +32,2,3,5,1,0,2,3,0,3 +27,3,3,1,1,0,3,3,0,3 +25,2,3,1,1,1,3,1,0,3 +43,4,4,3,1,1,1,4,0,3 +35,4,4,2,1,1,2,4,0,3 +30,4,4,1,1,1,1,4,0,3 +29,1,4,3,1,1,4,4,1,3 +33,3,4,8,1,1,3,4,0,3 +37,3,4,5,1,0,2,4,0,3 +27,2,4,3,1,1,4,4,0,3 +33,2,4,3,1,1,2,4,0,3 +35,2,3,6,1,0,3,3,0,3 +20,3,3,2,1,1,2,4,0,3 +26,2,4,3,1,1,3,4,0,3 +24,3,3,2,1,1,3,3,0,3 +45,1,3,3,1,1,3,2,0,3 +34,3,4,4,1,1,1,3,0,3 +49,4,3,13,1,1,1,4,0,3 +33,4,4,5,1,1,1,4,0,3 +33,3,3,8,1,1,3,4,0,3 +24,3,4,3,1,1,1,4,0,3 +30,2,2,4,1,1,2,1,0,3 +27,2,4,4,1,1,2,1,0,3 +23,4,3,1,1,1,2,2,0,3 +35,4,4,4,1,1,1,4,0,3 +35,4,4,1,0,1,1,4,0,3 +40,4,4,2,0,0,1,4,0,3 +29,3,3,1,1,1,3,3,0,3 +33,3,3,3,1,1,3,3,0,3 +36,4,4,6,0,1,1,2,1,3 +36,4,4,4,0,1,1,4,0,3 +41,4,4,1,1,1,3,3,0,3 +38,3,4,3,1,1,3,2,0,3 +29,2,4,3,1,1,3,3,0,3 +19,4,4,1,1,1,1,3,0,3 +34,2,3,2,1,1,2,3,0,3 +26,2,4,3,1,1,3,4,0,3 +22,4,4,1,1,1,2,3,0,3 +42,4,4,7,1,1,2,4,0,3 +27,3,4,2,1,1,3,2,0,3 +27,4,4,2,1,1,1,4,0,3 +39,4,3,1,1,0,2,2,0,3 +21,4,4,1,1,1,3,1,0,3 +36,2,3,7,1,1,3,3,0,3 +29,1,2,5,1,0,1,2,0,3 +29,2,3,4,1,1,2,1,0,3 +22,3,2,2,1,1,2,1,0,3 +20,2,3,1,1,1,2,1,0,3 +33,3,4,4,1,0,2,4,0,3 +27,3,3,3,1,1,2,3,0,3 +25,4,4,3,1,1,1,4,0,3 +25,4,3,2,1,1,3,3,0,3 +32,2,3,4,1,1,3,2,0,3 +39,3,4,2,1,1,1,3,0,3 +31,3,3,3,1,1,2,1,1,3 +26,4,4,4,1,1,3,4,0,3 +30,3,3,7,1,1,3,4,0,3 +43,3,3,5,1,0,3,3,0,3 +34,2,4,4,1,1,3,3,0,3 +43,4,4,3,1,1,1,4,0,3 +32,4,4,3,0,1,1,4,0,3 +41,4,4,5,1,1,1,4,0,3 +32,4,4,3,0,1,1,4,0,3 +46,4,4,4,1,1,1,4,0,3 +40,3,4,3,1,0,1,4,0,3 +21,4,4,1,1,1,2,3,0,3 +32,4,4,3,1,1,1,4,0,3 +25,4,4,1,0,1,3,3,0,3 +24,4,4,1,1,1,1,3,0,3 +21,2,3,1,1,0,3,2,0,3 +22,4,4,1,1,1,3,3,0,3 +32,4,4,4,1,1,1,3,0,3 +30,4,4,2,1,0,2,2,0,3 +25,1,2,2,1,1,2,1,0,3 +31,3,3,6,0,1,3,1,0,3 +19,2,4,1,1,1,2,3,0,3 +33,2,2,7,1,0,2,3,0,3 +24,2,2,2,1,1,3,4,0,3 +19,3,3,3,1,1,2,3,0,3 +27,2,2,5,1,1,3,3,0,3 +32,4,4,2,0,0,1,4,0,3 +32,4,4,2,1,0,1,3,0,3 +29,1,3,5,1,1,3,3,0,3 +23,3,4,1,1,1,2,3,0,3 +34,2,4,7,1,1,2,3,0,3 +27,2,4,1,1,1,3,3,0,3 +37,4,4,4,1,1,3,2,0,3 +26,3,4,4,1,1,2,3,0,3 +31,2,3,7,1,1,3,3,0,3 +44,4,4,11,1,1,1,4,0,3 +35,3,4,4,1,1,1,4,0,3 +23,4,4,2,1,1,3,4,0,3 +24,2,4,2,1,1,1,4,0,3 +24,4,4,2,1,1,1,4,0,3 +39,4,4,3,1,1,2,4,0,3 +33,3,4,4,1,1,3,3,0,3 +24,2,3,2,1,1,2,1,0,3 +35,4,4,4,1,1,1,4,0,3 +35,4,4,6,1,1,1,4,0,3 +34,4,4,2,1,1,3,3,0,3 +48,3,4,3,1,1,2,3,0,3 +28,4,4,1,1,1,1,3,0,3 +26,4,4,1,1,1,3,3,0,3 +43,3,3,8,1,1,1,3,0,3 +28,2,2,5,1,0,2,4,0,3 +22,3,4,3,1,1,2,3,0,3 +26,3,3,3,1,1,3,3,0,3 +30,3,4,4,1,1,3,3,0,3 +38,4,4,5,1,1,2,3,0,3 +44,4,4,8,1,1,2,4,0,3 +25,4,4,1,0,1,1,4,0,3 +34,4,4,3,1,1,1,4,0,3 +26,4,4,3,1,1,3,4,0,3 +20,4,4,2,1,1,1,3,0,3 +39,4,4,2,0,1,1,3,0,3 +27,3,4,4,1,1,3,3,0,3 +32,4,4,2,1,0,3,4,0,3 +48,3,4,8,1,0,1,4,0,3 +39,4,3,4,1,1,3,4,0,3 +37,4,4,3,1,0,1,4,0,3 +33,4,4,2,0,0,1,3,0,3 +32,4,4,3,1,0,1,4,0,3 +25,4,4,2,1,1,1,3,0,3 +37,4,4,3,1,1,2,4,0,3 +40,4,4,4,1,1,1,4,0,3 +38,4,4,6,1,1,2,4,0,3 +36,4,4,4,1,1,1,4,0,3 +27,3,3,3,1,1,2,2,0,3 +22,1,3,2,1,1,3,1,0,3 +22,2,2,2,1,1,2,3,0,3 +30,3,4,3,1,1,2,3,0,3 +20,2,2,2,1,1,3,2,1,3 +34,4,4,2,1,1,1,4,0,3 +31,3,4,5,1,1,3,1,0,3 +30,3,3,3,1,0,3,2,0,3 +44,3,4,5,1,0,1,4,0,3 +24,3,3,3,1,0,2,1,0,3 +19,4,4,2,1,1,1,4,0,3 +28,4,4,5,1,1,2,4,0,3 +27,4,4,1,0,0,1,3,0,3 +29,3,3,3,1,1,2,1,0,3 +37,4,4,3,1,1,2,4,0,3 +32,2,2,8,1,1,2,1,0,3 +21,2,2,1,1,1,4,3,0,3 +33,2,3,7,1,0,3,1,0,3 +23,2,3,2,1,1,3,1,0,3 +36,2,2,5,1,1,3,4,0,3 +33,2,4,3,1,1,3,4,0,3 +35,4,4,2,1,0,1,4,0,3 +25,2,3,4,1,1,3,3,0,3 +29,2,4,4,1,0,2,4,0,3 +23,3,3,1,1,1,2,2,0,3 +19,3,3,1,1,1,2,1,0,3 +35,1,2,6,1,1,2,2,1,3 +25,3,3,3,1,1,3,2,0,3 +40,3,4,6,1,1,1,3,0,3 +17,3,4,1,1,1,2,1,0,3 +25,2,4,3,1,1,3,3,0,3 +24,3,3,1,1,1,3,2,0,3 +23,4,4,1,1,1,3,3,0,3 +25,2,4,3,1,1,3,2,0,3 +30,1,3,4,1,1,3,4,0,3 +31,1,1,3,1,1,4,2,1,3 +26,3,4,2,1,1,3,3,0,3 +28,3,4,2,1,1,2,3,0,3 +30,3,3,3,1,1,3,1,0,3 +29,3,4,5,1,1,1,2,0,3 +24,1,3,4,1,1,3,3,0,3 +26,3,4,2,1,1,1,3,0,3 +25,3,3,3,1,1,3,3,0,3 +35,4,4,3,1,1,1,4,0,3 +22,4,4,1,1,0,2,4,0,3 +19,4,4,1,1,1,2,4,0,3 +29,2,3,5,1,1,2,4,0,3 +21,3,4,2,1,1,3,3,0,3 +21,3,3,1,1,1,3,3,0,3 +41,1,4,9,1,1,2,1,0,3 +37,2,4,3,1,1,2,3,0,3 +27,4,4,3,1,1,3,4,1,3 +26,2,3,2,1,1,2,3,0,3 +37,4,4,6,1,0,3,4,0,3 +25,3,3,3,1,1,2,1,0,3 +32,4,3,3,1,1,2,4,0,3 +34,1,4,4,1,1,3,4,1,3 +23,4,4,2,1,0,2,4,0,3 +28,3,4,2,1,1,3,4,0,3 +24,3,4,1,1,1,3,4,0,3 +32,2,3,4,1,0,2,2,0,3 +22,1,2,3,1,1,3,1,1,3 +25,3,3,1,1,1,2,1,0,3 +25,2,3,2,1,1,2,4,0,3 +38,2,3,3,1,1,2,4,0,3 +33,2,2,2,1,1,3,4,0,3 +41,4,4,8,1,1,1,4,0,3 +29,3,3,4,1,1,3,4,0,3 +22,3,4,1,1,0,1,4,0,3 +29,3,3,6,1,1,3,3,0,3 +26,3,4,3,1,1,3,3,0,3 +28,2,3,3,1,1,3,4,0,3 +27,4,4,1,0,1,3,4,0,3 +29,2,4,2,1,1,3,2,0,3 +24,3,4,2,1,1,3,3,0,3 +29,3,4,3,1,1,3,2,0,3 +38,3,4,7,1,1,3,2,0,3 +23,3,2,2,1,0,3,2,0,3 +20,4,3,1,1,1,3,4,0,3 +32,1,4,4,1,1,3,2,0,3 +25,2,3,2,1,1,3,1,0,3 +26,1,2,3,1,0,3,2,0,3 +23,1,2,3,1,1,3,2,1,3 +23,4,4,3,1,1,3,3,0,3 +28,3,4,5,1,1,2,4,0,3 +22,4,4,3,1,1,3,2,0,3 +28,2,4,4,1,1,3,4,0,3 +26,3,3,3,1,1,3,3,0,3 +26,2,3,2,1,1,3,3,0,3 +24,4,3,3,1,1,3,3,0,3 +29,4,4,3,1,0,1,4,0,3 +29,3,4,4,1,0,1,3,0,3 +42,4,4,5,1,1,1,4,0,3 +27,4,4,2,1,1,3,4,0,3 +35,3,4,5,1,1,1,4,0,3 +21,3,4,1,1,1,3,2,0,3 +21,1,3,1,1,1,3,3,1,3 +22,3,4,1,1,1,3,3,0,3 +28,3,3,4,1,1,3,3,0,3 +22,3,4,1,0,0,1,4,0,3 +23,3,2,1,1,1,3,3,0,3 +28,3,3,2,0,1,2,3,0,3 +30,4,4,3,0,0,2,4,0,3 +25,3,4,3,1,0,3,4,0,3 +33,4,4,4,1,1,2,3,0,3 +33,3,4,6,1,1,3,2,0,3 +30,4,4,2,0,0,3,3,0,3 +22,2,4,1,1,1,3,3,0,3 +38,3,3,2,0,1,3,4,0,3 +35,4,3,2,0,1,3,4,0,3 +34,2,2,4,0,1,3,2,0,3 +39,4,4,2,0,1,3,4,0,3 +47,4,3,4,1,1,1,3,0,3 +38,4,4,2,1,0,1,4,0,3 +43,4,4,5,1,1,1,4,0,3 +21,3,3,1,1,1,2,2,0,3 +30,3,4,2,1,1,1,2,0,3 +27,3,4,2,1,1,1,3,0,3 +22,4,4,1,0,1,3,1,0,3 +25,1,2,3,1,1,2,3,0,3 +22,1,3,2,1,1,3,2,0,3 +28,4,4,4,1,1,2,3,0,3 +25,3,3,2,1,1,2,3,0,3 +26,4,4,2,1,0,3,3,0,3 +31,3,3,3,1,1,3,1,1,3 +32,1,3,4,1,1,3,3,0,3 +35,2,4,6,1,1,3,4,0,3 +24,2,3,5,1,1,3,3,0,3 +28,4,4,2,1,1,1,4,0,3 +36,4,4,3,0,0,2,4,0,3 +47,4,4,5,1,1,1,3,0,3 +26,4,4,2,1,0,1,4,0,3 +22,3,4,2,0,1,3,4,0,3 +30,4,4,2,1,1,4,3,0,3 +41,4,4,5,1,1,1,4,0,3 +19,4,4,1,1,1,3,2,0,3 +45,3,4,2,0,1,3,3,0,3 +35,1,2,5,1,1,2,2,1,3 +21,2,2,1,1,1,3,2,0,3 +32,1,2,6,0,1,2,3,0,3 +32,3,4,5,0,1,3,4,0,3 +46,2,3,6,0,0,3,4,0,3 +41,1,2,6,1,1,3,3,0,3 +36,4,4,3,0,1,3,4,0,3 +37,3,4,3,0,1,3,4,0,3 +37,3,4,4,0,1,2,4,0,3 +35,4,4,3,0,1,3,4,0,3 +29,2,3,4,1,1,3,2,0,3 +28,4,4,2,0,1,2,4,0,3 +46,4,4,4,0,1,1,4,0,3 +34,4,3,3,0,1,2,4,0,3 +43,3,3,2,0,0,3,4,0,3 +28,4,4,3,0,0,3,4,0,3 +28,3,3,3,1,0,2,4,0,3 +34,4,4,6,1,1,2,2,0,3 +27,2,4,4,1,1,3,4,0,3 +36,1,3,6,1,1,3,2,0,3 +17,2,2,0,1,0,3,2,0,3 +21,3,3,1,1,1,3,2,0,3 +25,2,2,1,1,1,3,1,0,3 +23,2,3,2,1,0,3,2,0,3 +25,2,2,1,1,1,3,3,0,3 +35,1,2,4,1,0,4,4,0,3 +32,3,4,4,1,1,3,2,0,3 +37,2,3,5,1,1,4,2,0,3 +31,3,4,4,1,0,3,3,0,3 +25,3,4,3,1,1,3,4,0,3 +26,3,4,4,1,1,2,4,0,3 +39,1,2,2,1,0,2,4,0,3 +21,3,3,2,1,1,2,3,0,3 +35,3,2,9,1,0,3,4,0,3 +20,2,2,1,1,1,3,2,0,3 +40,2,3,5,1,1,3,3,0,3 +41,3,3,7,0,1,2,4,0,3 +36,2,4,8,1,1,1,4,0,3 +40,2,4,3,0,1,3,4,0,3 +32,4,4,3,1,0,1,4,0,3 +24,3,4,4,1,1,2,3,0,3 +20,3,4,1,0,1,2,4,0,3 +32,4,4,4,1,0,1,4,0,3 +22,2,2,3,1,0,3,3,0,3 +30,3,3,4,1,0,2,2,0,3 +31,4,4,3,1,0,1,4,0,3 +35,3,4,5,1,1,1,4,0,3 +38,4,4,2,1,1,3,4,0,3 +31,4,4,1,1,1,1,4,0,3 +25,4,4,2,1,1,2,4,0,3 +30,4,4,2,1,1,1,4,0,3 +22,1,2,2,1,1,3,4,0,3 +31,4,4,3,1,1,1,4,0,3 +29,4,4,3,1,1,3,4,0,3 +29,2,3,3,1,0,3,2,0,3 +38,4,4,3,0,0,3,3,1,3 +22,3,4,2,1,1,2,4,0,3 +45,4,4,3,1,1,1,4,0,3 +26,3,4,3,1,1,3,2,0,3 +37,4,4,3,0,1,3,4,0,3 +36,4,4,3,0,1,2,4,0,3 +33,4,4,2,1,1,2,4,0,3 +32,4,4,3,1,0,1,4,0,3 +35,4,4,4,0,0,1,4,0,3 +25,4,4,1,1,1,1,4,0,3 +31,4,4,3,1,1,4,4,0,3 +25,2,3,5,1,1,2,3,0,3 +26,3,2,5,1,1,2,2,0,3 +23,2,3,3,1,1,2,3,0,3 +28,3,4,3,1,1,1,4,0,3 +34,3,4,3,0,0,3,4,0,3 +46,3,4,9,1,1,3,4,0,3 +25,4,4,1,1,1,1,4,0,3 +21,2,1,3,1,0,3,1,1,3 +25,2,3,4,1,0,3,2,0,3 +28,2,3,6,1,1,2,4,0,3 +36,2,4,11,1,1,1,4,1,3 +46,1,2,9,1,0,3,4,1,3 +35,2,2,6,1,0,3,1,1,1 +41,3,2,11,1,1,2,3,0,1 +27,2,4,1,1,0,1,1,0,1 +25,4,4,0,1,0,3,4,0,1 +23,2,2,2,1,1,3,3,0,1 +48,1,1,1,1,0,3,3,1,1 +23,4,4,0,1,0,1,4,0,1 +31,3,4,2,1,1,3,3,0,1 +49,4,4,1,1,1,3,4,0,1 +42,2,3,2,1,1,1,4,0,1 +26,2,4,3,1,1,3,4,0,1 +21,2,2,1,1,1,3,2,0,1 +29,3,4,4,1,1,1,4,0,1 +38,1,2,12,1,1,2,3,0,1 +25,4,4,2,1,1,3,2,0,1 +22,4,4,0,1,1,3,2,0,1 +20,3,4,0,1,1,3,3,0,1 +35,4,4,1,1,1,1,3,0,1 +32,2,3,1,1,1,3,3,0,1 +38,2,4,3,1,1,1,3,0,1 +27,1,2,4,1,1,1,4,1,1 +41,2,4,1,1,1,2,3,0,1 +28,3,4,0,1,0,1,3,0,1 +23,4,4,1,1,0,3,3,0,1 +27,4,4,1,0,0,2,4,0,1 +33,4,4,2,0,1,1,4,0,1 +39,2,2,5,1,0,3,2,1,1 +41,2,2,5,0,1,2,2,0,1 +40,2,2,8,1,1,1,3,0,1 +43,3,4,10,1,1,3,3,0,1 +35,3,4,6,1,0,2,2,0,1 +32,3,4,0,1,1,3,4,0,1 +49,2,3,4,1,1,2,3,0,1 +47,2,2,4,1,1,3,1,0,1 +42,4,4,1,1,1,2,4,0,1 +48,4,4,4,0,1,1,4,0,1 +42,4,4,3,1,1,1,4,0,1 +37,4,4,2,1,1,1,4,0,1 +23,3,3,1,1,0,2,4,0,1 +24,3,4,0,1,0,2,3,0,1 +43,2,3,3,0,1,2,3,0,1 +24,3,3,2,1,0,3,2,0,1 +29,2,4,0,1,0,3,4,0,1 +45,1,1,0,0,0,2,1,0,1 +31,4,4,3,1,0,2,3,0,1 +44,1,4,9,1,1,1,2,0,1 +28,2,3,1,1,1,3,1,0,1 +28,3,4,1,0,1,2,2,0,1 +33,1,2,0,1,0,3,3,0,1 +43,4,4,6,1,1,1,3,0,1 +34,3,4,4,1,1,1,3,0,1 +36,1,4,2,1,1,2,2,0,1 +22,4,4,0,1,0,2,4,0,1 +35,2,3,8,1,1,3,3,1,1 +25,4,4,1,1,1,1,4,0,1 +43,1,2,8,1,1,2,2,1,1 +46,1,4,8,1,1,1,4,1,1 +27,3,4,2,1,1,1,3,0,1 +30,1,1,7,1,1,2,3,0,1 +25,4,4,1,1,1,3,4,0,1 +42,4,4,1,1,0,1,4,0,1 +30,1,3,1,1,1,3,4,0,1 +27,3,3,4,1,1,2,4,0,1 +45,2,3,11,1,1,2,3,0,1 +29,3,4,2,1,1,1,3,0,1 +36,1,4,1,1,1,3,3,0,1 +49,1,2,8,1,1,3,1,1,1 +47,1,4,7,1,1,2,3,0,1 +30,4,4,4,1,1,2,4,0,1 +24,2,3,2,1,1,3,1,0,1 +48,1,1,6,1,1,2,3,1,1 +47,1,2,2,1,1,2,3,1,1 +24,3,4,1,1,0,3,3,0,1 +48,3,4,5,1,1,2,3,0,1 +38,1,2,8,1,1,3,3,1,1 +45,3,4,0,1,1,1,3,0,1 +43,4,4,3,0,1,2,4,0,1 +33,1,1,5,1,1,3,1,1,1 +37,3,4,7,1,1,3,4,0,1 +36,2,1,6,1,1,2,3,0,1 +25,3,4,3,1,1,1,1,0,1 +49,4,4,6,0,0,1,4,0,1 +30,4,4,1,1,0,1,4,0,1 +35,4,4,5,1,1,1,4,0,1 +28,2,4,0,1,1,3,1,0,1 +30,4,2,0,1,0,3,3,0,1 +27,4,4,2,1,0,1,4,0,1 +45,2,4,8,1,1,2,3,0,1 +46,3,1,5,1,1,3,2,0,1 +28,1,4,0,1,0,4,1,0,1 +21,2,4,0,1,1,2,2,0,1 +20,3,4,2,1,1,3,3,0,1 +28,3,3,5,1,1,3,3,0,1 +25,3,3,1,1,1,2,2,0,1 +38,1,2,6,1,1,2,1,1,1 +20,3,4,1,1,1,3,2,0,1 +24,3,4,2,1,1,2,4,0,1 +39,3,1,1,1,1,2,3,0,1 +25,1,3,1,1,1,4,2,0,1 +23,3,4,4,1,1,3,1,1,1 +24,4,4,1,1,0,1,3,0,1 +26,4,4,3,1,1,1,4,0,1 +20,3,4,2,1,1,3,2,0,1 +31,3,3,1,1,0,3,4,0,1 +22,4,4,0,1,1,2,1,1,1 +36,2,3,6,1,1,2,3,0,1 +45,3,4,0,1,1,1,3,0,1 +47,2,2,7,1,1,2,2,0,1 +30,2,3,1,1,1,2,1,0,1 +35,4,4,3,1,1,1,4,0,1 +34,2,2,9,1,0,2,3,0,1 +28,4,4,1,1,0,1,3,0,1 +18,3,4,1,1,1,3,3,0,1 +25,2,3,2,1,1,3,2,0,1 +27,3,4,0,1,0,3,3,0,1 +21,4,4,1,1,1,3,4,0,1 +19,4,4,1,1,1,1,3,0,1 +26,4,4,0,1,1,3,4,0,1 +28,4,4,5,1,1,1,4,0,1 +38,1,3,4,1,0,2,2,0,1 +39,2,3,10,1,1,3,4,0,1 +45,2,3,6,1,1,3,2,1,1 +30,3,4,4,0,1,2,3,0,1 +47,2,4,2,1,1,3,2,1,1 +38,2,2,6,1,1,3,4,0,1 +42,3,3,5,1,1,2,2,0,1 +31,4,4,2,1,1,1,2,0,1 +44,1,2,2,1,1,3,1,0,1 +42,4,4,3,1,0,1,4,0,1 +28,4,4,2,1,1,1,3,0,1 +34,2,4,6,1,0,3,4,0,1 +45,1,3,7,1,0,1,3,0,1 +43,4,4,5,1,1,1,3,0,1 +28,3,4,0,1,0,3,4,0,1 +27,3,4,0,1,1,3,3,0,1 +26,2,3,1,1,0,4,4,0,1 +26,3,4,1,0,1,2,2,0,1 +37,3,4,4,1,0,2,4,0,1 +48,3,4,11,1,1,1,4,0,1 +47,2,3,12,1,1,3,1,0,1 +22,2,4,1,1,1,3,4,0,1 +48,4,4,1,0,1,1,4,0,1 +42,1,3,12,1,1,2,4,0,1 +32,4,4,3,1,1,1,4,0,1 +33,4,4,3,0,0,1,3,0,1 +45,4,4,1,1,0,1,4,0,1 +26,2,3,1,1,0,3,4,1,1 +45,4,4,1,1,1,1,4,0,1 +25,3,3,1,1,0,2,4,0,1 +36,4,3,3,1,0,3,2,0,1 +31,3,3,2,1,0,3,3,0,1 +22,3,4,2,1,1,3,3,0,1 +46,4,4,10,1,1,1,3,0,1 +26,2,3,3,1,1,3,4,0,1 +25,3,2,1,1,0,3,3,0,1 +20,4,4,0,0,0,2,4,0,1 +31,3,4,3,0,0,2,4,0,1 +36,3,3,3,0,0,2,3,1,1 +47,3,2,5,1,1,4,4,0,1 +43,3,4,2,0,1,3,4,0,1 +20,3,4,0,1,1,3,3,0,1 +24,4,4,4,1,1,1,4,0,1 +33,2,2,3,0,0,2,4,0,1 +41,3,4,3,0,1,2,4,0,1 +48,3,4,4,0,1,2,4,0,1 +32,4,4,1,0,1,1,4,0,1 +38,3,3,4,0,0,3,2,1,1 +48,3,4,8,1,1,3,3,0,1 +34,1,3,4,1,0,3,4,0,1 +31,1,1,6,1,1,3,2,0,1 +46,1,2,7,1,1,3,1,1,1 +45,2,2,7,1,1,3,1,1,1 +34,3,4,4,0,1,3,1,1,1 +16,2,4,1,1,1,3,4,0,1 +18,3,2,1,1,1,3,1,0,1 +22,2,2,1,1,1,3,1,1,1 +32,2,2,2,1,1,2,4,0,1 +41,1,3,3,1,0,2,4,0,1 +22,3,3,2,1,1,2,4,0,1 +23,3,2,0,1,1,2,2,0,1 +22,3,4,0,1,0,3,4,0,1 +40,2,2,6,1,1,2,2,1,1 +29,3,4,1,0,1,2,3,0,1 +42,4,4,0,0,0,3,4,0,1 +29,3,4,2,1,1,3,4,0,1 +31,3,2,1,1,1,3,4,0,1 +28,4,4,3,0,0,1,4,0,1 +21,2,3,0,1,1,3,4,0,1 +26,4,4,2,1,1,1,3,0,1 +37,3,4,0,1,1,3,4,0,1 +24,3,4,2,1,1,2,2,0,1 +25,4,4,0,0,1,2,4,0,1 +22,2,1,0,1,1,2,2,0,1 +45,4,4,1,1,1,1,4,0,1 +47,4,4,1,1,1,1,4,0,1 +28,4,4,5,1,0,3,4,0,1 +24,2,2,4,1,1,3,4,0,1 +34,3,3,6,1,1,2,3,0,1 +47,2,3,5,1,1,1,1,0,1 +31,3,4,2,1,1,1,4,0,1 +26,1,3,1,1,1,3,1,0,1 +25,4,4,3,1,1,1,2,0,1 +47,1,1,4,1,1,2,2,0,1 +48,1,1,8,1,1,1,1,1,1 +38,2,2,10,1,1,3,2,0,1 +32,1,3,4,1,1,2,2,1,1 +47,1,2,2,1,1,2,4,0,1 +27,4,4,3,1,1,1,4,0,1 +40,1,1,0,1,1,3,2,0,1 +46,4,4,6,1,1,1,4,0,1 +33,3,3,3,1,1,3,4,0,1 +49,1,2,5,1,0,2,2,1,1 +21,2,4,3,1,1,3,2,0,1 +31,4,4,0,0,0,2,4,0,1 +42,4,4,4,1,1,3,4,0,2 +35,4,4,3,1,1,1,4,0,2 +31,4,4,4,1,1,3,3,0,2 +42,4,4,6,1,1,1,3,0,2 +49,3,4,4,1,1,3,4,0,2 +21,4,4,1,1,1,1,3,0,2 +28,3,4,3,1,1,1,4,0,2 +22,4,4,1,1,1,1,3,0,2 +36,4,4,3,1,0,1,4,0,2 +45,2,2,9,1,1,3,3,0,2 +40,4,4,4,1,1,1,4,0,2 +30,2,2,7,1,1,3,4,0,2 +35,4,4,5,1,0,1,4,0,2 +26,2,4,2,1,1,1,4,0,2 +45,4,4,3,1,1,1,4,0,2 +27,3,3,2,1,1,3,4,0,2 +32,4,4,4,1,1,1,2,0,2 +27,4,4,3,1,1,1,3,0,2 +28,4,4,2,0,1,1,4,0,2 +30,4,4,3,1,1,2,1,0,2 +34,4,4,4,1,1,2,4,0,2 +26,3,4,3,1,1,2,3,0,2 +44,1,4,2,1,1,1,3,0,2 +29,4,4,3,1,1,1,4,0,2 +26,3,4,2,1,1,3,3,0,2 +41,4,4,8,1,1,1,4,0,2 +32,3,3,4,1,0,3,3,0,2 +23,3,1,1,1,0,3,3,0,2 +38,2,3,4,1,1,1,2,0,2 +22,4,4,1,1,0,2,2,0,2 +34,3,4,3,0,1,1,4,0,2 +38,3,4,7,0,1,2,3,0,2 +21,4,4,1,1,1,1,4,0,2 +43,1,3,4,1,1,1,4,0,2 +44,3,3,9,1,1,1,1,0,2 +24,4,4,1,1,1,2,4,0,2 +27,4,4,1,1,0,3,3,0,2 +34,3,4,4,1,1,3,3,0,2 +29,3,4,2,1,1,1,4,0,2 +26,4,4,1,1,0,2,3,0,2 +37,4,4,7,1,1,1,4,0,2 +21,3,4,3,1,1,1,4,0,2 +47,4,4,4,0,1,2,4,0,2 +41,4,4,3,1,0,2,3,0,2 +29,3,4,3,1,1,1,3,0,2 +25,4,4,1,1,0,1,4,0,2 +33,4,4,2,0,0,1,3,0,2 +23,4,4,1,0,1,1,4,0,2 +32,4,4,4,1,1,2,3,0,2 +45,4,4,3,1,1,1,4,0,2 +37,4,4,4,1,1,1,4,0,2 +35,2,4,4,0,1,3,2,0,2 +37,4,4,3,1,1,3,4,0,2 +35,4,4,5,1,1,2,4,0,2 +23,4,4,1,1,1,3,3,0,2 +38,2,2,8,1,1,2,2,0,2 +41,4,4,4,0,0,2,4,0,2 +35,1,2,9,1,0,3,1,0,2 +29,4,4,3,1,1,3,2,0,2 +26,3,3,2,1,1,1,3,0,2 +22,3,3,2,1,1,3,3,0,2 +30,2,3,5,1,1,3,1,1,2 +36,4,4,3,1,1,3,3,0,2 +26,3,4,3,1,1,1,4,0,2 +32,4,4,2,1,0,3,4,0,2 +39,4,4,3,0,1,2,4,0,2 +29,3,4,3,1,1,1,3,0,2 +40,4,4,5,1,1,1,3,0,2 +43,3,3,6,1,0,3,2,0,2 +44,3,4,6,1,1,3,2,0,2 +24,4,4,2,1,1,2,4,0,2 +42,4,4,3,1,0,1,4,0,2 +33,3,4,2,1,1,1,4,0,2 +24,4,4,1,0,1,2,3,0,2 +28,3,4,2,0,1,2,3,0,2 +32,2,1,5,1,0,2,2,0,2 +26,2,2,4,1,1,3,4,0,2 +27,4,4,1,1,1,1,4,0,2 +41,3,4,3,0,1,2,4,0,2 +28,3,4,2,0,1,3,3,0,2 +23,4,4,1,1,0,3,4,0,2 +31,2,2,4,1,1,4,3,1,2 +33,4,4,3,0,1,2,4,0,2 +35,4,4,5,1,1,1,4,0,2 +39,3,4,5,1,1,3,4,0,2 +27,4,4,2,1,1,1,3,0,2 +48,4,4,3,0,1,1,4,0,2 +25,3,1,2,1,0,3,4,0,2 +38,4,4,4,1,1,2,4,0,2 +48,4,4,7,1,0,1,4,0,2 +34,4,4,4,1,0,3,3,0,2 +36,3,3,4,1,1,1,3,0,2 +34,4,4,3,1,0,3,4,0,2 +42,4,4,4,0,0,2,4,0,2 +45,3,3,5,0,1,1,3,0,2 +37,4,4,4,0,1,2,4,0,2 +38,4,4,3,0,0,2,4,0,2 +42,3,3,4,0,1,3,4,0,2 +42,2,4,5,0,1,2,3,0,2 +41,4,4,6,1,1,1,4,0,2 +43,4,4,5,0,1,1,4,0,2 +34,4,4,2,0,0,3,2,0,2 +44,2,3,1,0,1,2,4,0,2 +41,4,4,4,0,1,1,4,0,2 +36,4,4,3,1,1,1,4,0,2 +34,1,2,5,1,1,3,4,0,2 +32,3,2,5,1,1,3,3,0,3 +34,3,3,6,1,1,1,4,0,3 +24,4,4,2,1,0,3,3,0,3 +21,3,3,1,0,1,3,2,0,3 +38,4,3,9,1,1,3,3,0,3 +39,4,4,3,1,0,1,4,0,3 +35,2,2,6,1,0,2,2,1,3 +30,2,3,7,1,1,3,3,0,3 +17,3,4,1,1,1,3,3,0,3 +32,2,4,3,1,1,3,4,0,3 +43,4,4,5,0,1,1,4,0,3 +31,2,2,4,1,1,3,3,0,3 +24,1,2,3,1,1,3,2,0,3 +26,2,4,3,1,1,1,3,0,3 +35,3,4,4,1,0,1,4,0,3 +46,3,4,4,1,0,3,4,0,3 +29,2,3,3,1,1,3,3,0,3 +21,3,4,1,1,0,3,4,0,3 +31,4,4,5,1,0,1,4,0,3 +24,4,4,2,1,1,3,3,0,3 +24,2,4,3,1,1,3,3,0,3 +36,4,4,4,1,1,1,3,0,3 +37,2,3,9,1,1,3,3,0,3 +37,3,3,6,1,1,3,3,0,3 +37,3,3,11,1,1,1,2,0,3 +44,4,4,4,0,1,2,3,0,3 +35,2,3,6,1,1,2,3,0,3 +25,4,4,3,1,1,3,3,0,3 +21,4,4,2,1,1,2,3,0,3 +24,1,2,3,1,1,3,2,0,3 +16,2,3,1,1,1,3,1,0,3 +21,3,2,1,1,1,3,1,1,3 +25,2,4,2,1,1,2,4,0,3 +26,4,4,1,1,0,2,4,0,3 +43,4,4,2,1,1,1,4,0,3 +24,4,4,1,1,1,1,4,0,3 +30,3,4,3,0,1,3,3,0,3 +30,2,3,3,1,1,3,3,0,3 +26,4,4,2,1,1,3,3,0,3 +29,2,4,4,1,1,3,2,0,3 +24,3,4,4,1,1,3,1,0,3 +29,3,3,2,1,1,3,2,0,3 +29,1,2,1,1,1,3,3,0,3 +22,4,4,1,1,1,2,4,0,3 +30,3,3,4,1,0,3,2,0,3 +24,4,4,1,1,1,2,3,0,3 +25,4,4,2,1,1,1,2,0,3 +44,4,4,5,1,0,1,4,0,3 +28,2,3,3,1,1,2,4,0,3 +22,3,3,1,1,1,3,2,0,3 +30,2,2,6,1,0,2,3,0,3 +25,3,4,3,1,1,2,4,0,3 +25,4,4,2,1,1,3,3,0,3 +33,4,4,2,1,0,1,4,0,3 +33,3,3,4,1,0,2,3,0,3 +26,3,3,2,1,0,2,2,0,3 +29,3,4,5,1,1,3,3,0,3 +32,3,3,4,1,1,2,1,0,3 +30,4,4,1,1,0,3,2,0,3 +37,4,4,1,0,1,1,4,0,3 +31,1,2,4,1,1,3,3,0,3 +36,1,2,4,1,1,3,1,1,3 +36,2,2,7,1,0,2,2,1,3 +26,3,4,2,1,0,2,4,0,3 +36,4,4,3,1,1,1,4,0,3 +28,4,4,1,1,1,2,4,0,3 +33,4,4,5,1,1,3,3,0,3 +25,3,4,2,1,0,2,4,0,3 +31,4,4,2,0,1,1,4,0,3 +38,4,4,4,1,0,1,4,0,3 +35,1,2,5,1,1,3,3,0,3 +33,4,4,3,0,0,2,4,0,3 +30,2,2,2,1,1,3,2,0,3 +20,3,3,2,1,1,2,2,1,3 +18,3,3,1,1,1,2,2,0,3 +30,3,2,3,1,1,3,3,0,3 +35,2,3,6,1,0,3,2,0,3 +22,3,3,2,1,1,3,1,0,3 +28,2,4,7,1,1,3,3,0,3 +21,3,3,1,1,1,3,1,0,3 +27,3,4,4,1,1,3,4,0,3 +30,3,4,3,1,1,3,3,0,3 +25,3,4,2,1,1,3,3,0,3 +26,4,4,3,1,1,3,2,0,3 +37,2,4,5,1,1,1,4,0,3 +47,1,3,9,1,0,3,3,0,3 +36,1,1,5,1,1,3,3,0,3 +36,2,3,6,1,1,2,4,0,3 +36,4,4,3,1,1,2,4,0,3 +28,4,4,4,1,1,3,4,0,3 +21,4,4,2,1,1,3,3,0,3 +25,4,4,2,1,1,2,3,0,3 +30,3,4,3,1,1,3,4,0,3 +22,3,3,3,1,1,3,3,0,3 +23,4,3,2,1,0,2,3,0,3 +36,3,4,9,1,1,3,4,0,3 +28,4,3,2,1,1,3,2,0,3 +46,2,2,5,1,1,2,4,0,3 +47,4,4,5,1,1,3,2,0,3 +41,1,4,5,1,0,2,4,0,3 +44,4,4,5,1,1,3,4,0,3 +34,2,3,3,0,1,3,2,1,3 +37,2,3,6,1,1,3,4,0,3 +34,4,4,2,0,1,1,4,0,3 +22,2,4,2,1,1,3,2,0,3 +33,2,3,4,1,1,2,3,0,3 +21,3,4,3,1,1,3,1,0,3 +31,4,4,4,1,0,3,4,0,3 +41,4,3,5,1,0,3,4,0,3 +30,4,3,4,1,1,3,3,0,3 +32,2,4,5,1,1,3,4,0,3 +27,4,4,2,0,0,2,4,0,3 +26,4,4,1,0,0,2,4,0,3 +42,4,4,5,0,1,2,4,0,3 +24,4,4,1,1,1,1,3,0,3 +37,4,4,6,1,1,1,4,0,3 +30,2,3,5,1,0,3,4,0,3 +27,4,4,1,1,1,1,4,0,3 +34,2,4,6,1,1,3,3,0,3 +32,3,4,5,0,1,1,4,0,3 +28,4,4,1,0,0,2,4,0,3 +29,3,3,1,0,0,2,4,0,3 +42,4,4,3,0,1,2,4,0,3 +21,2,2,0,0,1,4,4,0,3 +22,4,4,2,1,1,3,4,0,3 +36,4,4,3,0,1,3,4,0,3 +45,2,3,3,0,0,2,4,0,3 +34,4,4,2,0,0,2,4,0,3 +35,2,3,5,1,1,3,3,0,3 +19,4,4,1,1,1,2,3,0,3 +27,4,4,4,1,1,3,3,0,3 +37,2,4,4,1,0,2,3,0,3 +26,3,2,4,1,1,3,4,0,3 +28,1,3,5,1,1,3,4,0,3 +31,3,4,5,1,1,1,4,0,3 +32,2,2,6,1,1,2,3,0,3 +40,2,2,4,0,0,2,4,0,3 +27,3,3,5,1,1,2,4,0,3 +27,2,2,3,1,1,2,2,1,3 +37,4,4,5,0,0,2,4,0,3 +22,4,3,1,1,1,2,2,0,3 +27,4,4,4,1,1,1,2,1,3 +21,4,4,1,0,1,2,4,0,3 +30,1,3,2,1,1,3,4,0,3 +23,2,2,1,1,1,2,4,0,3 +25,2,4,3,1,1,1,3,0,3 +42,2,4,6,1,1,2,4,0,3 +29,4,4,3,1,1,1,4,0,3 +33,4,4,2,1,0,2,4,0,3 +33,4,4,3,1,1,1,4,0,3 +39,3,3,8,1,0,1,4,0,3 +33,3,3,4,1,0,2,2,0,3 +17,3,3,1,1,1,2,4,0,3 diff --git a/clustering_datasets/glass.csv b/clustering_datasets/glass.csv new file mode 100644 index 0000000..ea2849b --- /dev/null +++ b/clustering_datasets/glass.csv @@ -0,0 +1,215 @@ +RI,Na,Mg,Al,Si,K,Ca,Ba,Fe,Type +1.52101,13.64,4.49,1.1,71.78,0.06,8.75,0,0,1 +1.51761,13.89,3.6,1.36,72.73,0.48,7.83,0,0,1 +1.51618,13.53,3.55,1.54,72.99,0.39,7.78,0,0,1 +1.51766,13.21,3.69,1.29,72.61,0.57,8.22,0,0,1 +1.51742,13.27,3.62,1.24,73.08,0.55,8.07,0,0,1 +1.51596,12.79,3.61,1.62,72.97,0.64,8.07,0,0.26,1 +1.51743,13.3,3.6,1.14,73.09,0.58,8.17,0,0,1 +1.51756,13.15,3.61,1.05,73.24,0.57,8.24,0,0,1 +1.51918,14.04,3.58,1.37,72.08,0.56,8.3,0,0,1 +1.51755,13,3.6,1.36,72.99,0.57,8.4,0,0.11,1 +1.51571,12.72,3.46,1.56,73.2,0.67,8.09,0,0.24,1 +1.51763,12.8,3.66,1.27,73.01,0.6,8.56,0,0,1 +1.51589,12.88,3.43,1.4,73.28,0.69,8.05,0,0.24,1 +1.51748,12.86,3.56,1.27,73.21,0.54,8.38,0,0.17,1 +1.51763,12.61,3.59,1.31,73.29,0.58,8.5,0,0,1 +1.51761,12.81,3.54,1.23,73.24,0.58,8.39,0,0,1 +1.51784,12.68,3.67,1.16,73.11,0.61,8.7,0,0,1 +1.52196,14.36,3.85,0.89,71.36,0.15,9.15,0,0,1 +1.51911,13.9,3.73,1.18,72.12,0.06,8.89,0,0,1 +1.51735,13.02,3.54,1.69,72.73,0.54,8.44,0,0.07,1 +1.5175,12.82,3.55,1.49,72.75,0.54,8.52,0,0.19,1 +1.51966,14.77,3.75,0.29,72.02,0.03,9,0,0,1 +1.51736,12.78,3.62,1.29,72.79,0.59,8.7,0,0,1 +1.51751,12.81,3.57,1.35,73.02,0.62,8.59,0,0,1 +1.5172,13.38,3.5,1.15,72.85,0.5,8.43,0,0,1 +1.51764,12.98,3.54,1.21,73,0.65,8.53,0,0,1 +1.51793,13.21,3.48,1.41,72.64,0.59,8.43,0,0,1 +1.51721,12.87,3.48,1.33,73.04,0.56,8.43,0,0,1 +1.51768,12.56,3.52,1.43,73.15,0.57,8.54,0,0,1 +1.51784,13.08,3.49,1.28,72.86,0.6,8.49,0,0,1 +1.51768,12.65,3.56,1.3,73.08,0.61,8.69,0,0.14,1 +1.51747,12.84,3.5,1.14,73.27,0.56,8.55,0,0,1 +1.51775,12.85,3.48,1.23,72.97,0.61,8.56,0.09,0.22,1 +1.51753,12.57,3.47,1.38,73.39,0.6,8.55,0,0.06,1 +1.51783,12.69,3.54,1.34,72.95,0.57,8.75,0,0,1 +1.51567,13.29,3.45,1.21,72.74,0.56,8.57,0,0,1 +1.51909,13.89,3.53,1.32,71.81,0.51,8.78,0.11,0,1 +1.51797,12.74,3.48,1.35,72.96,0.64,8.68,0,0,1 +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0,0,1 +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0,0,1 +1.51793,12.79,3.5,1.12,73.03,0.64,8.77,0,0,1 +1.51755,12.71,3.42,1.2,73.2,0.59,8.64,0,0,1 +1.51779,13.21,3.39,1.33,72.76,0.59,8.59,0,0,1 +1.5221,13.73,3.84,0.72,71.76,0.17,9.74,0,0,1 +1.51786,12.73,3.43,1.19,72.95,0.62,8.76,0,0.3,1 +1.519,13.49,3.48,1.35,71.95,0.55,9,0,0,1 +1.51869,13.19,3.37,1.18,72.72,0.57,8.83,0,0.16,1 +1.52667,13.99,3.7,0.71,71.57,0.02,9.82,0,0.1,1 +1.52223,13.21,3.77,0.79,71.99,0.13,10.02,0,0,1 +1.51898,13.58,3.35,1.23,72.08,0.59,8.91,0,0,1 +1.5232,13.72,3.72,0.51,71.75,0.09,10.06,0,0.16,1 +1.51926,13.2,3.33,1.28,72.36,0.6,9.14,0,0.11,1 +1.51808,13.43,2.87,1.19,72.84,0.55,9.03,0,0,1 +1.51837,13.14,2.84,1.28,72.85,0.55,9.07,0,0,1 +1.51778,13.21,2.81,1.29,72.98,0.51,9.02,0,0.09,1 +1.51769,12.45,2.71,1.29,73.7,0.56,9.06,0,0.24,1 +1.51215,12.99,3.47,1.12,72.98,0.62,8.35,0,0.31,1 +1.51824,12.87,3.48,1.29,72.95,0.6,8.43,0,0,1 +1.51754,13.48,3.74,1.17,72.99,0.59,8.03,0,0,1 +1.51754,13.39,3.66,1.19,72.79,0.57,8.27,0,0.11,1 +1.51905,13.6,3.62,1.11,72.64,0.14,8.76,0,0,1 +1.51977,13.81,3.58,1.32,71.72,0.12,8.67,0.69,0,1 +1.52172,13.51,3.86,0.88,71.79,0.23,9.54,0,0.11,1 +1.52227,14.17,3.81,0.78,71.35,0,9.69,0,0,1 +1.52172,13.48,3.74,0.9,72.01,0.18,9.61,0,0.07,1 +1.52099,13.69,3.59,1.12,71.96,0.09,9.4,0,0,1 +1.52152,13.05,3.65,0.87,72.22,0.19,9.85,0,0.17,1 +1.52152,13.05,3.65,0.87,72.32,0.19,9.85,0,0.17,1 +1.52152,13.12,3.58,0.9,72.2,0.23,9.82,0,0.16,1 +1.523,13.31,3.58,0.82,71.99,0.12,10.17,0,0.03,1 +1.51574,14.86,3.67,1.74,71.87,0.16,7.36,0,0.12,2 +1.51848,13.64,3.87,1.27,71.96,0.54,8.32,0,0.32,2 +1.51593,13.09,3.59,1.52,73.1,0.67,7.83,0,0,2 +1.51631,13.34,3.57,1.57,72.87,0.61,7.89,0,0,2 +1.51596,13.02,3.56,1.54,73.11,0.72,7.9,0,0,2 +1.5159,13.02,3.58,1.51,73.12,0.69,7.96,0,0,2 +1.51645,13.44,3.61,1.54,72.39,0.66,8.03,0,0,2 +1.51627,13,3.58,1.54,72.83,0.61,8.04,0,0,2 +1.51613,13.92,3.52,1.25,72.88,0.37,7.94,0,0.14,2 +1.5159,12.82,3.52,1.9,72.86,0.69,7.97,0,0,2 +1.51592,12.86,3.52,2.12,72.66,0.69,7.97,0,0,2 +1.51593,13.25,3.45,1.43,73.17,0.61,7.86,0,0,2 +1.51646,13.41,3.55,1.25,72.81,0.68,8.1,0,0,2 +1.51594,13.09,3.52,1.55,72.87,0.68,8.05,0,0.09,2 +1.51409,14.25,3.09,2.08,72.28,1.1,7.08,0,0,2 +1.51625,13.36,3.58,1.49,72.72,0.45,8.21,0,0,2 +1.51569,13.24,3.49,1.47,73.25,0.38,8.03,0,0,2 +1.51645,13.4,3.49,1.52,72.65,0.67,8.08,0,0.1,2 +1.51618,13.01,3.5,1.48,72.89,0.6,8.12,0,0,2 +1.5164,12.55,3.48,1.87,73.23,0.63,8.08,0,0.09,2 +1.51841,12.93,3.74,1.11,72.28,0.64,8.96,0,0.22,2 +1.51605,12.9,3.44,1.45,73.06,0.44,8.27,0,0,2 +1.51588,13.12,3.41,1.58,73.26,0.07,8.39,0,0.19,2 +1.5159,13.24,3.34,1.47,73.1,0.39,8.22,0,0,2 +1.51629,12.71,3.33,1.49,73.28,0.67,8.24,0,0,2 +1.5186,13.36,3.43,1.43,72.26,0.51,8.6,0,0,2 +1.51841,13.02,3.62,1.06,72.34,0.64,9.13,0,0.15,2 +1.51743,12.2,3.25,1.16,73.55,0.62,8.9,0,0.24,2 +1.51689,12.67,2.88,1.71,73.21,0.73,8.54,0,0,2 +1.51811,12.96,2.96,1.43,72.92,0.6,8.79,0.14,0,2 +1.51655,12.75,2.85,1.44,73.27,0.57,8.79,0.11,0.22,2 +1.5173,12.35,2.72,1.63,72.87,0.7,9.23,0,0,2 +1.5182,12.62,2.76,0.83,73.81,0.35,9.42,0,0.2,2 +1.52725,13.8,3.15,0.66,70.57,0.08,11.64,0,0,2 +1.5241,13.83,2.9,1.17,71.15,0.08,10.79,0,0,2 +1.52475,11.45,0,1.88,72.19,0.81,13.24,0,0.34,2 +1.53125,10.73,0,2.1,69.81,0.58,13.3,3.15,0.28,2 +1.53393,12.3,0,1,70.16,0.12,16.19,0,0.24,2 +1.52222,14.43,0,1,72.67,0.1,11.52,0,0.08,2 +1.51818,13.72,0,0.56,74.45,0,10.99,0,0,2 +1.52664,11.23,0,0.77,73.21,0,14.68,0,0,2 +1.52739,11.02,0,0.75,73.08,0,14.96,0,0,2 +1.52777,12.64,0,0.67,72.02,0.06,14.4,0,0,2 +1.51892,13.46,3.83,1.26,72.55,0.57,8.21,0,0.14,2 +1.51847,13.1,3.97,1.19,72.44,0.6,8.43,0,0,2 +1.51846,13.41,3.89,1.33,72.38,0.51,8.28,0,0,2 +1.51829,13.24,3.9,1.41,72.33,0.55,8.31,0,0.1,2 +1.51708,13.72,3.68,1.81,72.06,0.64,7.88,0,0,2 +1.51673,13.3,3.64,1.53,72.53,0.65,8.03,0,0.29,2 +1.51652,13.56,3.57,1.47,72.45,0.64,7.96,0,0,2 +1.51844,13.25,3.76,1.32,72.4,0.58,8.42,0,0,2 +1.51663,12.93,3.54,1.62,72.96,0.64,8.03,0,0.21,2 +1.51687,13.23,3.54,1.48,72.84,0.56,8.1,0,0,2 +1.51707,13.48,3.48,1.71,72.52,0.62,7.99,0,0,2 +1.52177,13.2,3.68,1.15,72.75,0.54,8.52,0,0,2 +1.51872,12.93,3.66,1.56,72.51,0.58,8.55,0,0.12,2 +1.51667,12.94,3.61,1.26,72.75,0.56,8.6,0,0,2 +1.52081,13.78,2.28,1.43,71.99,0.49,9.85,0,0.17,2 +1.52068,13.55,2.09,1.67,72.18,0.53,9.57,0.27,0.17,2 +1.5202,13.98,1.35,1.63,71.76,0.39,10.56,0,0.18,2 +1.52177,13.75,1.01,1.36,72.19,0.33,11.14,0,0,2 +1.52614,13.7,0,1.36,71.24,0.19,13.44,0,0.1,2 +1.51813,13.43,3.98,1.18,72.49,0.58,8.15,0,0,2 +1.518,13.71,3.93,1.54,71.81,0.54,8.21,0,0.15,2 +1.51811,13.33,3.85,1.25,72.78,0.52,8.12,0,0,2 +1.51789,13.19,3.9,1.3,72.33,0.55,8.44,0,0.28,2 +1.51806,13,3.8,1.08,73.07,0.56,8.38,0,0.12,2 +1.51711,12.89,3.62,1.57,72.96,0.61,8.11,0,0,2 +1.51674,12.79,3.52,1.54,73.36,0.66,7.9,0,0,2 +1.51674,12.87,3.56,1.64,73.14,0.65,7.99,0,0,2 +1.5169,13.33,3.54,1.61,72.54,0.68,8.11,0,0,2 +1.51851,13.2,3.63,1.07,72.83,0.57,8.41,0.09,0.17,2 +1.51662,12.85,3.51,1.44,73.01,0.68,8.23,0.06,0.25,2 +1.51709,13,3.47,1.79,72.72,0.66,8.18,0,0,2 +1.5166,12.99,3.18,1.23,72.97,0.58,8.81,0,0.24,2 +1.51839,12.85,3.67,1.24,72.57,0.62,8.68,0,0.35,2 +1.51769,13.65,3.66,1.11,72.77,0.11,8.6,0,0,3 +1.5161,13.33,3.53,1.34,72.67,0.56,8.33,0,0,3 +1.5167,13.24,3.57,1.38,72.7,0.56,8.44,0,0.1,3 +1.51643,12.16,3.52,1.35,72.89,0.57,8.53,0,0,3 +1.51665,13.14,3.45,1.76,72.48,0.6,8.38,0,0.17,3 +1.52127,14.32,3.9,0.83,71.5,0,9.49,0,0,3 +1.51779,13.64,3.65,0.65,73,0.06,8.93,0,0,3 +1.5161,13.42,3.4,1.22,72.69,0.59,8.32,0,0,3 +1.51694,12.86,3.58,1.31,72.61,0.61,8.79,0,0,3 +1.51646,13.04,3.4,1.26,73.01,0.52,8.58,0,0,3 +1.51655,13.41,3.39,1.28,72.64,0.52,8.65,0,0,3 +1.52121,14.03,3.76,0.58,71.79,0.11,9.65,0,0,3 +1.51776,13.53,3.41,1.52,72.04,0.58,8.79,0,0,3 +1.51796,13.5,3.36,1.63,71.94,0.57,8.81,0,0.09,3 +1.51832,13.33,3.34,1.54,72.14,0.56,8.99,0,0,3 +1.51934,13.64,3.54,0.75,72.65,0.16,8.89,0.15,0.24,3 +1.52211,14.19,3.78,0.91,71.36,0.23,9.14,0,0.37,3 +1.51514,14.01,2.68,3.5,69.89,1.68,5.87,2.2,0,5 +1.51915,12.73,1.85,1.86,72.69,0.6,10.09,0,0,5 +1.52171,11.56,1.88,1.56,72.86,0.47,11.41,0,0,5 +1.52151,11.03,1.71,1.56,73.44,0.58,11.62,0,0,5 +1.51969,12.64,0,1.65,73.75,0.38,11.53,0,0,5 +1.51666,12.86,0,1.83,73.88,0.97,10.17,0,0,5 +1.51994,13.27,0,1.76,73.03,0.47,11.32,0,0,5 +1.52369,13.44,0,1.58,72.22,0.32,12.24,0,0,5 +1.51316,13.02,0,3.04,70.48,6.21,6.96,0,0,5 +1.51321,13,0,3.02,70.7,6.21,6.93,0,0,5 +1.52043,13.38,0,1.4,72.25,0.33,12.5,0,0,5 +1.52058,12.85,1.61,2.17,72.18,0.76,9.7,0.24,0.51,5 +1.52119,12.97,0.33,1.51,73.39,0.13,11.27,0,0.28,5 +1.51905,14,2.39,1.56,72.37,0,9.57,0,0,6 +1.51937,13.79,2.41,1.19,72.76,0,9.77,0,0,6 +1.51829,14.46,2.24,1.62,72.38,0,9.26,0,0,6 +1.51852,14.09,2.19,1.66,72.67,0,9.32,0,0,6 +1.51299,14.4,1.74,1.54,74.55,0,7.59,0,0,6 +1.51888,14.99,0.78,1.74,72.5,0,9.95,0,0,6 +1.51916,14.15,0,2.09,72.74,0,10.88,0,0,6 +1.51969,14.56,0,0.56,73.48,0,11.22,0,0,6 +1.51115,17.38,0,0.34,75.41,0,6.65,0,0,6 +1.51131,13.69,3.2,1.81,72.81,1.76,5.43,1.19,0,7 +1.51838,14.32,3.26,2.22,71.25,1.46,5.79,1.63,0,7 +1.52315,13.44,3.34,1.23,72.38,0.6,8.83,0,0,7 +1.52247,14.86,2.2,2.06,70.26,0.76,9.76,0,0,7 +1.52365,15.79,1.83,1.31,70.43,0.31,8.61,1.68,0,7 +1.51613,13.88,1.78,1.79,73.1,0,8.67,0.76,0,7 +1.51602,14.85,0,2.38,73.28,0,8.76,0.64,0.09,7 +1.51623,14.2,0,2.79,73.46,0.04,9.04,0.4,0.09,7 +1.51719,14.75,0,2,73.02,0,8.53,1.59,0.08,7 +1.51683,14.56,0,1.98,73.29,0,8.52,1.57,0.07,7 +1.51545,14.14,0,2.68,73.39,0.08,9.07,0.61,0.05,7 +1.51556,13.87,0,2.54,73.23,0.14,9.41,0.81,0.01,7 +1.51727,14.7,0,2.34,73.28,0,8.95,0.66,0,7 +1.51531,14.38,0,2.66,73.1,0.04,9.08,0.64,0,7 +1.51609,15.01,0,2.51,73.05,0.05,8.83,0.53,0,7 +1.51508,15.15,0,2.25,73.5,0,8.34,0.63,0,7 +1.51653,11.95,0,1.19,75.18,2.7,8.93,0,0,7 +1.51514,14.85,0,2.42,73.72,0,8.39,0.56,0,7 +1.51658,14.8,0,1.99,73.11,0,8.28,1.71,0,7 +1.51617,14.95,0,2.27,73.3,0,8.71,0.67,0,7 +1.51732,14.95,0,1.8,72.99,0,8.61,1.55,0,7 +1.51645,14.94,0,1.87,73.11,0,8.67,1.38,0,7 +1.51831,14.39,0,1.82,72.86,1.41,6.47,2.88,0,7 +1.5164,14.37,0,2.74,72.85,0,9.45,0.54,0,7 +1.51623,14.14,0,2.88,72.61,0.08,9.18,1.06,0,7 +1.51685,14.92,0,1.99,73.06,0,8.4,1.59,0,7 +1.52065,14.36,0,2.02,73.42,0,8.44,1.64,0,7 +1.51651,14.38,0,1.94,73.61,0,8.48,1.57,0,7 +1.51711,14.23,0,2.08,73.36,0,8.62,1.67,0,7 diff --git a/clustering_datasets/run_cluster.py b/clustering_datasets/run_cluster.py new file mode 100644 index 0000000..c289fec --- /dev/null +++ b/clustering_datasets/run_cluster.py @@ -0,0 +1,71 @@ +# encoding=utf8 +from typing import Union, List, Tuple +import sys +import json + +import random +import logging + +import pandas as pd +import numpy as np +from sklearn.datasets import load_iris, load_wine, load_breast_cancer, make_blobs +from sklearn.preprocessing import LabelEncoder +from sklearn.model_selection import train_test_split + +from NiaPy import Runner +from NiaPy.algorithms import Algorithm +from NiaPy.util import OptimizationType, TaskConvSave, groupdatabylabel, classifie, clusters2labels +from NiaPy.benchmarks import Clustering, ClusteringMin, ClusteringMinPenalty, ClusteringClassification + +from clusterargparser import getDictArgs + +logging.basicConfig() +logger = logging.getLogger('cec_run') +logger.setLevel('INFO') + +def save_example(alg: Algorithm, runs: int = 10, nFES: int = 1000, nGEN: int = np.inf, seed: List[int] = [None], optType: OptimizationType = OptimizationType.MINIMIZATION, dataset: str = 'iris', ofun: str = 'gc', sseed: int = 1, split: float = .3, wout: bool = True, **kwu: dict) -> None: + data, labels, noc = None, None, 4 + if dataset == 'iris': data, labels = load_iris(True); noc = len(np.unique(labels)) + elif dataset == 'cancer': data, labels = load_breast_cancer(True); noc = len(np.unique(labels)) + elif dataset == 'wine': data, labels = load_wine(True); noc = len(np.unique(labels)) + elif dataset == 'glass': df = pd.read_csv('glass.csv'); data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values; noc = len(np.unique(labels)) + elif dataset == 'cmc': df = pd.read_csv('cmc.csv'); data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values; noc = len(np.unique(labels)) + else: data, labels = make_blobs(n_samples=500, n_features=9, centers=noc, random_state=sseed) + Xt, Xv, yt, yv = train_test_split(data, labels, test_size=split, random_state=sseed) + lt = LabelEncoder().fit(labels); gl = groupdatabylabel(data, labels, lt) + bests, conv_it, conv_f, func = list(), list(), list(), None + if ofun == 'c': func = Clustering(Xt) + elif ofun == 'cm': func = ClusteringMin(Xt) + elif ofun == 'cmp': func = ClusteringMinPenalty(Xt) + elif ofun == 'cc': func = ClusteringClassification(Xt, yt) + else: sys.exit(2) + if seed == [None]: seed = list(range(1, runs + 1)) + for it in range(runs): + task = TaskConvSave(D=noc * len(data[0]), nFES=nFES, nGEN=nGEN, optType=optType, benchmark=func) + algo = alg(seed=seed[it % len(seed)]) + best = algo.run(task) + V = best[0].reshape([noc, len(data[0])]) + l, ok = clusters2labels(V, gl), 0 + for i, d in enumerate(Xv): ok += 1 if lt.inverse_transform([l[classifie(d, V)]])[0] == yv[i] else 0 + a = ok / len(Xv) + logger.info('%d. run:\n%s %s' % (it, V, a)) + bests.append((best[0], a)) + conv_it.append(task.evals) + conv_f.append(task.x_f_vals) + if wout: + with open('%s_%s_%s_args' % (algo.Name[-1], ofun, dataset), 'w') as file: file.write(json.dumps(algo.getParameters())) + bpos, bval = np.asarray([x[0] for x in bests]), np.asarray([x[1] for x in bests]) + np.savetxt('%s_%s_%s_p' % (algo.Name[-1], ofun, dataset), bpos) + np.savetxt('%s_%s_%s_v' % (algo.Name[-1], ofun, dataset), bval) + inds = [] + for i in range(runs): inds.append('evals'), inds.append('funvl') + data = [] + for i in range(runs): data.append(conv_it[i]), data.append(conv_f[i]) + pd.DataFrame(data, index=inds).T.to_csv('%s_%s_%s.csv' % (algo.Name[-1], ofun, dataset), sep=',', index=False) + +if __name__ == '__main__': + pargs = getDictArgs(sys.argv[1:]) + algo = Runner.getAlgorithm(pargs['algo']) + save_example(algo, **pargs) + +# vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3 diff --git a/clustering_datasets/run_cluster_kmeans.py b/clustering_datasets/run_cluster_kmeans.py new file mode 100644 index 0000000..53ee2c5 --- /dev/null +++ b/clustering_datasets/run_cluster_kmeans.py @@ -0,0 +1,48 @@ +# encoding=utf8 +from typing import Union, List, Tuple +import logging +import sys + +import pandas as pd +import numpy as np +from sklearn.datasets import load_iris, load_wine, load_breast_cancer, make_blobs +from sklearn.preprocessing import LabelEncoder +from sklearn.model_selection import train_test_split +from sklearn.cluster import KMeans + +from NiaPy.util import classifie, clusters2labels, groupdatabylabel + +from clusterargparser import getDictArgs + +logging.basicConfig() +logger = logging.getLogger('cec_run') +logger.setLevel('INFO') + +def save_example(runs: int = 10, nFES: int = 1000, seed: List[int] = [None], dataset: str = 'iris', ofun: str = 'gc', sseed: int = 1, split: float = .3, wout: bool = True, **kwu: dict) -> None: + data, labels, noc = None, None, 4 + if dataset == 'iris': data, labels = load_iris(True); noc = len(np.unique(labels)) + elif dataset == 'cancer': data, labels = load_breast_cancer(True); noc = len(np.unique(labels)) + elif dataset == 'wine': data, labels = load_wine(True); noc = len(np.unique(labels)) + elif dataset == 'glass': df = pd.read_csv('glass.csv'); data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values; noc = len(np.unique(labels)) + elif dataset == 'cmc': df = pd.read_csv('cmc.csv'); data, labels = df.iloc[:, :-1].values, df.iloc[:, -1].values; noc = len(np.unique(labels)) + else: data, labels = make_blobs(n_samples=500, n_features=9, centers=noc, random_state=sseed) + Xt, Xv, yt, yv = train_test_split(data, labels, test_size=split, random_state=sseed) + lt = LabelEncoder().fit(labels); gl, bests = groupdatabylabel(data, labels, lt), [] + if seed == [None]: seed = list(range(1, runs + 1)) + for it in range(runs): + kmeans = KMeans(n_clusters=noc, init='random', n_init=100, max_iter=nFES, random_state=1, algorithm='full').fit(Xt) + C, lt = kmeans.cluster_centers_, LabelEncoder().fit(labels) + l, ok = clusters2labels(C, groupdatabylabel(Xt, yt, lt)), 0 + for i, d in enumerate(Xv): ok += 1 if lt.inverse_transform([l[classifie(d, C)]]) == yv[i] else 0 + logger.info('%d. run:\n%s %s' % (it, C, ok / len(Xv))) + bests.append([C.flatten(), ok / len(Xv)]) + if wout: + bpos, bval = np.asarray([x[0] for x in bests]), np.asarray([x[1] for x in bests]) + np.savetxt('KM_%s_%s_p' % (ofun, dataset), bpos) + np.savetxt('KM_%s_%s_v' % (ofun, dataset), bval) + +if __name__ == '__main__': + pargs = getDictArgs(sys.argv[1:]) + save_example(**pargs) + +# vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3 diff --git a/optimize_KNN_parameters/run.py b/optimize_KNN_parameters/run.py index 44e7be3..2a02e9e 100644 --- a/optimize_KNN_parameters/run.py +++ b/optimize_KNN_parameters/run.py @@ -5,7 +5,7 @@ from sklearn.model_selection import StratifiedKFold from sklearn.model_selection import cross_validate from NiaPy.algorithms.modified import HybridBatAlgorithm -import pygal +import pygal KNN_WEIGHT_FUNCTIONS = [ 'uniform', @@ -36,13 +36,13 @@ def swap_algorithm(val): # map from real number [0, 1] to integer ranging [10, 50] def swap_leaf_size(val): - return int(val * 40 + 10) + return int(val * 10 + 40) class KNNBreastCancerBenchmark(object): def __init__(self): self.Lower = 0 self.Upper = 1 - + def function(self): # our definition of fitness function def evaluate(D, solution): @@ -67,7 +67,7 @@ def __init__(self, seed=1234): dataset = datasets.load_breast_cancer() self.X = dataset.data self.y = dataset.target - + self.X_search, self.X_validate, self.y_search, self.y_validate = train_test_split(self.X, self.y, test_size=0.8, random_state=self.seed) self.X_search_train, self.X_search_test, self.y_search_train, self.y_search_test = train_test_split(self.X_search, self.y_search, test_size=0.8, random_state=self.seed) From 5c6d8d6142c39b1554925992738fb64b18f2a14f Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Mon, 28 Oct 2019 15:30:42 +0100 Subject: [PATCH 02/32] Remove unused files --- clustering_datasets/Pipfile.lock | 649 ------------------------------- 1 file changed, 649 deletions(-) delete mode 100644 clustering_datasets/Pipfile.lock diff --git a/clustering_datasets/Pipfile.lock b/clustering_datasets/Pipfile.lock deleted file mode 100644 index e142845..0000000 --- a/clustering_datasets/Pipfile.lock +++ /dev/null @@ -1,649 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "6a6aedc480b1c8e8f46496d767e73f048abc078975d3379bd64b49e22d458c51" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "attrs": { - "hashes": [ - "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", - "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" - ], - "version": "==19.1.0" - }, - "backcall": { - "hashes": [ - "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", - "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" - ], - "version": "==0.1.0" - }, - "bleach": { - "hashes": [ - "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16", - "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa" - ], - "version": "==3.1.0" - }, - "cycler": { - "hashes": [ - "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", - "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" - ], - "version": "==0.10.0" - }, - "cython": { - "hashes": [ - "sha256:0afa0b121b89de619e71587e25702e2b7068d7da2164c47e6eee80c17823a62f", - "sha256:1c608ba76f7a20cc9f0c021b7fe5cb04bc1a70327ae93a9298b1bc3e0edddebe", - "sha256:26229570d6787ff3caa932fe9d802960f51a89239b990d275ae845405ce43857", - "sha256:2a9deafa437b6154cac2f25bb88e0bfd075a897c8dc847669d6f478d7e3ee6b1", - "sha256:2f28396fbce6d9d68a40edbf49a6729cf9d92a4d39ff0f501947a89188e9099f", - "sha256:3983dd7b67297db299b403b29b328d9e03e14c4c590ea90aa1ad1d7b35fb178b", - "sha256:4100a3f8e8bbe47d499cdac00e56d5fe750f739701ea52dc049b6c56f5421d97", - "sha256:51abfaa7b6c66f3f18028876713c8804e73d4c2b6ceddbcbcfa8ec62429377f0", - "sha256:61c24f4554efdb8fb1ac6c8e75dab301bcdf2b7b739ed0c2b267493bb43163c5", - "sha256:700ccf921b2fdc9b23910e95b5caae4b35767685e0812343fa7172409f1b5830", - "sha256:7b41eb2e792822a790cb2a171df49d1a9e0baaa8e81f58077b7380a273b93d5f", - "sha256:803987d3b16d55faa997bfc12e8b97f1091f145930dee229b020487aed8a1f44", - "sha256:99af5cfcd208c81998dcf44b3ca466dee7e17453cfb50e98b87947c3a86f8753", - "sha256:9faea1cca34501c7e139bc7ef8e504d532b77865c58592493e2c154a003b450f", - "sha256:a7ba4c9a174db841cfee9a0b92563862a0301d7ca543334666c7266b541f141a", - "sha256:b26071c2313d1880599c69fd831a07b32a8c961ba69d7ccbe5db1cd8d319a4ca", - "sha256:b49dc8e1116abde13a3e6a9eb8da6ab292c5a3325155fb872e39011b110b37e6", - "sha256:bd40def0fd013569887008baa6da9ca428e3d7247adeeaeada153006227bb2e7", - "sha256:bfd0db770e8bd4e044e20298dcae6dfc42561f85d17ee546dcd978c8b23066ae", - "sha256:c2fad1efae5889925c8fd7867fdd61f59480e4e0b510f9db096c912e884704f1", - "sha256:c81aea93d526ccf6bc0b842c91216ee9867cd8792f6725a00f19c8b5837e1715", - "sha256:da786e039b4ad2bce3d53d4799438cf1f5e01a0108f1b8d78ac08e6627281b1a", - "sha256:deab85a069397540987082d251e9c89e0e5b2e3e044014344ff81f60e211fc4b", - "sha256:e3f1e6224c3407beb1849bdc5ae3150929e593e4cffff6ca41c6ec2b10942c80", - "sha256:e74eb224e53aae3943d66e2d29fe42322d5753fd4c0641329bccb7efb3a46552", - "sha256:ee697c7ea65cb14915a64f36874da8ffc2123df43cf8bc952172e04a26656cd6", - "sha256:f37792b16d11606c28e428460bd6a3d14b8917b109e77cdbe4ca78b0b9a52c87", - "sha256:fd2906b54cbf879c09d875ad4e4687c58d87f5ed03496063fec1c9065569fd5d" - ], - "version": "==0.29.10" - }, - "decorator": { - "hashes": [ - "sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de", - "sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6" - ], - "version": "==4.4.0" - }, - "defusedxml": { - "hashes": [ - "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93", - "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5" - ], - "version": "==0.6.0" - }, - "entrypoints": { - "hashes": [ - "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", - "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" - ], - "version": "==0.3" - }, - "enum34": { - "hashes": [ - "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", - "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", - "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", - "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1" - ], - "version": "==1.1.6" - }, - "ipykernel": { - "hashes": [ - "sha256:346189536b88859937b5f4848a6fd85d1ad0729f01724a411de5cae9b618819c", - "sha256:f0e962052718068ad3b1d8bcc703794660858f58803c3798628817f492a8769c" - ], - "index": "pypi", - "version": "==5.1.1" - }, - "ipympl": { - "hashes": [ - "sha256:48ede51641bee78c32994cbd86b385714d61beb7d80c87f0cc1b70efb51dd5f5", - "sha256:cefac1229d9eeb6b1c96ab671214dbdc05428973194f4f126514b3547ae6ca08" - ], - "index": "pypi", - "version": "==0.2.1" - }, - "ipython": { - "hashes": [ - "sha256:54c5a8aa1eadd269ac210b96923688ccf01ebb2d0f21c18c3c717909583579a8", - "sha256:e840810029224b56cd0d9e7719dc3b39cf84d577f8ac686547c8ba7a06eeab26" - ], - "markers": "python_version >= '3.3'", - "version": "==7.5.0" - }, - "ipython-genutils": { - "hashes": [ - "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", - "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" - ], - "version": "==0.2.0" - }, - "ipywidgets": { - "hashes": [ - "sha256:0f2b5cde9f272cb49d52f3f0889fdd1a7ae1e74f37b48dac35a83152780d2b7b", - "sha256:a3e224f430163f767047ab9a042fc55adbcab0c24bbe6cf9f306c4f89fdf0ba3" - ], - "version": "==7.4.2" - }, - "jedi": { - "hashes": [ - "sha256:2bb0603e3506f708e792c7f4ad8fc2a7a9d9c2d292a358fbbd58da531695595b", - "sha256:2c6bcd9545c7d6440951b12b44d373479bf18123a401a52025cf98563fbd826c" - ], - "version": "==0.13.3" - }, - "jinja2": { - "hashes": [ - "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", - "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" - ], - "version": "==2.10.1" - }, - "joblib": { - "hashes": [ - "sha256:21e0c34a69ad7fde4f2b1f3402290e9ec46f545f15f1541c582edfe05d87b63a", - "sha256:315d6b19643ec4afd4c41c671f9f2d65ea9d787da093487a81ead7b0bac94524" - ], - "version": "==0.13.2" - }, - "jsonschema": { - "hashes": [ - "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d", - "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a" - ], - "version": "==3.0.1" - }, - "jupyter-client": { - "hashes": [ - "sha256:b5f9cb06105c1d2d30719db5ffb3ea67da60919fb68deaefa583deccd8813551", - "sha256:c44411eb1463ed77548bc2d5ec0d744c9b81c4a542d9637c7a52824e2121b987" - ], - "version": "==5.2.4" - }, - "jupyter-core": { - "hashes": [ - "sha256:927d713ffa616ea11972534411544589976b2493fc7e09ad946e010aa7eb9970", - "sha256:ba70754aa680300306c699790128f6fbd8c306ee5927976cbe48adacf240c0b7" - ], - "version": "==4.4.0" - }, - "jupyterlab": { - "hashes": [ - "sha256:0e47743c117609052ea75d211a85b2cad72b208f5fef664fab0c11afa1f5f0f7", - "sha256:2ec845845d51221e39d0d753884a19342c953f39febf3148a68631bf57ecb774" - ], - "index": "pypi", - "version": "==0.35.6" - }, - "jupyterlab-server": { - "hashes": [ - "sha256:65eaf85b27a37380329fbdd8ebd095a0bd65fe9261d73ef6a1abee1dbaeaac1f", - "sha256:72d916a73957a880cdb885def6d8664a6d1b2760ef5dca5ad665aa1e8d1bb783" - ], - "version": "==0.2.0" - }, - "jupyterthemes": { - "hashes": [ - "sha256:2a8ebc0c84b212ab99b9f1757fc0582a3f53930d3a75b2492d91a7c8b36ab41e", - "sha256:4bd42fc88a06e3afabbe70c2ee25e6467147512993a3cbd9bec57ae3fd2e2fb1" - ], - "index": "pypi", - "version": "==0.20.0" - }, - "kiwisolver": { - "hashes": [ - "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", - "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", - "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", - "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", - "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", - "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", - "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", - "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", - "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", - "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", - "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", - "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", - "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", - "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", - "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", - "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", - "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", - "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", - "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", - "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", - "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", - "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", - "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", - "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", - "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", - "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", - "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", - "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f" - ], - "version": "==1.1.0" - }, - "lesscpy": { - "hashes": [ - "sha256:72a38c751681e91e258825c1e826c38508c183f48b2e420e1a65d01eaa04bac3", - "sha256:f3c6d0b544c5bcdadcd3d8319feccb4128d06676d4117c6c9396ab39c25372ad" - ], - "version": "==0.13.0" - }, - "markupsafe": { - "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" - ], - "version": "==1.1.1" - }, - "matplotlib": { - "hashes": [ - "sha256:08d9bc2e2acef42965256acd5015dc2c899cbd53e01bf4214c5510c7ea0efd2d", - "sha256:1e0213f87cc0076f7b0c4c251d7e23601e2419cd98691df79edb95517ba06f0c", - "sha256:1f31053f660df5f0310118d7f5bd1e8025170e9773f0bebe8fec486d0926adf6", - "sha256:399bf6352633aeeb45ca55c6c943fa2738022fb17ae498c32a142ced0b41528d", - "sha256:409a5894efb810d630d2512449c7a4394de9a4d15fc6394e26a409b17d9cc18c", - "sha256:5c5ef5cf1bc8f483123102e2615644937af7d4c01d100acc72bf74a044a78717", - "sha256:d0052be5cdfa27018bb08194b8812c47cb985d60eb682e1809c76e9600839516", - "sha256:e7d6620d145ca9f6c3e88248e5734b6fda430e75e70755b887e48f8e9bc1de2a", - "sha256:f3d8b6bccc577e4e5ecbd58fdd63cacb8e58f0ed1e97616a7f7a7baaf4b8d036" - ], - "index": "pypi", - "version": "==3.1.0" - }, - "mistune": { - "hashes": [ - "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e", - "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4" - ], - "version": "==0.8.4" - }, - "nbconvert": { - "hashes": [ - "sha256:138381baa41d83584459b5cfecfc38c800ccf1f37d9ddd0bd440783346a4c39c", - "sha256:4a978548d8383f6b2cfca4a3b0543afb77bc7cb5a96e8b424337ab58c12da9bc" - ], - "version": "==5.5.0" - }, - "nbformat": { - "hashes": [ - "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b", - "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402" - ], - "version": "==4.4.0" - }, - "niapy": { - "hashes": [ - "sha256:be583b1b205fa40527f1685cf901d3044564744b12f01307494d6992cc4243fe", - "sha256:f9ff0d87e0471f935140b251b7b8d513f46a8d5bfeb9ef80fb983b602ed3324f", - "sha256:fa675395ffbe955930b4b0e509fc28b2d3ecd7db0f3992e24b433040452482c1" - ], - "path": "./../../NiaPy/dist/NiaPy-2.0.0rc4-cp37-cp37m-linux_x86_64.whl", - "version": "==2.0.0rc4" - }, - "notebook": { - "hashes": [ - "sha256:573e0ae650c5d76b18b6e564ba6d21bf321d00847de1d215b418acb64f056eb8", - "sha256:f64fa6624d2323fbef6210a621817d6505a45d0d4a9367f1843b20a38a4666ee" - ], - "version": "==5.7.8" - }, - "numpy": { - "hashes": [ - "sha256:0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633", - "sha256:141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7", - "sha256:14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b", - "sha256:27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5", - "sha256:2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e", - "sha256:3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca", - "sha256:52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336", - "sha256:6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5", - "sha256:7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7", - "sha256:7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7", - "sha256:94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69", - "sha256:a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3", - "sha256:ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166", - "sha256:b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8", - "sha256:b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722", - "sha256:cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525", - "sha256:d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10", - "sha256:dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29", - "sha256:dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8", - "sha256:e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52", - "sha256:ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797", - "sha256:f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a", - "sha256:f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7" - ], - "index": "pypi", - "version": "==1.16.4" - }, - "pandas": { - "hashes": [ - "sha256:071e42b89b57baa17031af8c6b6bbd2e9a5c68c595bc6bf9adabd7a9ed125d3b", - "sha256:17450e25ae69e2e6b303817bdf26b2cd57f69595d8550a77c308be0cd0fd58fa", - "sha256:17916d818592c9ec891cbef2e90f98cc85e0f1e89ed0924c9b5220dc3209c846", - "sha256:2538f099ab0e9f9c9d09bbcd94b47fd889bad06dc7ae96b1ed583f1dc1a7a822", - "sha256:366f30710172cb45a6b4f43b66c220653b1ea50303fbbd94e50571637ffb9167", - "sha256:42e5ad741a0d09232efbc7fc648226ed93306551772fc8aecc6dce9f0e676794", - "sha256:4e718e7f395ba5bfe8b6f6aaf2ff1c65a09bb77a36af6394621434e7cc813204", - "sha256:4f919f409c433577a501e023943e582c57355d50a724c589e78bc1d551a535a2", - "sha256:4fe0d7e6438212e839fc5010c78b822664f1a824c0d263fd858f44131d9166e2", - "sha256:5149a6db3e74f23dc3f5a216c2c9ae2e12920aa2d4a5b77e44e5b804a5f93248", - "sha256:627594338d6dd995cfc0bacd8e654cd9e1252d2a7c959449228df6740d737eb8", - "sha256:83c702615052f2a0a7fb1dd289726e29ec87a27272d775cb77affe749cca28f8", - "sha256:8c872f7fdf3018b7891e1e3e86c55b190e6c5cee70cab771e8f246c855001296", - "sha256:90f116086063934afd51e61a802a943826d2aac572b2f7d55caaac51c13db5b5", - "sha256:a3352bacac12e1fc646213b998bce586f965c9d431773d9e91db27c7c48a1f7d", - "sha256:bcdd06007cca02d51350f96debe51331dec429ac8f93930a43eb8fb5639e3eb5", - "sha256:c1bd07ebc15285535f61ddd8c0c75d0d6293e80e1ee6d9a8d73f3f36954342d0", - "sha256:c9a4b7c55115eb278c19aa14b34fcf5920c8fe7797a09b7b053ddd6195ea89b3", - "sha256:cc8fc0c7a8d5951dc738f1c1447f71c43734244453616f32b8aa0ef6013a5dfb", - "sha256:d7b460bc316064540ce0c41c1438c416a40746fd8a4fb2999668bf18f3c4acf1" - ], - "index": "pypi", - "version": "==0.24.2" - }, - "pandocfilters": { - "hashes": [ - "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9" - ], - "version": "==1.4.2" - }, - "parso": { - "hashes": [ - "sha256:17cc2d7a945eb42c3569d4564cdf49bde221bc2b552af3eca9c1aad517dcdd33", - "sha256:2e9574cb12e7112a87253e14e2c380ce312060269d04bd018478a3c92ea9a376" - ], - "version": "==0.4.0" - }, - "pexpect": { - "hashes": [ - "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1", - "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb" - ], - "markers": "sys_platform != 'win32'", - "version": "==4.7.0" - }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" - }, - "pipfile": { - "hashes": [ - "sha256:f7d9f15de8b660986557eb3cc5391aa1a16207ac41bc378d03f414762d36c984" - ], - "index": "pypi", - "version": "==0.0.2" - }, - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "version": "==3.11" - }, - "prometheus-client": { - "hashes": [ - "sha256:ee0c90350595e4a9f36591f291e6f9933246ea67d7cd7d1d6139a9781b14eaae" - ], - "version": "==0.7.0" - }, - "prompt-toolkit": { - "hashes": [ - "sha256:11adf3389a996a6d45cc277580d0d53e8a5afd281d0c9ec71b28e6f121463780", - "sha256:2519ad1d8038fd5fc8e770362237ad0364d16a7650fb5724af6997ed5515e3c1", - "sha256:977c6583ae813a37dc1c2e1b715892461fcbdaa57f6fc62f33a528c4886c8f55" - ], - "version": "==2.0.9" - }, - "ptyprocess": { - "hashes": [ - "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", - "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f" - ], - "markers": "os_name != 'nt'", - "version": "==0.6.0" - }, - "pygments": { - "hashes": [ - "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", - "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297" - ], - "version": "==2.4.2" - }, - "pyparsing": { - "hashes": [ - "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", - "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" - ], - "version": "==2.4.0" - }, - "pyrsistent": { - "hashes": [ - "sha256:16692ee739d42cf5e39cef8d27649a8c1fdb7aa99887098f1460057c5eb75c3a" - ], - "version": "==0.15.2" - }, - "python-dateutil": { - "hashes": [ - "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", - "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" - ], - "version": "==2.8.0" - }, - "pytz": { - "hashes": [ - "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", - "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" - ], - "version": "==2019.1" - }, - "pyzmq": { - "hashes": [ - "sha256:1651e52ed91f0736afd6d94ef9f3259b5534ce8beddb054f3d5ca989c4ef7c4f", - "sha256:5ccb9b3d4cd20c000a9b75689d5add8cd3bce67fcbd0f8ae1b59345247d803af", - "sha256:5e120c4cd3872e332fb35d255ad5998ebcee32ace4387b1b337416b6b90436c7", - "sha256:5e2a3707c69a7281a9957f83718815fd74698cba31f6d69f9ed359921f662221", - "sha256:63d51add9af8d0442dc90f916baf98fdc04e3b0a32afec4bfc83f8d85e72959f", - "sha256:65c5a0bdc49e20f7d6b03a661f71e2fda7a99c51270cafe71598146d09810d0d", - "sha256:66828fabe911aa545d919028441a585edb7c9c77969a5fea6722ef6e6ece38ab", - "sha256:7d79427e82d9dad6e9b47c0b3e7ae5f9d489b1601e3a36ea629bb49501a4daf3", - "sha256:824ee5d3078c4eae737ffc500fbf32f2b14e6ec89b26b435b7834febd70120cf", - "sha256:89dc0a83cccec19ff3c62c091e43e66e0183d1e6b4658c16ee4e659518131494", - "sha256:8b319805f6f7c907b101c864c3ca6cefc9db8ce0791356f180b1b644c7347e4c", - "sha256:90facfb379ab47f94b19519c1ecc8ec8d10813b69d9c163117944948bdec5d15", - "sha256:a0a178c7420021fc0730180a914a4b4b3092ce9696ceb8e72d0f60f8ce1655dd", - "sha256:a7a89591ae315baccb8072f216614b3e59aed7385aef4393a6c741783d6ee9cf", - "sha256:ba2578f0ae582452c02ed9fac2dc477b08e80ce05d2c0885becf5fff6651ccb0", - "sha256:c69b0055c55702f5b0b6b354133e8325b9a56dbc80e1be2d240bead253fb9825", - "sha256:ca434e1858fe222380221ddeb81e86f45522773344c9da63c311d17161df5e06", - "sha256:d4b8ecfc3d92f114f04d5c40f60a65e5196198b827503341521dda12d8b14939", - "sha256:d706025c47b09a54f005953ebe206f6d07a22516776faa4f509aaff681cc5468", - "sha256:d8f27e958f8a2c0c8ffd4d8855c3ce8ac3fa1e105f0491ce31729aa2b3229740", - "sha256:dbd264298f76b9060ce537008eb989317ca787c857e23cbd1b3ddf89f190a9b1", - "sha256:e926d66f0df8fdbf03ba20583af0f215e475c667fb033d45fd031c66c63e34c9", - "sha256:efc3bd48237f973a749f7312f68062f1b4ca5c2032a0673ca3ea8e46aa77187b", - "sha256:f59bc782228777cbfe04555707a9c56d269c787ed25d6d28ed9d0fbb41cb1ad2", - "sha256:f8da5322f4ff5f667a0d5a27e871b560c6637153c81e318b35cb012b2a98835c" - ], - "version": "==18.0.1" - }, - "scikit-learn": { - "hashes": [ - "sha256:051c53f9e900b0e9eccff2391f5317d1673d72e842bcbcd3e5d0b132459086ed", - "sha256:0aafc312a55ebf58073151b9308761a5fcfa45b7f7730cea4b1f066f824c72db", - "sha256:185d88ee4955cd68d7ff57356d1dd99cfc2de4b6aa5e5d679cafbc9df54716ff", - "sha256:195465c39daded4f3ef8759291ffde81365486d4293e63dd9e32de0f569ecbbf", - "sha256:4a6398500d035a4402476a2e3ae9f65a7a3f1b366ec6a7f6dd45c289f72dc954", - "sha256:56f14e98632fb9237e7d005c6d8e346d01fa67f7b92f5f5d57a0bd06c741f9f6", - "sha256:77092513dd780e12affde46a6394b52947db3fc00cf1d8c1c8eede52b37591d1", - "sha256:7d2cdfe16b1ae6f9a1760b69be27c2004a84fc362984f930df135c847c47b765", - "sha256:82c3450fc375f27e3529fa05fec627c9fc75915e05fcd55de43f193b3aa907af", - "sha256:a5fba00d9037b62b0e0906f64efe9e4a754e556bc091cc12f84bc81655b4a414", - "sha256:acba6bf5928e415b6296799a7aa069b66254c9440bce88ed2e5915865a317093", - "sha256:b474f00d2533f18761fb17fb0950b27e72baf0796176247b5a7cf0ee369790ee", - "sha256:ca45e0def97f73a828cee417174fafa0ab35a41f8bdca4424120a29c5589c548", - "sha256:f09e544a6756afbd9d31e1d8ddfde5a2c9c17f6d4274104c988fceb611e2d5c5", - "sha256:f979bb85cbfd9ed4d54709d86ab8893b316726abd1c9ab04abe7e6414b71b753", - "sha256:fb4c7a2294447515fffec33c1f5eedbe942e9be56edb8c6619607e7882531d40" - ], - "index": "pypi", - "version": "==0.21.2" - }, - "scipy": { - "hashes": [ - "sha256:03b1e0775edbe6a4c64effb05fff2ce1429b76d29d754aa5ee2d848b60033351", - "sha256:09d008237baabf52a5d4f5a6fcf9b3c03408f3f61a69c404472a16861a73917e", - "sha256:10325f0ffac2400b1ec09537b7e403419dcd25d9fee602a44e8a32119af9079e", - "sha256:1db9f964ed9c52dc5bd6127f0dd90ac89791daa690a5665cc01eae185912e1ba", - "sha256:409846be9d6bdcbd78b9e5afe2f64b2da5a923dd7c1cd0615ce589489533fdbb", - "sha256:4907040f62b91c2e170359c3d36c000af783f0fa1516a83d6c1517cde0af5340", - "sha256:6c0543f2fdd38dee631fb023c0f31c284a532d205590b393d72009c14847f5b1", - "sha256:826b9f5fbb7f908a13aa1efd4b7321e36992f5868d5d8311c7b40cf9b11ca0e7", - "sha256:a7695a378c2ce402405ea37b12c7a338a8755e081869bd6b95858893ceb617ae", - "sha256:a84c31e8409b420c3ca57fd30c7589378d6fdc8d155d866a7f8e6e80dec6fd06", - "sha256:adadeeae5500de0da2b9e8dd478520d0a9945b577b2198f2462555e68f58e7ef", - "sha256:b283a76a83fe463c9587a2c88003f800e08c3929dfbeba833b78260f9c209785", - "sha256:c19a7389ab3cd712058a8c3c9ffd8d27a57f3d84b9c91a931f542682bb3d269d", - "sha256:c3bb4bd2aca82fb498247deeac12265921fe231502a6bc6edea3ee7fe6c40a7a", - "sha256:c5ea60ece0c0c1c849025bfc541b60a6751b491b6f11dd9ef37ab5b8c9041921", - "sha256:db61a640ca20f237317d27bc658c1fc54c7581ff7f6502d112922dc285bdabee" - ], - "index": "pypi", - "version": "==1.3.0" - }, - "send2trash": { - "hashes": [ - "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2", - "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b" - ], - "version": "==1.5.0" - }, - "six": { - "hashes": [ - "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", - "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" - ], - "version": "==1.12.0" - }, - "terminado": { - "hashes": [ - "sha256:d9d012de63acb8223ac969c17c3043337c2fcfd28f3aea1ee429b345d01ef460", - "sha256:de08e141f83c3a0798b050ecb097ab6259c3f0331b2f7b7750c9075ced2c20c2" - ], - "version": "==0.8.2" - }, - "testpath": { - "hashes": [ - "sha256:46c89ebb683f473ffe2aab0ed9f12581d4d078308a3cb3765d79c6b2317b0109", - "sha256:b694b3d9288dbd81685c5d2e7140b81365d46c29f5db4bc659de5aa6b98780f8" - ], - "version": "==0.4.2" - }, - "toml": { - "hashes": [ - "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", - "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" - ], - "version": "==0.10.0" - }, - "tornado": { - "hashes": [ - "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", - "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", - "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", - "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", - "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", - "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", - "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" - ], - "version": "==6.0.2" - }, - "traitlets": { - "hashes": [ - "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", - "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" - ], - "version": "==4.3.2" - }, - "wcwidth": { - "hashes": [ - "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", - "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" - ], - "version": "==0.1.7" - }, - "webencodings": { - "hashes": [ - "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", - "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" - ], - "version": "==0.5.1" - }, - "widgetsnbextension": { - "hashes": [ - "sha256:14b2c65f9940c9a7d3b70adbe713dbd38b5ec69724eebaba034d1036cf3d4740", - "sha256:fa618be8435447a017fd1bf2c7ae922d0428056cfc7449f7a8641edf76b48265" - ], - "version": "==3.4.2" - }, - "xlsxwriter": { - "hashes": [ - "sha256:5ec6aa71f6ae4b6298376d8b6a56ca9cdcb8b80323a444212226447aed4fa10f", - "sha256:ec51d99c0cc5d95ec8d8e9c8de7c8fbbf461988bec01a8c86b5155a6716b0a5a" - ], - "version": "==1.1.8" - } - }, - "develop": {} -} From e54929d66d9cc31a7a04030d6ba387a0f18948e8 Mon Sep 17 00:00:00 2001 From: Klemen Date: Mon, 28 Oct 2019 14:32:23 +0000 Subject: [PATCH 03/32] Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f5cd5be..97e26d4 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ This repository contains various examples of usage of the [NiaPy micro-framework Current list of examples: -- [Optimization of KNN parameters](https://github.com/NiaOrg/NiaPy-examples/tree/master/optimize_KNN_parameters) -- [CEC Competitions on Real-Parameter Single Objective Optimization](https://github.com/NiaOrg/NiaPy-examples/tree/master/CEC) -- [CEC Competitions on Constrained Real Parameter single objective optimization](https://github.com/NiaOrg/NiaPy-examples/tree/master/CECC) +- [Optimization of KNN parameters](optimize_KNN_parameters) +- [CEC Competitions on Real-Parameter Single Objective Optimization](CEC) +- [CEC Competitions on Constrained Real Parameter single objective optimization](CECC) +- [Clustering optimization](clustering_datasets) ## Contributing From 7490e06fb2d5599eb9b79f68e3c0c2a4cf0bb39a Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Mon, 18 Nov 2019 21:29:17 +0100 Subject: [PATCH 04/32] Added some fixes for new runs --- CEC/Makefile | 9 +++++++++ CEC/Pipfile | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CEC/Makefile b/CEC/Makefile index 69ce9ab..ba024d0 100644 --- a/CEC/Makefile +++ b/CEC/Makefile @@ -1,6 +1,15 @@ +MAKE:=make + install: Pipfile pipenv install +lab: + pipenv run jupyter lab + +build17: + cd cec2017 + $(MAKE) -C build + clean: Pipfile.lock pipenv --rm rm Pipfile.lock diff --git a/CEC/Pipfile b/CEC/Pipfile index 39b0b1c..3bd6d30 100644 --- a/CEC/Pipfile +++ b/CEC/Pipfile @@ -16,4 +16,5 @@ pydot = ">=1.4.1" graphviz = ">=0.10.1" Cython = ">=0.29.7" scikit-learn = ">=0.21.3" -niapy = {path = "./../../NiaPy/dist/NiaPy-feature-cp37-cp37m-linux_x86_64.whl"} +jupyterlab = "*" +niapy = {path = "../../NiaPy/dist/NiaPy-2.0.0rc10-py3-none-any.whl"} From fc574479af20f52528041d164d5aec11c270bbce Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Mon, 18 Nov 2019 21:42:07 +0100 Subject: [PATCH 05/32] Added some fixes --- .gitignore | 2 ++ CEC/Makefile | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 987df74..b266c63 100644 --- a/.gitignore +++ b/.gitignore @@ -108,5 +108,7 @@ venv.bak/ .vscode/ +**/Pipfile.lock + # End of https://www.gitignore.io/api/python diff --git a/CEC/Makefile b/CEC/Makefile index ba024d0..57bc485 100644 --- a/CEC/Makefile +++ b/CEC/Makefile @@ -6,10 +6,6 @@ install: Pipfile lab: pipenv run jupyter lab -build17: - cd cec2017 - $(MAKE) -C build - clean: Pipfile.lock pipenv --rm rm Pipfile.lock From 73f64c67ea20d3b6f2bc9a2d9c3899ef51aec4b2 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Mon, 18 Nov 2019 22:33:34 +0100 Subject: [PATCH 06/32] Added some fixes for new updates --- CEC/AlgoStats.ipynb | 8 ++++---- CEC/run_cec.py | 18 +++++++++++------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index e2f2622..cb405e7 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -299,9 +299,9 @@ ], "metadata": { "kernelspec": { - "display_name": "NiaPy", + "display_name": "Python 3", "language": "python", - "name": "niapy" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -313,9 +313,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.0" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/CEC/run_cec.py b/CEC/run_cec.py index 2f377b1..7cb1c23 100644 --- a/CEC/run_cec.py +++ b/CEC/run_cec.py @@ -2,11 +2,14 @@ import sys import random + import logging import pandas as pd from numpy import asarray, savetxt, set_printoptions, inf -from NiaPy import Runner -from NiaPy.util import StoppingTask, TaskConvPrint, TaskConvPlot, TaskConvSave, OptimizationType + +from NiaPy.algorithms import AlgorithmUtility +from NiaPy.benchmarks import Benchmark +from NiaPy.task import StoppingTask, OptimizationType from cecargparser import getDictArgs logging.basicConfig() @@ -18,9 +21,9 @@ # For output results printing set_printoptions(linewidth=10000000, formatter={'all': lambda x: str(x)}) -class MinMB(object): +class MinMB(Benchmark): def __init__(self, run_fun, Lower=-100, Upper=100, fnum=1): - self.Lower, self.Upper = Lower, Upper + Benchmark.__init__(self, Lower=Lower, Upper=Upper) self.fnum = fnum self.run_fun = run_fun @@ -96,7 +99,7 @@ def simple_example(alg, cec, fnum=1, runs=10, D=10, nFES=50000, nGEN=5000, seed= def logging_example(alg, cec, fnum=1, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=False, sr=[-8192, 8192], **kwu): func = getCecBench(cec, D) - task = TaskConvPrint(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) + task = StoppingTask(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum), logger=True) algo = alg(seed=seed[0], NP=100, vMin=-16000, vMax=16000, w=0.5) best = algo.run(task) logger.info('%s %s' % (best[0], best[1])) @@ -104,7 +107,7 @@ def logging_example(alg, cec, fnum=1, D=10, nFES=50000, nGEN=5000, seed=[None], def save_example(alg, cec, fnum=1, runs=10, D=10, nFES=50000, nGEN=5000, seed=[None], optType=OptimizationType.MINIMIZATION, optFunc=MinMB, wout=True, sr=[-100, 100], **kwu): bests, conv_it, conv_f, func = list(), list(), list(), getCecBench(cec, D) for i in range(runs): - task = TaskConvSave(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) + task = StoppingTask(D=D, nFES=nFES, nGEN=nGEN, optType=optType, benchmark=optFunc(func, sr[0], sr[1], fnum)) algo = alg(seed=seed[i % len(seed)]) best = algo.run(task) logger.info('%s %s' % (best[0], best[1])) @@ -138,7 +141,8 @@ def getOptType(otype): pargs = getDictArgs(sys.argv[1:]) fes = getMaxFES(pargs['cec']) if not inf else sys.maxsize pargs['nFES'] = round(pargs['D'] * fes * pargs['reduc']) - algo = Runner.getAlgorithm(pargs['algo']) + algUtl = AlgorithmUtility() + algo = algUtl.get_algorithm(pargs['algo']) optFunc = getOptType(pargs['optType']) if not pargs['runType']: simple_example(algo, optFunc=optFunc, **pargs) elif pargs['runType'] == 'log': logging_example(algo, optFunc=optFunc, **pargs) From bb3550d01d48d2d656117c1bc5683c224b795115 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Tue, 19 Nov 2019 21:00:39 +0100 Subject: [PATCH 07/32] Added some fixes for runing --- CEC/AlgoStats.ipynb | 88 +++++++++++++++++++++++++++++++-------------- CEC/Makefile | 2 +- CEC/run_cec.py | 4 +-- 3 files changed, 65 insertions(+), 29 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index cb405e7..a2344b8 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -32,7 +32,7 @@ "metadata": {}, "outputs": [], "source": [ - "dims, algos, alpha = [10, 30, 50], ['dynNpMsjDE', 'DE', 'jDE', 'BBFWA', 'SCA', 'ES(1+1)', 'dynFWAG', 'ASO', 'BA', 'MTS'], 0.05" + "dims, algos, alpha = [10, 30, 50], ['BA', 'ABA', 'SABA', 'HBA', 'HSABA'], 0.05" ] }, { @@ -52,8 +52,9 @@ "sys.path.append('cec2017')\n", "from cec2017 import run_fun\n", "from run_cec import MinMB\n", - "from NiaPy import Runner\n", - "from NiaPy.util import Task\n", + "\n", + "from NiaPy.algorithms import AlgorithmUtility\n", + "from NiaPy.task import StoppingTask, Utility\n", "\n", "def testOne(x=0.55):\n", " for i in range(10 ** 6): \n", @@ -70,12 +71,28 @@ " x = np.random.uniform(-100, 100, d)\n", " run_fun(x, 18)\n", "\n", - "def runTree(a, d):\n", - " task = Task(D=d, nFES=2 * 10 ** 5, benchmark=MinMB(run_fun, fnum=18))\n", - " algo = Runner.getAlgorithm(a)(task=task)\n", + "def testThreeCec(a, d, fnum=1):\n", + " autil = AlgorithmUtility()\n", + " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(run_fun, fnum=fnum))\n", + " algo = autil.get_algorithm(a)()\n", + " start_time = time.time()\n", + " best = algo.run(task)\n", + " return time.time() - start_time, best\n", + "\n", + "def testThreeBasic(a, d, fnum=1):\n", + " mapper = {1: 'ackley'}\n", + " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum])\n", + " algo = autil.get_algorithm(a)()\n", " start_time = time.time()\n", - " algo.run()\n", - " return time.time() - start_time" + " best = algo.run(task)\n", + " return time.time() - start_time, best" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test one" ] }, { @@ -87,29 +104,48 @@ "start_time = time.time()\n", "testOne()\n", "t0 = (time.time() - start_time)\n", - "\n", - "print ('t0: ', t0)\n", - "\n", + "print(t0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test two" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "t1 = []\n", "for d in dims:\n", " start_time = time.time()\n", " testTwo(d)\n", " t1.append(time.time() - start_time)\n", - " \n", - "print ('t1: ', t1)\n", - "\n", - "t2 = []\n", - "for d in dims:\n", - " tmp = []\n", - " for a in algos: \n", - " r = np.full(5, 0.0)\n", - " for i in range(len(r)): r[i] = runTree(a, d)\n", - " tmp.append(np.mean(r))\n", - " t2.append(tmp)\n", - "\n", - "for i, d in enumerate(dims):\n", - " for j, a in enumerate(algos):\n", - " print ('%10s %d -- %.4E' % (a, d, (t2[i][j] - t1[i]) / t0))" + "print(t1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test three" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = 10\n", + "# for d in dims:\n", + "for f in range(10):\n", + " for a in algos: print('%s\\t on function %d => \\t%f' % (a, f+1, testThreeCec(a, d, f+1)[1][1]))\n", + " print('--------------------------------------')" ] }, { diff --git a/CEC/Makefile b/CEC/Makefile index 57bc485..481f5ef 100644 --- a/CEC/Makefile +++ b/CEC/Makefile @@ -6,6 +6,6 @@ install: Pipfile lab: pipenv run jupyter lab -clean: Pipfile.lock +uninstall: Pipfile.lock pipenv --rm rm Pipfile.lock diff --git a/CEC/run_cec.py b/CEC/run_cec.py index 7cb1c23..a8d8b6f 100644 --- a/CEC/run_cec.py +++ b/CEC/run_cec.py @@ -27,12 +27,12 @@ def __init__(self, run_fun, Lower=-100, Upper=100, fnum=1): self.fnum = fnum self.run_fun = run_fun - def function(self): return lambda x: self.run_fun(asarray(x), self.fnum) + def function(self): return lambda d, x: self.run_fun(asarray(x), self.fnum) class MaxMB(MinMB): def function(self): f = MinMB.function(self) - return lambda x: -f(x) + return lambda d, x: -f(d, x) cdimsOne = [2, 10, 30, 50] cdimsTwo = [2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] From 0db78e1ad1e2f3c8c77f066e9e2a681e1f3a3eb5 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Tue, 19 Nov 2019 22:48:23 +0100 Subject: [PATCH 08/32] Added new fixes --- CEC/AlgoStats.ipynb | 257 ++++++++++++++++++++++++++++++++++++++++---- CEC/Makefile | 3 + 2 files changed, 241 insertions(+), 19 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index a2344b8..c7674e6 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,13 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "import time\n", + "\n", + "from IPython.display import display\n", + "\n", "import numpy as np\n", + "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "# Test the type of distribution of data for any distribution\n", @@ -28,11 +32,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "dims, algos, alpha = [10, 30, 50], ['BA', 'ABA', 'SABA', 'HBA', 'HSABA'], 0.05" + "dims, algosNames, alpha = [10, 30, 50], ['BA', 'ABA', 'SABA', 'HBA', 'HSABA'], 0.05" ] }, { @@ -45,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -55,6 +59,9 @@ "\n", "from NiaPy.algorithms import AlgorithmUtility\n", "from NiaPy.task import StoppingTask, Utility\n", + "from NiaPy.util import reflectRepair\n", + "from NiaPy.algorithms.basic import BatAlgorithm\n", + "from NiaPy.algorithms.modified import HybridBatAlgorithm, AdaptiveBatAlgorithm, SelfAdaptiveBatAlgorithm, HybridSelfAdaptiveBatAlgorithm\n", "\n", "def testOne(x=0.55):\n", " for i in range(10 ** 6): \n", @@ -72,20 +79,33 @@ " run_fun(x, 18)\n", "\n", "def testThreeCec(a, d, fnum=1):\n", - " autil = AlgorithmUtility()\n", + "# autil = AlgorithmUtility()\n", " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(run_fun, fnum=fnum))\n", - " algo = autil.get_algorithm(a)()\n", + "# algo = autil.get_algorithm(a)()\n", " start_time = time.time()\n", - " best = algo.run(task)\n", + "# best = algo.run(task)\n", + " best = a.run(task)\n", " return time.time() - start_time, best\n", "\n", - "def testThreeBasic(a, d, fnum=1):\n", - " mapper = {1: 'ackley'}\n", - " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum])\n", - " algo = autil.get_algorithm(a)()\n", + "def testThreeBasic(a, d, fnum=1, seed=1):\n", + " mapper = {\n", + " 1:'bentcigar',\n", + " 2:'',\n", + " 3:'zakharov',\n", + " 4:'rosenbrock',\n", + " 5:'rastrigin',\n", + " 6:'',\n", + " 10:'swefel'\n", + " }\n", + " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum], frepair=reflectRepair)\n", + "# algo = autil.get_algorithm(a)(seed=seed)\n", " start_time = time.time()\n", - " best = algo.run(task)\n", - " return time.time() - start_time, best" + "# best = algo.run(task)\n", + " best = a.run(task)\n", + " return time.time() - start_time, best\n", + "\n", + "seed = 1\n", + "algs = [BatAlgorithm(seed=seed), HybridBatAlgorithm(seed=seed), SelfAdaptiveBatAlgorithm(seed=seed), HybridSelfAdaptiveBatAlgorithm(seed=seed, NP=100, A=0.5, F=0.5, CR=0.9, r=0.2)]" ] }, { @@ -137,15 +157,214 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "d = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Func 1'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BatAlgorithmHybridBatAlgorithmSelfAdaptiveBatAlgorithmHybridSelfAdaptiveBatAlgorithm
03.469749e+009.195651e+004.402900e+001.641585e+01
14.510521e+096.713112e-1437.562695e+083.318759e+07
\n", + "
" + ], + "text/plain": [ + " BatAlgorithm HybridBatAlgorithm SelfAdaptiveBatAlgorithm \\\n", + "0 3.469749e+00 9.195651e+00 4.402900e+00 \n", + "1 4.510521e+09 6.713112e-143 7.562695e+08 \n", + "\n", + " HybridSelfAdaptiveBatAlgorithm \n", + "0 1.641585e+01 \n", + "1 3.318759e+07 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res, f = {}, 1\n", + "for a in algs:\n", + " r = testThreeBasic(a, d, f)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + "display('Func %d' % f)\n", + "display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Func 1'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BatAlgorithmHybridBatAlgorithmSelfAdaptiveBatAlgorithmHybridSelfAdaptiveBatAlgorithm
03.108201e+008.8684083.815225e+001.623562e+01
19.833626e+09100.0000009.774781e+093.032713e+07
\n", + "
" + ], + "text/plain": [ + " BatAlgorithm HybridBatAlgorithm SelfAdaptiveBatAlgorithm \\\n", + "0 3.108201e+00 8.868408 3.815225e+00 \n", + "1 9.833626e+09 100.000000 9.774781e+09 \n", + "\n", + " HybridSelfAdaptiveBatAlgorithm \n", + "0 1.623562e+01 \n", + "1 3.032713e+07 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for f in [0, 3, 4, 5]:\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "for f in range(10, 20):\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, "outputs": [], "source": [ - "d = 10\n", - "# for d in dims:\n", - "for f in range(10):\n", - " for a in algos: print('%s\\t on function %d => \\t%f' % (a, f+1, testThreeCec(a, d, f+1)[1][1]))\n", - " print('--------------------------------------')" + "for f in range(20, 31):\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" ] }, { diff --git a/CEC/Makefile b/CEC/Makefile index 481f5ef..b7fdcbb 100644 --- a/CEC/Makefile +++ b/CEC/Makefile @@ -6,6 +6,9 @@ install: Pipfile lab: pipenv run jupyter lab +shell: + pipenv shell + uninstall: Pipfile.lock pipenv --rm rm Pipfile.lock From d1dc8195bc34377421ab360fa2b4f6c90d3ae90e Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Wed, 20 Nov 2019 23:15:37 +0100 Subject: [PATCH 09/32] Added some fixes --- CEC/Untitled.ipynb | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CEC/Untitled.ipynb diff --git a/CEC/Untitled.ipynb b/CEC/Untitled.ipynb new file mode 100644 index 0000000..828459c --- /dev/null +++ b/CEC/Untitled.ipynb @@ -0,0 +1,46 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from NiaPy.algorithms.algorithm import Algorithm\n", + "from NiaPy.util.utility import objects2array\n", + "\n", + "class EvolutionStrategy1p1(Algorithm):\n", + " def setParameters(self, mu=1, k=10, c_a=1.1, c_r=0.5, epsilon=1e-20, **ukwargs):\n", + " Algorithm.setParameters(self, NP=mu, itype=ukwargs.pop('itype', IndividualES), **ukwargs)\n", + " \n", + " def initPopulation(self, task):\n", + " c, ki = IndividualES(task=task, rnd=self.Rand), 0\n", + " return c, c.f, {'ki': ki}\n", + "\n", + " def runIteration(self, task, c, fpop, xb, fxb, ki, **dparams):\n", + " return c, c.f, {'ki': ki}" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 6f31964dc94853058562c8912079e66bd4a5a297 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Thu, 21 Nov 2019 21:52:09 +0100 Subject: [PATCH 10/32] moved pipfile --- CEC/Pipfile => Pipfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename CEC/Pipfile => Pipfile (82%) diff --git a/CEC/Pipfile b/Pipfile similarity index 82% rename from CEC/Pipfile rename to Pipfile index 3bd6d30..b678f20 100644 --- a/CEC/Pipfile +++ b/Pipfile @@ -17,4 +17,4 @@ graphviz = ">=0.10.1" Cython = ">=0.29.7" scikit-learn = ">=0.21.3" jupyterlab = "*" -niapy = {path = "../../NiaPy/dist/NiaPy-2.0.0rc10-py3-none-any.whl"} +niapy = {path = "../NiaPy/dist/NiaPy-2.0.0rc10-py3-none-any.whl"} From dbf8c730f1637112015243e297996684a7573ed9 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Thu, 21 Nov 2019 21:53:36 +0100 Subject: [PATCH 11/32] Moved Makefile --- CEC/Makefile => Makefile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CEC/Makefile => Makefile (100%) diff --git a/CEC/Makefile b/Makefile similarity index 100% rename from CEC/Makefile rename to Makefile From e472aabecc36979d1ba1c784500a867e4cb8eca9 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Fri, 22 Nov 2019 11:52:17 +0100 Subject: [PATCH 12/32] Added updated descriotion --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 97e26d4..04fcf25 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # NiaPy examples +

NiaPy

+ This repository contains various examples of usage of the [NiaPy micro-framework](https://github.com/NiaOrg/NiaPy). Each example is placed in a separate folder inside this repository with its own instructions on how to run it. Current list of examples: From 9e9ca6f89daee004cb3338d02f6adb4187dcbc51 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Sat, 23 Nov 2019 17:33:49 +0100 Subject: [PATCH 13/32] Added some fixes for docker builds --- Pipfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index b678f20..a0f6873 100644 --- a/Pipfile +++ b/Pipfile @@ -11,10 +11,11 @@ pipfile = "*" numpy = ">=1.16.3" scipy = ">=1.2.1" matplotlib = ">=3.0.3" -pandas = ">=0.24.2" +pandas = ">=0.21.0" pydot = ">=1.4.1" graphviz = ">=0.10.1" Cython = ">=0.29.7" +XlsxWriter = ">=1.2.6" scikit-learn = ">=0.21.3" jupyterlab = "*" niapy = {path = "../NiaPy/dist/NiaPy-2.0.0rc10-py3-none-any.whl"} From d02bf99250fa70c7340f9005479ae7f60e6fc324 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Sat, 23 Nov 2019 21:38:35 +0100 Subject: [PATCH 14/32] Small fixes --- CEC/cec2017/setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CEC/cec2017/setup.py b/CEC/cec2017/setup.py index 924d5ac..bb210a2 100644 --- a/CEC/cec2017/setup.py +++ b/CEC/cec2017/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2017', ['cec2017.pyx', 'cec17_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++17', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) From 5885494df8b6a768290b4bea91430be526eb4aa4 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Sat, 23 Nov 2019 21:41:04 +0100 Subject: [PATCH 15/32] Added additional fixes --- CEC/cec2017/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index c926e1c..70952c1 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -6,6 +6,6 @@ build: cec17_test_func.cpp cec17_test_func.h cec2017.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2017.cpp - rm -r build - rm *.so + -rm cec2017.cpp + -rm -r build + -rm *.so From 98153c8c6a781b1a5e9b6058bcd7e2645027dbe4 Mon Sep 17 00:00:00 2001 From: Klemen Berkovic Date: Sat, 23 Nov 2019 21:47:25 +0100 Subject: [PATCH 16/32] Added fixes for removing unused files --- CEC/cec2005/Makefile | 6 +++--- CEC/cec2008/Makefile | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CEC/cec2005/Makefile b/CEC/cec2005/Makefile index d1e17fd..9319a87 100644 --- a/CEC/cec2005/Makefile +++ b/CEC/cec2005/Makefile @@ -5,6 +5,6 @@ build: cec5_test_func.cpp cec5_test_func.h data.h cec2005.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2005.cpp - rm -r build - rm *.so + -rm cec2005.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2008/Makefile b/CEC/cec2008/Makefile index 4d4c15c..8ccf8ef 100644 --- a/CEC/cec2008/Makefile +++ b/CEC/cec2008/Makefile @@ -6,6 +6,6 @@ build: cec8_test_func.cpp cec8_test_func.h data.h cec2008.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2008.cpp - rm -r build - rm *.so + -rm cec2008.cpp + -rm -r build + -rm *.so From b30c3d3306ec678956b904501e276683fdb59f6f Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sat, 23 Nov 2019 22:05:00 +0100 Subject: [PATCH 17/32] Added fixes --- CEC/cec2005/setup.py | 2 +- CEC/cec2008/setup.py | 3 +-- CEC/cec2013/Makefile | 6 +++--- CEC/cec2013/setup.py | 3 +-- CEC/cec2014/Makefile | 6 +++--- CEC/cec2014/setup.py | 3 +-- CEC/cec2015/Makefile | 6 +++--- CEC/cec2015/setup.py | 3 +-- CEC/cec2016/Makefile | 6 +++--- CEC/cec2016/setup.py | 3 +-- CEC/cec2017/setup.py | 2 +- CEC/cec2018/Makefile | 6 +++--- CEC/cec2018/setup.py | 3 +-- CEC/cec2019/Makefile | 6 +++--- CEC/cec2019/setup.py | 3 +-- 15 files changed, 27 insertions(+), 34 deletions(-) diff --git a/CEC/cec2005/setup.py b/CEC/cec2005/setup.py index be48b94..1e2695f 100644 --- a/CEC/cec2005/setup.py +++ b/CEC/cec2005/setup.py @@ -6,11 +6,11 @@ extensions = [ Extension('cec2008', ['cec2008.pyx', 'cec8_test_func.c'], include_dirs=[numpy.get_include()], + extra_compile_args=['-std=c++11', '-w', '-O3', '-narch=native'], language='c' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-narch=native'], ) diff --git a/CEC/cec2008/setup.py b/CEC/cec2008/setup.py index 0118a50..ca98d8e 100644 --- a/CEC/cec2008/setup.py +++ b/CEC/cec2008/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2008', ['cec2008.pyx', 'cec8_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2013/Makefile b/CEC/cec2013/Makefile index 347a131..4bb6e2c 100644 --- a/CEC/cec2013/Makefile +++ b/CEC/cec2013/Makefile @@ -6,6 +6,6 @@ build: cec13_test_func.cpp cec13_test_func.h cec2013.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2013.cpp - rm -r build - rm *.so + -rm cec2013.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2013/setup.py b/CEC/cec2013/setup.py index c0b780b..b7e74ca 100644 --- a/CEC/cec2013/setup.py +++ b/CEC/cec2013/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2013', ['cec2013.pyx', 'cec13_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2014/Makefile b/CEC/cec2014/Makefile index 0a85a22..ac2e9fb 100644 --- a/CEC/cec2014/Makefile +++ b/CEC/cec2014/Makefile @@ -6,6 +6,6 @@ build: cec14_test_func.cpp cec14_test_func.h cec2014.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2014.cpp - rm -r build - rm *.so + -rm cec2014.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2014/setup.py b/CEC/cec2014/setup.py index 96fc69a..b651a3e 100644 --- a/CEC/cec2014/setup.py +++ b/CEC/cec2014/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2014', ['cec2014.pyx', 'cec14_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2015/Makefile b/CEC/cec2015/Makefile index cb40b37..abb2593 100644 --- a/CEC/cec2015/Makefile +++ b/CEC/cec2015/Makefile @@ -6,6 +6,6 @@ build: cec15_test_func.cpp cec15_test_func.h $(PYTHON) setup.py build_ext --inplace clean: - rm cec2015.cpp - rm -r build - rm *.so + -rm cec2015.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2015/setup.py b/CEC/cec2015/setup.py index a951a7c..96ffa08 100644 --- a/CEC/cec2015/setup.py +++ b/CEC/cec2015/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2015', ['cec2015.pyx', 'cec15_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2016/Makefile b/CEC/cec2016/Makefile index 59d069f..64ef85c 100644 --- a/CEC/cec2016/Makefile +++ b/CEC/cec2016/Makefile @@ -6,6 +6,6 @@ build: cec16_test_func.cpp cec16_test_func.h cec2016.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2016.cpp - rm -r build - rm *.so + -rm cec2016.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2016/setup.py b/CEC/cec2016/setup.py index eeb2a35..93303b4 100644 --- a/CEC/cec2016/setup.py +++ b/CEC/cec2016/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2016', ['cec2016.pyx', 'cec16_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2017/setup.py b/CEC/cec2017/setup.py index bb210a2..66bd07e 100644 --- a/CEC/cec2017/setup.py +++ b/CEC/cec2017/setup.py @@ -6,7 +6,7 @@ extensions = [ Extension('cec2017', ['cec2017.pyx', 'cec17_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17', '-w', '-O3', '-march=native'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] diff --git a/CEC/cec2018/Makefile b/CEC/cec2018/Makefile index 2291479..7c09a6d 100644 --- a/CEC/cec2018/Makefile +++ b/CEC/cec2018/Makefile @@ -6,6 +6,6 @@ build: cec18_test_func.cpp cec18_test_func.h cec2018.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2018.cpp - rm -r build - rm *.so + -rm cec2018.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2018/setup.py b/CEC/cec2018/setup.py index 64eb226..2aabb14 100644 --- a/CEC/cec2018/setup.py +++ b/CEC/cec2018/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2018', ['cec2018.pyx', 'cec18_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2019/Makefile b/CEC/cec2019/Makefile index 2fb0e83..f4b05d0 100644 --- a/CEC/cec2019/Makefile +++ b/CEC/cec2019/Makefile @@ -6,6 +6,6 @@ build: cec19_test_func.cpp cec19_test_func.h cec2019.pyx $(PYTHON) setup.py build_ext --inplace clean: - rm cec2019.cpp - rm -r build - rm *.so + -rm cec2019.cpp + -rm -r build + -rm *.so diff --git a/CEC/cec2019/setup.py b/CEC/cec2019/setup.py index 346ad47..a9ef3ee 100644 --- a/CEC/cec2019/setup.py +++ b/CEC/cec2019/setup.py @@ -6,12 +6,11 @@ extensions = [ Extension('cec2019', ['cec2019.pyx', 'cec19_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++17'], + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-w', '-O3', '-march=native'], ) From b08b7b5956ff206b7e6f8ce93c1a26f9bbcb5542 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sat, 23 Nov 2019 22:10:24 +0100 Subject: [PATCH 18/32] Added makefile fix --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b7fdcbb..8df99ab 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,6 @@ lab: shell: pipenv shell -uninstall: Pipfile.lock +uninstall: pipenv --rm - rm Pipfile.lock + -rm Pipfile.lock From c1ce34f0100c6a317da676a1d2a0114f35c38fc8 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sat, 23 Nov 2019 22:15:34 +0100 Subject: [PATCH 19/32] Added smal test fix --- CEC/cec2017/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CEC/cec2017/setup.py b/CEC/cec2017/setup.py index 66bd07e..6e7ee8f 100644 --- a/CEC/cec2017/setup.py +++ b/CEC/cec2017/setup.py @@ -6,11 +6,11 @@ extensions = [ Extension('cec2017', ['cec2017.pyx', 'cec17_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], language='c++' ), ] setup( ext_modules=cythonize(extensions), + extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], ) From 675973993640cb7a662f55eb8de35d51e4a1802c Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sat, 23 Nov 2019 22:32:47 +0100 Subject: [PATCH 20/32] Added new test fixe --- CEC/cec2005/setup.py | 7 ++++++- CEC/cec2008/setup.py | 7 ++++++- CEC/cec2013/setup.py | 7 ++++++- CEC/cec2014/setup.py | 7 ++++++- CEC/cec2015/setup.py | 7 ++++++- CEC/cec2016/setup.py | 7 ++++++- CEC/cec2017/setup.py | 11 ++++++++--- CEC/cec2018/setup.py | 7 ++++++- CEC/cec2019/setup.py | 7 ++++++- 9 files changed, 56 insertions(+), 11 deletions(-) diff --git a/CEC/cec2005/setup.py b/CEC/cec2005/setup.py index 1e2695f..dbdaf66 100644 --- a/CEC/cec2005/setup.py +++ b/CEC/cec2005/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2008', ['cec2008.pyx', 'cec8_test_func.c'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-narch=native'], + extra_compile_args=extra_compile_args, language='c' ), ] diff --git a/CEC/cec2008/setup.py b/CEC/cec2008/setup.py index ca98d8e..48d6ed4 100644 --- a/CEC/cec2008/setup.py +++ b/CEC/cec2008/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2008', ['cec2008.pyx', 'cec8_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2013/setup.py b/CEC/cec2013/setup.py index b7e74ca..0572f7a 100644 --- a/CEC/cec2013/setup.py +++ b/CEC/cec2013/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2013', ['cec2013.pyx', 'cec13_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2014/setup.py b/CEC/cec2014/setup.py index b651a3e..320184a 100644 --- a/CEC/cec2014/setup.py +++ b/CEC/cec2014/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2014', ['cec2014.pyx', 'cec14_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2015/setup.py b/CEC/cec2015/setup.py index 96ffa08..b67baef 100644 --- a/CEC/cec2015/setup.py +++ b/CEC/cec2015/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2015', ['cec2015.pyx', 'cec15_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2016/setup.py b/CEC/cec2016/setup.py index 93303b4..3d31bdc 100644 --- a/CEC/cec2016/setup.py +++ b/CEC/cec2016/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2016', ['cec2016.pyx', 'cec16_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2017/setup.py b/CEC/cec2017/setup.py index 6e7ee8f..507fc67 100644 --- a/CEC/cec2017/setup.py +++ b/CEC/cec2017/setup.py @@ -1,16 +1,21 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension -import numpy +import numpy as np + +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] extensions = [ Extension('cec2017', ['cec2017.pyx', 'cec17_test_func.cpp'], - include_dirs=[numpy.get_include()], + include_dirs=[np.get_include()], + extra_compile_args=extra_compile_args, language='c++' ), ] setup( ext_modules=cythonize(extensions), - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], ) diff --git a/CEC/cec2018/setup.py b/CEC/cec2018/setup.py index 2aabb14..6354725 100644 --- a/CEC/cec2018/setup.py +++ b/CEC/cec2018/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2018', ['cec2018.pyx', 'cec18_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] diff --git a/CEC/cec2019/setup.py b/CEC/cec2019/setup.py index a9ef3ee..fc416db 100644 --- a/CEC/cec2019/setup.py +++ b/CEC/cec2019/setup.py @@ -1,12 +1,17 @@ +import os + from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension import numpy +extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] + extensions = [ Extension('cec2019', ['cec2019.pyx', 'cec19_test_func.cpp'], include_dirs=[numpy.get_include()], - extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'], + extra_compile_args=extra_compile_args, language='c++' ), ] From 1068fb70eb2e8fa7e1a5e211d530962c858b5ee0 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 08:29:54 +0000 Subject: [PATCH 21/32] Added fixes --- CEC/AlgoStats.ipynb | 239 +++++++++++++++++--------------------------- CEC/Untitled.ipynb | 46 --------- 2 files changed, 92 insertions(+), 193 deletions(-) delete mode 100644 CEC/Untitled.ipynb diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index c7674e6..728cab9 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -8,6 +8,7 @@ "source": [ "import sys\n", "import time\n", + "from multiprocessing import Process, Queue\n", "\n", "from IPython.display import display\n", "\n", @@ -74,20 +75,17 @@ " x = x / (x + 2)\n", "\n", "def testTwo(d):\n", - " for i in range(2 * 10 ** 5): \n", + " for i in range(2 * 10 ** 5):\n", " x = np.random.uniform(-100, 100, d)\n", " run_fun(x, 18)\n", "\n", "def testThreeCec(a, d, fnum=1):\n", - "# autil = AlgorithmUtility()\n", " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(run_fun, fnum=fnum))\n", - "# algo = autil.get_algorithm(a)()\n", " start_time = time.time()\n", - "# best = algo.run(task)\n", " best = a.run(task)\n", " return time.time() - start_time, best\n", "\n", - "def testThreeBasic(a, d, fnum=1, seed=1):\n", + "def testThreeBasic(a, d, fnum=1):\n", " mapper = {\n", " 1:'bentcigar',\n", " 2:'',\n", @@ -98,14 +96,33 @@ " 10:'swefel'\n", " }\n", " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum], frepair=reflectRepair)\n", - "# algo = autil.get_algorithm(a)(seed=seed)\n", " start_time = time.time()\n", - "# best = algo.run(task)\n", " best = a.run(task)\n", " return time.time() - start_time, best\n", "\n", + "def threadfun(a, d, fnum, q, runs_no):\n", + " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum))\n", + " \n", + "def runThread(a, d, fnum=1, thread_no=10, runs_no=35):\n", + " ts, qs, r, runs = [], [], [], int(runs_no / thread_no)\n", + " for _ in range(thread_no):\n", + " q = Queue(runs)\n", + " t = Process(target=threadfun, args=(a, d, fnum, q, runs))\n", + " t.start()\n", + " ts.append(t), qs.append(q)\n", + " for t in ts: t.join()\n", + " for q in qs: r.append(q.get())\n", + " return r" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ "seed = 1\n", - "algs = [BatAlgorithm(seed=seed), HybridBatAlgorithm(seed=seed), SelfAdaptiveBatAlgorithm(seed=seed), HybridSelfAdaptiveBatAlgorithm(seed=seed, NP=100, A=0.5, F=0.5, CR=0.9, r=0.2)]" + "algs = [BatAlgorithm(seed=seed), HybridBatAlgorithm(seed=seed), SelfAdaptiveBatAlgorithm(seed=seed), HybridSelfAdaptiveBatAlgorithm(seed=seed, NP=100, A=0.5, F=0.5, CR=0.9, r=0.1)]" ] }, { @@ -157,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -166,78 +183,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Func 1'" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BatAlgorithmHybridBatAlgorithmSelfAdaptiveBatAlgorithmHybridSelfAdaptiveBatAlgorithm
03.469749e+009.195651e+004.402900e+001.641585e+01
14.510521e+096.713112e-1437.562695e+083.318759e+07
\n", - "
" - ], - "text/plain": [ - " BatAlgorithm HybridBatAlgorithm SelfAdaptiveBatAlgorithm \\\n", - "0 3.469749e+00 9.195651e+00 4.402900e+00 \n", - "1 4.510521e+09 6.713112e-143 7.562695e+08 \n", - "\n", - " HybridSelfAdaptiveBatAlgorithm \n", - "0 1.641585e+01 \n", - "1 3.318759e+07 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "res, f = {}, 1\n", "for a in algs:\n", @@ -253,6 +201,62 @@ "metadata": { "scrolled": true }, + "outputs": [], + "source": [ + "for f in [0, 3, 4, 5]:\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "for f in range(10, 20):\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "for f in range(20, 31):\n", + " res = {}\n", + " for a in algs:\n", + " r = testThreeCec(a, d, f + 1)\n", + " res[a.Name[0]] = [r[0], r[1][1]]\n", + " display('Func %d' % (f + 1))\n", + " display(pd.DataFrame.from_dict(res))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running on multiple threads" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -284,39 +288,17 @@ " \n", " \n", " \n", - " BatAlgorithm\n", - " HybridBatAlgorithm\n", - " SelfAdaptiveBatAlgorithm\n", - " HybridSelfAdaptiveBatAlgorithm\n", " \n", " \n", " \n", - " \n", - " 0\n", - " 3.108201e+00\n", - " 8.868408\n", - " 3.815225e+00\n", - " 1.623562e+01\n", - " \n", - " \n", - " 1\n", - " 9.833626e+09\n", - " 100.000000\n", - " 9.774781e+09\n", - " 3.032713e+07\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " BatAlgorithm HybridBatAlgorithm SelfAdaptiveBatAlgorithm \\\n", - "0 3.108201e+00 8.868408 3.815225e+00 \n", - "1 9.833626e+09 100.000000 9.774781e+09 \n", - "\n", - " HybridSelfAdaptiveBatAlgorithm \n", - "0 1.623562e+01 \n", - "1 3.032713e+07 " + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" ] }, "metadata": {}, @@ -324,47 +306,10 @@ } ], "source": [ - "for f in [0, 3, 4, 5]:\n", - " res = {}\n", - " for a in algs:\n", - " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", - " display('Func %d' % (f + 1))\n", - " display(pd.DataFrame.from_dict(res))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "for f in range(10, 20):\n", - " res = {}\n", - " for a in algs:\n", - " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", - " display('Func %d' % (f + 1))\n", - " display(pd.DataFrame.from_dict(res))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "for f in range(20, 31):\n", - " res = {}\n", - " for a in algs:\n", - " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", - " display('Func %d' % (f + 1))\n", - " display(pd.DataFrame.from_dict(res))" + "res, d, f = {}, 10, 1\n", + "for a in algs: r = runThread(a, d, f)\n", + "display('Func %d' % f)\n", + "display(res)" ] }, { @@ -568,7 +513,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/CEC/Untitled.ipynb b/CEC/Untitled.ipynb deleted file mode 100644 index 828459c..0000000 --- a/CEC/Untitled.ipynb +++ /dev/null @@ -1,46 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from NiaPy.algorithms.algorithm import Algorithm\n", - "from NiaPy.util.utility import objects2array\n", - "\n", - "class EvolutionStrategy1p1(Algorithm):\n", - " def setParameters(self, mu=1, k=10, c_a=1.1, c_r=0.5, epsilon=1e-20, **ukwargs):\n", - " Algorithm.setParameters(self, NP=mu, itype=ukwargs.pop('itype', IndividualES), **ukwargs)\n", - " \n", - " def initPopulation(self, task):\n", - " c, ki = IndividualES(task=task, rnd=self.Rand), 0\n", - " return c, c.f, {'ki': ki}\n", - "\n", - " def runIteration(self, task, c, fpop, xb, fxb, ki, **dparams):\n", - " return c, c.f, {'ki': ki}" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} From 47a090cfcba30fdaad35fddfef043bdd538996db Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 08:30:08 +0000 Subject: [PATCH 22/32] Fixes --- CEC/AlgoStats.ipynb | 56 ++++++++------------------------------------- 1 file changed, 10 insertions(+), 46 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 728cab9..2d653f1 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -112,6 +112,7 @@ " ts.append(t), qs.append(q)\n", " for t in ts: t.join()\n", " for q in qs: r.append(q.get())\n", + " print (r)\n", " return r" ] }, @@ -174,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -255,54 +256,17 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'Func 1'" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "[(4.777076959609985, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.785366535186768, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.814147710800171, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.787548303604126, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.788863182067871, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.776641130447388, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.787241458892822, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.839709281921387, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.805223703384399, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.799341201782227, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616))]\n", + "[(12.632891416549683, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.621599435806274, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.690341472625732, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.560285091400146, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.721378803253174, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.837562799453735, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.665745973587036, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.580177307128906, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.85902452468872, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.575950145721436, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0))]\n", + "[(6.097786903381348, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.14458703994751, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.124742031097412, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.182395935058594, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.297839403152466, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.3472511768341064, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.226408243179321, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.273552417755127, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.221067905426025, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.138243675231934, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804))]\n" + ] } ], "source": [ From b6ab96ae44ec74340c4a005b618e3012f005219f Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 09:53:07 +0000 Subject: [PATCH 23/32] Added fixes for notebook --- CEC/AlgoStats.ipynb | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 2d653f1..2ab4294 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -112,13 +112,12 @@ " ts.append(t), qs.append(q)\n", " for t in ts: t.join()\n", " for q in qs: r.append(q.get())\n", - " print (r)\n", " return r" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -258,20 +257,10 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[(4.777076959609985, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.785366535186768, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.814147710800171, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.787548303604126, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.788863182067871, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.776641130447388, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.787241458892822, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.839709281921387, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.805223703384399, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616)), (4.799341201782227, (array([-65.48309084856103, -28.44395934476933, 21.610010538639063, -22.38417090233681, -29.97292408301899, 20.993864683205242, 5.315834189748905, 0.5953009053752638, 52.487479735863744, 23.997690414028952]), 12723749765.501616))]\n", - "[(12.632891416549683, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.621599435806274, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.690341472625732, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.560285091400146, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.721378803253174, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.837562799453735, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.665745973587036, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.580177307128906, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.85902452468872, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0)), (12.575950145721436, (array([-55.27639846718652, -70.42955971809468, -29.61018187441114, -58.32676327708109, 22.08960187718649, 59.93874988517264, 30.56931988293103, 18.558736265940208, 76.68042093362126, -32.16536887378905]), 100.0))]\n", - "[(6.097786903381348, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.14458703994751, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.124742031097412, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.182395935058594, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.297839403152466, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.3472511768341064, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.226408243179321, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.273552417755127, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.221067905426025, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804)), (6.138243675231934, (array([-48.20653220372867, -56.131397872551446, -13.23088320934733, -60.97769670906113, 13.447982177602023, 0.33619386164915954, 35.41198560035728, -48.396780246438965, 54.261166797024, -27.15357759557028]), 9338454224.470804))]\n" - ] - } - ], + "outputs": [], "source": [ "res, d, f = {}, 10, 1\n", - "for a in algs: r = runThread(a, d, f)\n", + "for a in algs: res[a.Name[0]] = runThread(a, d, f)\n", "display('Func %d' % f)\n", "display(res)" ] From fec3d79ca6bfac37b872e9e5f6cf121f7257b4d1 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 11:47:13 +0000 Subject: [PATCH 24/32] Added some fixes --- CEC/AlgoStats.ipynb | 111 +++++++++++++++++++++++++++---------------- CEC/cec2017/setup.py | 10 ++-- 2 files changed, 76 insertions(+), 45 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 2ab4294..d66c286 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -82,7 +82,7 @@ "def testThreeCec(a, d, fnum=1):\n", " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(run_fun, fnum=fnum))\n", " start_time = time.time()\n", - " best = a.run(task)\n", + " best = a(task)\n", " return time.time() - start_time, best\n", "\n", "def testThreeBasic(a, d, fnum=1):\n", @@ -97,17 +97,23 @@ " }\n", " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum], frepair=reflectRepair)\n", " start_time = time.time()\n", - " best = a.run(task)\n", + " best = a(task)\n", " return time.time() - start_time, best\n", "\n", - "def threadfun(a, d, fnum, q, runs_no):\n", - " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum))\n", + "def t_fun_cec(a, d, fnum, q, runs_no):\n", + " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum[1][1]))\n", + "\t \n", + "def t_fun_basic(a, d, fnum, q, runs_no):\n", + " for _ in range(runs_no): q.put(testThreeBasic(a, d, fnum)[1][1])\n", " \n", - "def runThread(a, d, fnum=1, thread_no=10, runs_no=35):\n", - " ts, qs, r, runs = [], [], [], int(runs_no / thread_no)\n", - " for _ in range(thread_no):\n", - " q = Queue(runs)\n", - " t = Process(target=threadfun, args=(a, d, fnum, q, runs))\n", + "def runThread(a, d, fnum=1, thread_fun=t_fun_cec, thread_no=24, runs_no=35, seed=1, **a_args):\n", + " autil = AlgorithmUtility()\n", + " ts, qs, r, runs, runs_sum = [], [], [], int(np.ceil(runs_no / thread_no)), 0\n", + " for i in range(thread_no):\n", + " no_r = runs if (runs_sum + runs) <= runs_no else (runs_no - runs_sum if runs_sum < runs_no else 0)\n", + " runs_sum += runs\n", + " q = Queue(no_r)\n", + " t = Process(target=thread_fun, args=(autil.get_algorithm(a)(seed=seed + i, **a_args), d, fnum, q, no_r))\n", " t.start()\n", " ts.append(t), qs.append(q)\n", " for t in ts: t.join()\n", @@ -122,7 +128,18 @@ "outputs": [], "source": [ "seed = 1\n", - "algs = [BatAlgorithm(seed=seed), HybridBatAlgorithm(seed=seed), SelfAdaptiveBatAlgorithm(seed=seed), HybridSelfAdaptiveBatAlgorithm(seed=seed, NP=100, A=0.5, F=0.5, CR=0.9, r=0.1)]" + "algs = {\n", + " 'BA': {},\n", + " 'HBA': {},\n", + " 'SABA': {},\n", + " 'HSABA': {\n", + " 'NP': 100,\n", + " 'A': 0.5,\n", + " 'F': 0.5,\n", + " 'CR': 0.9,\n", + "\t 'r': 0.01\n", + " }\n", + "}" ] }, { @@ -181,35 +198,34 @@ "d = 10" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run on basic function" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "autil = AlgorithmUtility()\n", "res, f = {}, 1\n", - "for a in algs:\n", + "for k, v in algs.items():\n", + " a = autil.get_algorithm(k)(seed=seed + 1, **v)\n", " r = testThreeBasic(a, d, f)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", + " res[k] = [r[0], r[1][1]]\n", "display('Func %d' % f)\n", "display(pd.DataFrame.from_dict(res))" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "for f in [0, 3, 4, 5]:\n", - " res = {}\n", - " for a in algs:\n", - " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", - " display('Func %d' % (f + 1))\n", - " display(pd.DataFrame.from_dict(res))" + "### Run on CEC function" ] }, { @@ -220,37 +236,50 @@ }, "outputs": [], "source": [ - "for f in range(10, 20):\n", + "autil = AlgorithmUtility()\n", + "for f in range(1):\n", " res = {}\n", - " for a in algs:\n", + " for k, v in algs.items():\n", + " a = autil.get_algorithm(k)(seed=seed + 1, **v)\n", " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", + " res[k] = [r[0], r[1][1]]\n", " display('Func %d' % (f + 1))\n", " display(pd.DataFrame.from_dict(res))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running on multiple threads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run on basic function" + ] + }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ - "for f in range(20, 31):\n", - " res = {}\n", - " for a in algs:\n", - " r = testThreeCec(a, d, f + 1)\n", - " res[a.Name[0]] = [r[0], r[1][1]]\n", - " display('Func %d' % (f + 1))\n", - " display(pd.DataFrame.from_dict(res))" + "res, d, f = {}, 10, 1\n", + "for k, v in algs.items():\n", + " tmp = runThread(k, d, f, thread_fun=t_fun_basic, **v)\n", + " res[k] = tmp if res.get(k, None) is None else res.extend(tmp)\n", + "display('Func %d' % f)\n", + "display(pd.DataFrame.from_dict(res))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Running on multiple threads" + "### Run on CEC function" ] }, { @@ -260,9 +289,9 @@ "outputs": [], "source": [ "res, d, f = {}, 10, 1\n", - "for a in algs: res[a.Name[0]] = runThread(a, d, f)\n", + "for k, v in algs.items(): res[k] = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", "display('Func %d' % f)\n", - "display(res)" + "display(pd.DataFrame.from_dict(res))" ] }, { diff --git a/CEC/cec2017/setup.py b/CEC/cec2017/setup.py index 507fc67..61175e8 100644 --- a/CEC/cec2017/setup.py +++ b/CEC/cec2017/setup.py @@ -1,17 +1,19 @@ import os from distutils.core import setup -from Cython.Build import cythonize from distutils.extension import Extension + +from Cython.Build import cythonize + import numpy as np -extra_compile_args=['-std=c++11', '-w', '-O3', '-march=native'] -if os.getenv('DEBUG', None) is not None: extra_compile_args=['-std=c++11', '-g3', '-O0'] +compile_args=['-std=c++11', '-w', '-O3', '-march=native'] +if os.getenv('DEBUG', None) is not None: compile_args=['-std=c++11', '-g3', '-O0'] extensions = [ Extension('cec2017', ['cec2017.pyx', 'cec17_test_func.cpp'], + extra_compile_args=compile_args, include_dirs=[np.get_include()], - extra_compile_args=extra_compile_args, language='c++' ), ] From a75371fca6b936062ff8d89fdfa9db70b3b48756 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 12:06:27 +0000 Subject: [PATCH 25/32] Added fixes --- CEC/AlgoStats.ipynb | 54 ++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index d66c286..653fd49 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -3,7 +3,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "import sys\n", @@ -34,24 +38,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dims, algosNames, alpha = [10, 30, 50], ['BA', 'ABA', 'SABA', 'HBA', 'HSABA'], 0.05" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# CEC 2017 algorithm speed test\n", - "Example of time execution speed of algorithm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "sys.path.append('cec2017')\n", @@ -101,7 +92,7 @@ " return time.time() - start_time, best\n", "\n", "def t_fun_cec(a, d, fnum, q, runs_no):\n", - " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum[1][1]))\n", + " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum)[1][1])\n", "\t \n", "def t_fun_basic(a, d, fnum, q, runs_no):\n", " for _ in range(runs_no): q.put(testThreeBasic(a, d, fnum)[1][1])\n", @@ -112,21 +103,28 @@ " for i in range(thread_no):\n", " no_r = runs if (runs_sum + runs) <= runs_no else (runs_no - runs_sum if runs_sum < runs_no else 0)\n", " runs_sum += runs\n", + " if no_r == 0: break\n", " q = Queue(no_r)\n", " t = Process(target=thread_fun, args=(autil.get_algorithm(a)(seed=seed + i, **a_args), d, fnum, q, no_r))\n", " t.start()\n", " ts.append(t), qs.append(q)\n", " for t in ts: t.join()\n", - " for q in qs: r.append(q.get())\n", + " for q in qs: \n", + " while not q.empty(): r.append(q.get())\n", " return r" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ + "dims, algosNames, alpha = [10, 30, 50], ['BA', 'ABA', 'SABA', 'HBA', 'HSABA'], 0.05\n", "seed = 1\n", "algs = {\n", " 'BA': {},\n", @@ -142,6 +140,14 @@ "}" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CEC 2017 algorithm speed test\n", + "Example of time execution speed of algorithm" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -289,7 +295,9 @@ "outputs": [], "source": [ "res, d, f = {}, 10, 1\n", - "for k, v in algs.items(): res[k] = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", + "for k, v in algs.items():\n", + " tmp = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", + " res[k] = tmp if res.get(k, None) is None else res.extend(tmp)\n", "display('Func %d' % f)\n", "display(pd.DataFrame.from_dict(res))" ] From 3b83e390b25b8ad5b9d435aa74ea42f768002718 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 13:15:41 +0000 Subject: [PATCH 26/32] Added new fixes --- CEC/AlgoStats.ipynb | 58 ++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 653fd49..5f89d8d 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -99,13 +99,16 @@ " \n", "def runThread(a, d, fnum=1, thread_fun=t_fun_cec, thread_no=24, runs_no=35, seed=1, **a_args):\n", " autil = AlgorithmUtility()\n", - " ts, qs, r, runs, runs_sum = [], [], [], int(np.ceil(runs_no / thread_no)), 0\n", + " ts, qs, r, runs, runs_sum = [], [], [], [0] * thread_no, 0\n", + " i = 0\n", + " while runs_sum < runs_no:\n", + " runs[i] += 1\n", + " runs_sum += 1\n", + " i = i + 1 if i + 1 < len(runs) else 0\n", " for i in range(thread_no):\n", - " no_r = runs if (runs_sum + runs) <= runs_no else (runs_no - runs_sum if runs_sum < runs_no else 0)\n", - " runs_sum += runs\n", - " if no_r == 0: break\n", - " q = Queue(no_r)\n", - " t = Process(target=thread_fun, args=(autil.get_algorithm(a)(seed=seed + i, **a_args), d, fnum, q, no_r))\n", + " if runs[i] == 0: continue\n", + " q = Queue(runs[i])\n", + " t = Process(target=thread_fun, args=(autil.get_algorithm(a)(seed=seed + i, **a_args), d, fnum, q, runs[i]))\n", " t.start()\n", " ts.append(t), qs.append(q)\n", " for t in ts: t.join()\n", @@ -274,9 +277,7 @@ "outputs": [], "source": [ "res, d, f = {}, 10, 1\n", - "for k, v in algs.items():\n", - " tmp = runThread(k, d, f, thread_fun=t_fun_basic, **v)\n", - " res[k] = tmp if res.get(k, None) is None else res.extend(tmp)\n", + "for k, v in algs.items(): res[k] = runThread(k, d, f, thread_fun=t_fun_basic, **v)\n", "display('Func %d' % f)\n", "display(pd.DataFrame.from_dict(res))" ] @@ -295,9 +296,7 @@ "outputs": [], "source": [ "res, d, f = {}, 10, 1\n", - "for k, v in algs.items():\n", - " tmp = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", - " res[k] = tmp if res.get(k, None) is None else res.extend(tmp)\n", + "for k, v in algs.items(): res[k] = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", "display('Func %d' % f)\n", "display(pd.DataFrame.from_dict(res))" ] @@ -331,31 +330,16 @@ }, "outputs": [], "source": [ - "dim, data = dims[0], []\n", - "data = np.asanyarray([[np.loadtxt('data/%s_%d_%d_v' % (a, fnum, dim)) for fnum in range(1, 31)] for a in algos])\n", - "# Get basic statistics\n", - "vals = []\n", - "for fnum in range(30):\n", - " tmp = []\n", - " print ('\\nfun_num: %d' % (fnum + 1))\n", - " for i, a in enumerate(algos):\n", - " d = data[i, fnum] = data[i, fnum] - (fnum + 1) * 100\n", - " print ('%10s:\\tmin: %.3E \\tmean: %.3E\\tstd: %.3E' % (a, np.min(d), np.mean(d), np.std(d)))\n", - " tmp.append((np.min(d), np.mean(d), np.std(d)))\n", - " vals.append(tmp)\n", - "vals = np.asanyarray(vals)\n", - "# Get best values for basic statistics\n", - "imin, imean, istd = [], [], []\n", - "for fnum in range(30):\n", - " imin.append(np.argmin([vals[fnum, i, 0] for i in range(len(algos))]))\n", - " imean.append(np.argmin([vals[fnum, i, 1] for i in range(len(algos))]))\n", - " istd.append(np.argmin([vals[fnum, i, 2] for i in range(len(algos))]))\n", - "# Generate table entrys for latex\n", - "out = ''\n", - "for i in range(len(algos)):\n", - " for fnum in range(30): out += ('%.3E' if i != imin[fnum] else '\\\\textbf{%.3E}') % vals[fnum, i, 0] + ' & ' + ('%.3E' if i != imean[fnum] else '\\\\textbf{%.3E}') % vals[fnum, i, 1] + ' & ' + ('%.3E' if i != istd[fnum] else '\\\\textbf{%.3E}') % vals[fnum, i, 2] + ' \\\\\\\\ \\n'\n", - " out += '\\n'\n", - "print ('\\n', out)" + "res, d = {}, 10\n", + "for k, v in algs.items():\n", + " print('START algor run')\n", + " for f in range(1, 31):\n", + " print('START thread run')\n", + " tmp = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", + " if res.get(k, None) is None: res[k] = [tmp]\n", + " else: res[k].append(tmp)\n", + " print('END thread run')\n", + " print('END algor run')" ] }, { From 0225e7ea4c564f40192e96fbc98ebd0000a37a65 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 13:24:14 +0000 Subject: [PATCH 27/32] One more fix --- CEC/AlgoStats.ipynb | 75 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 9 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 5f89d8d..c812369 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "jupyter": { "source_hidden": true @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "jupyter": { "source_hidden": true @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "jupyter": { "source_hidden": true @@ -328,17 +328,74 @@ "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "START algor run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n", + "END thread run\n", + "START thread run\n" + ] + } + ], "source": [ "res, d = {}, 10\n", "for k, v in algs.items():\n", - " print('START algor run')\n", + " print('START algor run for %s' % k)\n", " for f in range(1, 31):\n", - " print('START thread run')\n", + " print('START function %d run' % f)\n", " tmp = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", - " if res.get(k, None) is None: res[k] = [tmp]\n", - " else: res[k].append(tmp)\n", - " print('END thread run')\n", + " if v is None: res[k] = [tmp]\n", + " else: v.append(tmp)\n", + " print('END function run')\n", " print('END algor run')" ] }, From cc46095a536987d06b21c0bdc63a5fd4e876f173 Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sun, 24 Nov 2019 16:14:28 +0100 Subject: [PATCH 28/32] Added new version of build with ctypes --- CEC/cec2017/Makefile | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index 70952c1..52696df 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -1,11 +1,7 @@ -PYTHON=python -PVERSION=$(shell $(PYTHON) -c "import sys; print('%d.%d.%d' % (sys.version_info.major, sys.version_info.minor, sys.version_info.micro))") -PVERSIONS=$(shell $(PYTHON) -c "import sys; print('%d%d' % (sys.version_info.major, sys.version_info.minor))") +CC:=g++ -build: cec17_test_func.cpp cec17_test_func.h cec2017.pyx - $(PYTHON) setup.py build_ext --inplace +build: cec17_test_func.cpp cec17_test_func.h + $(CC) -O3 -fPIC -shared -o cec2017.so cec17_test_func.cpp cec17_test_func.h clean: - -rm cec2017.cpp - -rm -r build -rm *.so From f02bee40e138a70cbeb2c8b94ad3156f643049c7 Mon Sep 17 00:00:00 2001 From: "klemen@docker" Date: Sun, 24 Nov 2019 15:13:05 +0000 Subject: [PATCH 29/32] Added new fixes --- CEC/AlgoStats.ipynb | 69 ++++---------------------------------------- CEC/cec2017/Makefile | 4 +-- 2 files changed, 8 insertions(+), 65 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index c812369..0328c2a 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "jupyter": { "source_hidden": true @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "jupyter": { "source_hidden": true @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "jupyter": { "source_hidden": true @@ -328,64 +328,7 @@ "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "START algor run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n", - "END thread run\n", - "START thread run\n" - ] - } - ], + "outputs": [], "source": [ "res, d = {}, 10\n", "for k, v in algs.items():\n", @@ -393,8 +336,8 @@ " for f in range(1, 31):\n", " print('START function %d run' % f)\n", " tmp = runThread(k, d, f, thread_fun=t_fun_cec, **v)\n", - " if v is None: res[k] = [tmp]\n", - " else: v.append(tmp)\n", + " if res.get(k, None) is None: res[k] = [tmp]\n", + " else: res[k].append(tmp)\n", " print('END function run')\n", " print('END algor run')" ] diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index 52696df..5b34ee3 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -3,5 +3,5 @@ CC:=g++ build: cec17_test_func.cpp cec17_test_func.h $(CC) -O3 -fPIC -shared -o cec2017.so cec17_test_func.cpp cec17_test_func.h -clean: - -rm *.so +clean: cec2017.so + rm cec2017.so From e14e965cc9a572b6d73a8ac622564d8f5aee560d Mon Sep 17 00:00:00 2001 From: "Klemen@Haxor" Date: Sun, 24 Nov 2019 19:03:17 +0100 Subject: [PATCH 30/32] Added new fixes for better optimized c functions --- CEC/AlgoStats.ipynb | 137 +++- CEC/cec2017/Makefile | 8 +- ...{cec17_test_func.cpp => cec17_test_func.c} | 612 +++++++++--------- CEC/cec2017/cec17_test_func.h | 67 -- CEC/cec2017/cec17_test_func.o | Bin 0 -> 63168 bytes CEC/cec2017/cec2017.pyx | 15 - CEC/cec2017/setup.py | 23 - CEC/run_cec.py | 210 +++--- Pipfile | 1 - 9 files changed, 533 insertions(+), 540 deletions(-) rename CEC/cec2017/{cec17_test_func.cpp => cec17_test_func.c} (96%) delete mode 100644 CEC/cec2017/cec17_test_func.h create mode 100644 CEC/cec2017/cec17_test_func.o delete mode 100644 CEC/cec2017/cec2017.pyx delete mode 100644 CEC/cec2017/setup.py diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 0328c2a..5189f32 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "jupyter": { "source_hidden": true @@ -10,6 +10,7 @@ }, "outputs": [], "source": [ + "import ctypes\n", "import sys\n", "import time\n", "from multiprocessing import Process, Queue\n", @@ -37,23 +38,25 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ - "sys.path.append('cec2017')\n", - "from cec2017 import run_fun\n", - "from run_cec import MinMB\n", + "from run_cec import MinMB, fillprototype\n", + "\n", + "CECv = 2017\n", + "cec_dll = ctypes.cdll.LoadLibrary('cec%d/cec%d.so' % (CECv, CECv))\n", + "prototype = ctypes.CFUNCTYPE( \n", + " ctypes.c_double, \n", + " ctypes.POINTER(ctypes.c_double), \n", + " ctypes.c_int,\n", + " ctypes.c_int\n", + ")\n", + "run_fun = prototype(('runtest', cec_dll))\n", "\n", "from NiaPy.algorithms import AlgorithmUtility\n", "from NiaPy.task import StoppingTask, Utility\n", "from NiaPy.util import reflectRepair\n", - "from NiaPy.algorithms.basic import BatAlgorithm\n", - "from NiaPy.algorithms.modified import HybridBatAlgorithm, AdaptiveBatAlgorithm, SelfAdaptiveBatAlgorithm, HybridSelfAdaptiveBatAlgorithm\n", "\n", "def testOne(x=0.55):\n", " for i in range(10 ** 6): \n", @@ -68,10 +71,10 @@ "def testTwo(d):\n", " for i in range(2 * 10 ** 5):\n", " x = np.random.uniform(-100, 100, d)\n", - " run_fun(x, 18)\n", + " run_fun(x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), ctypes.c_int(d), ctypes.c_int(18))\n", "\n", "def testThreeCec(a, d, fnum=1):\n", - " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(run_fun, fnum=fnum))\n", + " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(cec_dll.runtest, fnum=fnum))\n", " start_time = time.time()\n", " best = a(task)\n", " return time.time() - start_time, best\n", @@ -119,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "jupyter": { "source_hidden": true @@ -160,9 +163,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/klemen/.local/share/virtualenvs/NiaPy-examples-Y_UOfSJl/lib/python3.7/site-packages/ipykernel_launcher.py:23: RuntimeWarning: divide by zero encountered in log\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.378772497177124\n" + ] + } + ], "source": [ "start_time = time.time()\n", "testOne()\n", @@ -179,9 +197,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.8333015441894531, 2.0679125785827637, 2.3981473445892334]\n" + ] + } + ], "source": [ "t1 = []\n", "for d in dims:\n", @@ -200,7 +226,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -216,9 +242,74 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'Func 1'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BAHBASABAHSABA
03.202657e+008.538753e+004.003105e+001.479011e+01
16.778154e+093.362153e-1451.269643e+091.505614e+07
\n", + "
" + ], + "text/plain": [ + " BA HBA SABA HSABA\n", + "0 3.202657e+00 8.538753e+00 4.003105e+00 1.479011e+01\n", + "1 6.778154e+09 3.362153e-145 1.269643e+09 1.505614e+07" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "autil = AlgorithmUtility()\n", "res, f = {}, 1\n", @@ -487,7 +578,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index 5b34ee3..a134fb4 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -1,7 +1,9 @@ -CC:=g++ +CC:=gcc +CC_FLAGS:=-std=c99 -O3 -march=native -build: cec17_test_func.cpp cec17_test_func.h - $(CC) -O3 -fPIC -shared -o cec2017.so cec17_test_func.cpp cec17_test_func.h +build: cec17_test_func.c + ${CC} -Wall -fPIC ${CC_FLAGS} -c cec17_test_func.c + ${CC} -shared -W -o cec2017.so cec17_test_func.o -lm clean: cec2017.so rm cec2017.so diff --git a/CEC/cec2017/cec17_test_func.cpp b/CEC/cec2017/cec17_test_func.c similarity index 96% rename from CEC/cec2017/cec17_test_func.cpp rename to CEC/cec2017/cec17_test_func.c index 94e1c43..414d6f9 100644 --- a/CEC/cec2017/cec17_test_func.cpp +++ b/CEC/cec2017/cec17_test_func.c @@ -1,253 +1,140 @@ #include #include #include -#include "cec17_test_func.h" + +#define INF 1.0e99 +#define EPS 1.0e-14 +#define E 2.7182818284590452353602874713526625 +#define PI 3.1415926535897932384626433832795029 double *OShift,*M,*y,*z,*x_bound; int ini_flag=0,n_flag,func_flag,*SS; -double runtest(double *x, int s, int fnum) { - double f; - return *cec17_test_func(x, &f, s, 1, fnum); +void shiftfunc (double *x, double *xshift, int nx,double *Os) { + int i; + for (i=0; i=17&&func_num<=22)||(func_num>=29&&func_num<=30))) printf("\nError: hf01,hf02,hf03,hf04,hf05,hf06,cf07&cf08 are NOT defined for D=2.\n"); - /* Load Matrix M*/ - sprintf(FileName, "cec2017/input_data/M_%d_D%d.txt", func_num,nx); - fpt = fopen(FileName,"r"); - if (fpt==NULL) printf("\n Error: Cannot open input file for reading \n"); - if (func_num<20) { - M=(double*)malloc(nx*nx*sizeof(double)); - if (M==NULL) printf("\nError: there is insufficient memory available!\n"); - for (i=0; i=11&&func_num<=20) { - sprintf(FileName, "cec2017/input_data/shuffle_data_%d_D%d.txt", func_num, nx); - fpt = fopen(FileName,"r"); - if (fpt==NULL) printf("\n Error: Cannot open input file for reading \n"); - SS=(int *)malloc(nx*sizeof(int)); - if (SS==NULL) printf("\nError: there is insufficient memory available!\n"); - for(i=0;i0) xasy[i]=pow(x[i],1.0+beta*i/(nx-1)*pow(x[i],0.5)); } - f[0] = sum; } -void zakharov_func (double *x, double *f, int nx, double *Os,double *Mr, int s_flag, int r_flag) /* zakharov */ { - int i; - sr_func (x, z, nx, Os, Mr,1.0, s_flag, r_flag); // shift and rotate - f[0] = 0.0; - double sum1 = 0.0; - double sum2 = 0.0; +void oszfunc (double *x, double *xosz, int nx) { + int i,sx; + double c1,c2,xx; for (i=0; i0) { + c1=10; + c2=7.9; + } else { + c1=5.5; + c2=3.1; + } + if (x[i]>0) sx=1; + else if (x[i]==0) sx=0; + else sx=-1; + xosz[i]=sx*exp(xx+0.049*(sin(c1*xx)+sin(c2*xx))); + } else xosz[i]=x[i]; + } +} + +void cf_cal(double *x, double *f, int nx, double *Os,double * delta,double * bias,double * fit, int cf_num) { + int i,j; + double *w; + double w_max=0,w_sum=0; + w=(double *)malloc(cf_num * sizeof(double)); + for (i=0; iw_max) w_max=w[i]; + } + for (i=0; i=17&&func_num<=22)||(func_num>=29&&func_num<=30))) printf("\nError: hf01,hf02,hf03,hf04,hf05,hf06,cf07&cf08 are NOT defined for D=2.\n"); + /* Load Matrix M*/ + sprintf(FileName, "cec2017/input_data/M_%d_D%d.txt", func_num,nx); + fpt = fopen(FileName,"r"); + if (fpt==NULL) printf("\n Error: Cannot open input file for reading \n"); + if (func_num<20) { + M=(double*)malloc(nx*nx*sizeof(double)); + if (M==NULL) printf("\nError: there is insufficient memory available!\n"); + for (i=0; i=11&&func_num<=20) { + sprintf(FileName, "cec2017/input_data/shuffle_data_%d_D%d.txt", func_num, nx); + fpt = fopen(FileName,"r"); + if (fpt==NULL) printf("\n Error: Cannot open input file for reading \n"); + SS=(int *)malloc(nx*sizeof(int)); + if (SS==NULL) printf("\nError: there is insufficient memory available!\n"); + for(i=0;i0) xasy[i]=pow(x[i],1.0+beta*i/(nx-1)*pow(x[i],0.5)); - } -} - -void oszfunc (double *x, double *xosz, int nx) { - int i,sx; - double c1,c2,xx; - for (i=0; i0) { - c1=10; - c2=7.9; - } else { - c1=5.5; - c2=3.1; - } - if (x[i]>0) sx=1; - else if (x[i]==0) sx=0; - else sx=-1; - xosz[i]=sx*exp(xx+0.049*(sin(c1*xx)+sin(c2*xx))); - } else xosz[i]=x[i]; - } -} - -void cf_cal(double *x, double *f, int nx, double *Os,double * delta,double * bias,double * fit, int cf_num) { - int i,j; - double *w; - double w_max=0,w_sum=0; - w=(double *)malloc(cf_num * sizeof(double)); - for (i=0; iw_max) w_max=w[i]; - } - for (i=0; i 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 Date: Sun, 24 Nov 2019 18:06:21 +0000 Subject: [PATCH 31/32] Removing files --- .gitignore | 8 +-- CEC/AlgoStats.ipynb | 116 +++++----------------------------- CEC/cec2017/cec17_test_func.o | Bin 63168 -> 0 bytes 3 files changed, 20 insertions(+), 104 deletions(-) delete mode 100644 CEC/cec2017/cec17_test_func.o diff --git a/.gitignore b/.gitignore index b266c63..9a1d8ae 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,8 @@ include/ *$py.class # C extensions -*.so +**/*.so +**/*.o # Distribution / packaging .Python @@ -52,8 +53,8 @@ coverage.xml .hypothesis/ # Translations -*.mo -*.pot +**/*.mo +**/*.pot # Django stuff: *.log @@ -110,5 +111,4 @@ venv.bak/ **/Pipfile.lock - # End of https://www.gitignore.io/api/python diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 5189f32..8a56579 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "jupyter": { "source_hidden": true @@ -38,8 +38,12 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "from run_cec import MinMB, fillprototype\n", @@ -122,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "jupyter": { "source_hidden": true @@ -163,24 +167,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/klemen/.local/share/virtualenvs/NiaPy-examples-Y_UOfSJl/lib/python3.7/site-packages/ipykernel_launcher.py:23: RuntimeWarning: divide by zero encountered in log\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.378772497177124\n" - ] - } - ], + "outputs": [], "source": [ "start_time = time.time()\n", "testOne()\n", @@ -197,17 +186,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1.8333015441894531, 2.0679125785827637, 2.3981473445892334]\n" - ] - } - ], + "outputs": [], "source": [ "t1 = []\n", "for d in dims:\n", @@ -226,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -242,74 +223,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Func 1'" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BAHBASABAHSABA
03.202657e+008.538753e+004.003105e+001.479011e+01
16.778154e+093.362153e-1451.269643e+091.505614e+07
\n", - "
" - ], - "text/plain": [ - " BA HBA SABA HSABA\n", - "0 3.202657e+00 8.538753e+00 4.003105e+00 1.479011e+01\n", - "1 6.778154e+09 3.362153e-145 1.269643e+09 1.505614e+07" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "autil = AlgorithmUtility()\n", "res, f = {}, 1\n", @@ -578,7 +494,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/CEC/cec2017/cec17_test_func.o b/CEC/cec2017/cec17_test_func.o deleted file mode 100644 index 82a2db97510c5a514a6dead26e2604b79633fd21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63168 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 Date: Mon, 25 Nov 2019 18:42:34 +0000 Subject: [PATCH 32/32] Added new fixes --- CEC/AlgoStats.ipynb | 21 +++++++++++---------- CEC/cec2017/Makefile | 3 ++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/CEC/AlgoStats.ipynb b/CEC/AlgoStats.ipynb index 8a56579..17b655f 100644 --- a/CEC/AlgoStats.ipynb +++ b/CEC/AlgoStats.ipynb @@ -62,6 +62,12 @@ "from NiaPy.task import StoppingTask, Utility\n", "from NiaPy.util import reflectRepair\n", "\n", + "def testRunTest(a, d, bench, **args):\n", + " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=bench, **args)\n", + " start_time = time.time()\n", + " best = a(task)\n", + " return time.time() - start_time, best\n", + "\n", "def testOne(x=0.55):\n", " for i in range(10 ** 6): \n", " x = x + x\n", @@ -77,11 +83,7 @@ " x = np.random.uniform(-100, 100, d)\n", " run_fun(x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), ctypes.c_int(d), ctypes.c_int(18))\n", "\n", - "def testThreeCec(a, d, fnum=1):\n", - " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=MinMB(cec_dll.runtest, fnum=fnum))\n", - " start_time = time.time()\n", - " best = a(task)\n", - " return time.time() - start_time, best\n", + "def testThreeCec(a, d, fnum=1): return testRunTest(a, d, MinMB(cec_dll.runtest, fnum=fnum))\n", "\n", "def testThreeBasic(a, d, fnum=1):\n", " mapper = {\n", @@ -93,10 +95,7 @@ " 6:'',\n", " 10:'swefel'\n", " }\n", - " task = StoppingTask(D=d, nFES=d * 1e4, benchmark=mapper[fnum], frepair=reflectRepair)\n", - " start_time = time.time()\n", - " best = a(task)\n", - " return time.time() - start_time, best\n", + " return testRunTest(a, d, mapper[fnum])\n", "\n", "def t_fun_cec(a, d, fnum, q, runs_no):\n", " for _ in range(runs_no): q.put(testThreeCec(a, d, fnum)[1][1])\n", @@ -145,7 +144,9 @@ " 'A': 0.5,\n", " 'F': 0.5,\n", " 'CR': 0.9,\n", - "\t 'r': 0.01\n", + "\t 'r': 0.01,\n", + " 'Qmax': 1,\n", + " 'Qmin': -1.2\n", " }\n", "}" ] diff --git a/CEC/cec2017/Makefile b/CEC/cec2017/Makefile index a134fb4..9678ff3 100644 --- a/CEC/cec2017/Makefile +++ b/CEC/cec2017/Makefile @@ -5,5 +5,6 @@ build: cec17_test_func.c ${CC} -Wall -fPIC ${CC_FLAGS} -c cec17_test_func.c ${CC} -shared -W -o cec2017.so cec17_test_func.o -lm -clean: cec2017.so +clean: cec17_test_func.o cec2017.so + rm cec17_test_func.o rm cec2017.so