{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "initial_id", "metadata": { "ExecuteTime": { "end_time": "2024-06-12T13:17:35.276820Z", "start_time": "2024-06-12T13:17:26.933026700Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-07-12 07:30:53.712421: W external/xla/xla/service/gpu/nvptx_compiler.cc:760] The NVIDIA driver's CUDA version is 12.2 which is older than the ptxas CUDA version (12.5.40). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "initializing\n", "initializing finished\n", "start compile\n", "compile finished, cost time: 17.313040s\n", "Generation: 1, Cost time: 123.35ms\n", " \tfitness: valid cnt: 10000, max: -0.2506, min: -0.4900, mean: -0.3263, std: 0.0472\n", "\n", "\tnode counts: max: 5, min: 4, mean: 4.09\n", " \tconn counts: max: 5, min: 1, mean: 2.88\n", " \tspecies: 7, [9990, 2, 3, 1, 1, 2, 1]\n", "\n", "Generation: 2, Cost time: 18.94ms\n", " \tfitness: valid cnt: 10000, max: -0.2500, min: -0.4827, mean: -0.2590, std: 0.0117\n", "\n", "\tnode counts: max: 6, min: 4, mean: 4.47\n", " \tconn counts: max: 7, min: 0, mean: 2.45\n", " \tspecies: 20, [6066, 659, 943, 720, 536, 350, 177, 2, 96, 1, 1, 70, 82, 173, 4, 4, 17, 1, 4, 94]\n", "\n", "Generation: 3, Cost time: 22.50ms\n", " \tfitness: valid cnt: 9724, max: -0.2500, min: -0.4810, mean: -0.2538, std: 0.0102\n", "\n", "\tnode counts: max: 7, min: 4, mean: 4.63\n", " \tconn counts: max: 7, min: 0, mean: 1.92\n", " \tspecies: 20, [1538, 2324, 210, 1892, 381, 318, 288, 306, 245, 978, 260, 182, 164, 152, 294, 187, 86, 133, 42, 20]\n", "\n", "Generation: 4, Cost time: 22.51ms\n", " \tfitness: valid cnt: 8595, max: -0.2500, min: -0.4293, mean: -0.2519, std: 0.0092\n", "\n", "\tnode counts: max: 8, min: 4, mean: 5.05\n", " \tconn counts: max: 8, min: 0, mean: 2.20\n", " \tspecies: 20, [773, 1387, 2729, 1066, 431, 156, 456, 344, 325, 345, 362, 277, 288, 175, 166, 204, 234, 151, 101, 30]\n", "\n", "Generation: 5, Cost time: 22.31ms\n", " \tfitness: valid cnt: 8460, max: -0.2500, min: -0.4423, mean: -0.2515, std: 0.0082\n", "\n", "\tnode counts: max: 9, min: 4, mean: 5.37\n", " \tconn counts: max: 9, min: 0, mean: 2.39\n", " \tspecies: 20, [886, 2882, 973, 611, 459, 471, 483, 386, 441, 379, 297, 340, 235, 231, 267, 187, 167, 180, 91, 34]\n", "\n", "Generation: 6, Cost time: 22.27ms\n", " \tfitness: valid cnt: 8075, max: -0.2500, min: -0.4633, mean: -0.2517, std: 0.0092\n", "\n", "\tnode counts: max: 9, min: 4, mean: 5.75\n", " \tconn counts: max: 8, min: 0, mean: 2.83\n", " \tspecies: 20, [610, 632, 607, 500, 563, 474, 579, 671, 2775, 695, 334, 175, 307, 268, 161, 200, 185, 147, 81, 36]\n", "\n", "Generation: 7, Cost time: 22.23ms\n", " \tfitness: valid cnt: 8187, max: -0.2500, min: -0.4381, mean: -0.2517, std: 0.0099\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.11\n", " \tconn counts: max: 10, min: 0, mean: 3.26\n", " \tspecies: 20, [595, 539, 634, 1528, 664, 530, 494, 520, 473, 550, 525, 482, 1270, 304, 193, 202, 213, 107, 140, 37]\n", "\n", "Generation: 8, Cost time: 22.26ms\n", " \tfitness: valid cnt: 8301, max: -0.2500, min: -0.4366, mean: -0.2515, std: 0.0085\n", "\n", "\tnode counts: max: 11, min: 4, mean: 6.47\n", " \tconn counts: max: 10, min: 0, mean: 3.60\n", " \tspecies: 20, [446, 551, 504, 535, 1157, 567, 581, 562, 480, 460, 420, 476, 536, 1323, 367, 385, 374, 119, 117, 40]\n", "\n", "Generation: 9, Cost time: 22.17ms\n", " \tfitness: valid cnt: 8264, max: -0.2500, min: -0.4526, mean: -0.2518, std: 0.0100\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.13\n", " \tconn counts: max: 10, min: 0, mean: 3.40\n", " \tspecies: 20, [545, 624, 598, 876, 1432, 324, 536, 437, 463, 362, 503, 491, 465, 831, 410, 357, 370, 227, 106, 43]\n", "\n", "Generation: 10, Cost time: 22.00ms\n", " \tfitness: valid cnt: 8367, max: -0.2500, min: -0.4447, mean: -0.2515, std: 0.0091\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.47\n", " \tconn counts: max: 9, min: 0, mean: 3.72\n", " \tspecies: 20, [539, 436, 609, 564, 582, 806, 558, 536, 526, 291, 413, 358, 469, 338, 1377, 672, 374, 364, 144, 44]\n", "\n", "Generation: 11, Cost time: 22.21ms\n", " \tfitness: valid cnt: 8345, max: -0.2500, min: -0.4245, mean: -0.2518, std: 0.0098\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.39\n", " \tconn counts: max: 10, min: 0, mean: 3.52\n", " \tspecies: 20, [556, 602, 587, 708, 1646, 476, 544, 411, 435, 298, 483, 464, 461, 540, 430, 384, 390, 223, 317, 45]\n", "\n", "Generation: 12, Cost time: 21.84ms\n", " \tfitness: valid cnt: 8177, max: -0.2500, min: -0.4419, mean: -0.2515, std: 0.0096\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.87\n", " \tconn counts: max: 10, min: 0, mean: 4.12\n", " \tspecies: 20, [646, 434, 688, 568, 585, 914, 553, 528, 513, 410, 399, 341, 546, 412, 954, 430, 353, 356, 324, 46]\n", "\n", "Generation: 13, Cost time: 21.81ms\n", " \tfitness: valid cnt: 8186, max: -0.2500, min: -0.4101, mean: -0.2516, std: 0.0088\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.60\n", " \tconn counts: max: 10, min: 0, mean: 3.83\n", " \tspecies: 20, [508, 614, 623, 574, 652, 957, 429, 544, 377, 408, 438, 433, 440, 440, 820, 405, 360, 404, 228, 346]\n", "\n", "Generation: 14, Cost time: 21.77ms\n", " \tfitness: valid cnt: 8259, max: -0.2500, min: -0.4404, mean: -0.2516, std: 0.0089\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.77\n", " \tconn counts: max: 10, min: 0, mean: 4.14\n", " \tspecies: 20, [658, 514, 620, 566, 567, 960, 541, 511, 484, 476, 398, 353, 444, 337, 767, 455, 378, 341, 354, 276]\n", "\n", "Generation: 15, Cost time: 21.81ms\n", " \tfitness: valid cnt: 8383, max: -0.2500, min: -0.4225, mean: -0.2515, std: 0.0086\n", "\n", "\tnode counts: max: 10, min: 4, mean: 6.63\n", " \tconn counts: max: 10, min: 0, mean: 3.94\n", " \tspecies: 20, [624, 609, 917, 592, 630, 691, 389, 491, 389, 409, 464, 435, 426, 422, 752, 399, 367, 377, 266, 351]\n", "\n", "Generation: 16, Cost time: 21.89ms\n", " \tfitness: valid cnt: 8335, max: -0.2500, min: -0.4771, mean: -0.2516, std: 0.0091\n", "\n", "\tnode counts: max: 11, min: 4, mean: 6.90\n", " \tconn counts: max: 10, min: 0, mean: 4.31\n", " \tspecies: 20, [660, 525, 604, 566, 562, 782, 543, 514, 484, 528, 401, 336, 434, 403, 701, 462, 386, 429, 345, 335]\n", "\n", "Generation: 17, Cost time: 22.04ms\n", " \tfitness: valid cnt: 8399, max: -0.2500, min: -0.4572, mean: -0.2517, std: 0.0103\n", "\n", "\tnode counts: max: 11, min: 4, mean: 6.62\n", " \tconn counts: max: 11, min: 0, mean: 3.94\n", " \tspecies: 20, [653, 618, 574, 588, 607, 939, 475, 483, 372, 440, 581, 441, 441, 438, 605, 386, 367, 365, 276, 351]\n", "\n", "Generation: 18, Cost time: 21.99ms\n", " \tfitness: valid cnt: 8312, max: -0.2500, min: -0.4766, mean: -0.2514, std: 0.0084\n", "\n", "\tnode counts: max: 11, min: 4, mean: 7.13\n", " \tconn counts: max: 12, min: 0, mean: 4.49\n", " \tspecies: 20, [659, 510, 600, 575, 549, 972, 547, 524, 485, 529, 450, 332, 439, 370, 823, 337, 385, 223, 345, 346]\n", "\n", "Generation: 19, Cost time: 22.07ms\n", " \tfitness: valid cnt: 8382, max: -0.2500, min: -0.4603, mean: -0.2514, std: 0.0083\n", "\n", "\tnode counts: max: 11, min: 4, mean: 7.04\n", " \tconn counts: max: 12, min: 0, mean: 4.47\n", " \tspecies: 20, [624, 618, 1062, 591, 461, 659, 457, 468, 376, 483, 472, 433, 445, 432, 704, 358, 376, 363, 265, 353]\n", "\n", "Generation: 20, Cost time: 20.62ms\n", " \tfitness: valid cnt: 8527, max: -0.2500, min: -0.4319, mean: -0.2515, std: 0.0092\n", "\n", "\tnode counts: max: 11, min: 4, mean: 7.37\n", " \tconn counts: max: 12, min: 0, mean: 4.88\n", " \tspecies: 18, [1202, 673, 538, 622, 580, 550, 905, 535, 482, 479, 470, 312, 392, 429, 408, 724, 365, 334]\n", "\n", "Generation: 21, Cost time: 19.16ms\n", " \tfitness: valid cnt: 8265, max: -0.2500, min: -0.4789, mean: -0.2515, std: 0.0094\n", "\n", "\tnode counts: max: 12, min: 4, mean: 7.56\n", " \tconn counts: max: 11, min: 0, mean: 5.25\n", " \tspecies: 16, [1594, 683, 691, 814, 645, 507, 598, 554, 529, 514, 879, 454, 432, 414, 319, 373]\n", "\n", "Generation: 22, Cost time: 15.84ms\n", " \tfitness: valid cnt: 8483, max: -0.2500, min: -0.4216, mean: -0.2515, std: 0.0092\n", "\n", "\tnode counts: max: 12, min: 4, mean: 7.92\n", " \tconn counts: max: 11, min: 0, mean: 6.05\n", " \tspecies: 11, [2968, 1099, 868, 724, 737, 663, 600, 342, 550, 1044, 405]\n", "\n", "Generation: 23, Cost time: 14.36ms\n", " \tfitness: valid cnt: 8911, max: -0.2500, min: -0.4474, mean: -0.2517, std: 0.0095\n", "\n", "\tnode counts: max: 12, min: 4, mean: 7.76\n", " \tconn counts: max: 11, min: 0, mean: 5.83\n", " \tspecies: 9, [2342, 2318, 952, 1017, 841, 757, 696, 532, 545]\n", "\n", "Generation: 24, Cost time: 12.36ms\n", " \tfitness: valid cnt: 8874, max: -0.2500, min: -0.4511, mean: -0.2514, std: 0.0084\n", "\n", "\tnode counts: max: 12, min: 6, mean: 8.28\n", " \tconn counts: max: 11, min: 0, mean: 6.82\n", " \tspecies: 8, [4870, 2518, 1272, 539, 211, 153, 70, 367]\n", "\n", "Generation: 25, Cost time: 14.10ms\n", " \tfitness: valid cnt: 9126, max: -0.2500, min: -0.4431, mean: -0.2514, std: 0.0087\n", "\n", "\tnode counts: max: 12, min: 7, mean: 8.37\n", " \tconn counts: max: 12, min: 1, mean: 6.93\n", " \tspecies: 9, [3480, 1024, 2116, 869, 441, 610, 362, 774, 324]\n", "\n", "Generation: 26, Cost time: 14.87ms\n", " \tfitness: valid cnt: 9079, max: -0.2500, min: -0.4497, mean: -0.2514, std: 0.0087\n", "\n", "\tnode counts: max: 12, min: 6, mean: 8.39\n", " \tconn counts: max: 11, min: 0, mean: 7.09\n", " \tspecies: 11, [3192, 2011, 1308, 1178, 373, 221, 729, 177, 56, 754, 1]\n", "\n", "Generation: 27, Cost time: 15.50ms\n", " \tfitness: valid cnt: 9060, max: -0.2500, min: -0.4568, mean: -0.2516, std: 0.0104\n", "\n", "\tnode counts: max: 11, min: 6, mean: 8.46\n", " \tconn counts: max: 12, min: 1, mean: 7.11\n", " \tspecies: 11, [2914, 1619, 1291, 1244, 646, 670, 136, 626, 415, 287, 152]\n", "\n", "Generation: 28, Cost time: 16.91ms\n", " \tfitness: valid cnt: 9083, max: -0.2500, min: -0.4108, mean: -0.2513, std: 0.0084\n", "\n", "\tnode counts: max: 11, min: 6, mean: 8.80\n", " \tconn counts: max: 12, min: 1, mean: 7.69\n", " \tspecies: 13, [2244, 734, 1349, 1192, 978, 1070, 608, 383, 512, 234, 385, 278, 33]\n", "\n", "Generation: 29, Cost time: 16.53ms\n", " \tfitness: valid cnt: 9134, max: -0.2498, min: -0.4490, mean: -0.2513, std: 0.0086\n", "\n", "\tnode counts: max: 11, min: 6, mean: 8.93\n", " \tconn counts: max: 12, min: 0, mean: 7.78\n", " \tspecies: 12, [2061, 999, 1264, 1136, 1088, 964, 579, 428, 320, 423, 539, 199]\n", "\n", "Generation: 30, Cost time: 16.97ms\n", " \tfitness: valid cnt: 9069, max: -0.2495, min: -0.4004, mean: -0.2512, std: 0.0074\n", "\n", "\tnode counts: max: 12, min: 7, mean: 8.86\n", " \tconn counts: max: 14, min: 1, mean: 7.96\n", " \tspecies: 13, [1614, 1123, 1034, 1940, 294, 965, 845, 715, 440, 319, 239, 391, 81]\n", "\n", "Generation: 31, Cost time: 18.16ms\n", " \tfitness: valid cnt: 9108, max: -0.2453, min: -0.4469, mean: -0.2515, std: 0.0097\n", "\n", "\tnode counts: max: 12, min: 7, mean: 9.07\n", " \tconn counts: max: 13, min: 2, mean: 8.36\n", " \tspecies: 15, [929, 2090, 863, 112, 1644, 906, 845, 737, 469, 48, 196, 331, 542, 157, 131]\n", "\n", "Generation: 32, Cost time: 19.25ms\n", " \tfitness: valid cnt: 9196, max: -0.2423, min: -0.4532, mean: -0.2513, std: 0.0088\n", "\n", "\tnode counts: max: 12, min: 7, mean: 9.07\n", " \tconn counts: max: 13, min: 1, mean: 8.24\n", " \tspecies: 16, [1055, 1720, 921, 1235, 509, 821, 920, 699, 349, 328, 439, 334, 227, 145, 280, 18]\n", "\n", "Generation: 33, Cost time: 19.91ms\n", " \tfitness: valid cnt: 9249, max: -0.2316, min: -0.4676, mean: -0.2506, std: 0.0096\n", "\n", "\tnode counts: max: 12, min: 6, mean: 8.98\n", " \tconn counts: max: 14, min: 1, mean: 8.24\n", " \tspecies: 17, [1035, 1532, 941, 1552, 570, 533, 689, 680, 433, 358, 210, 350, 337, 274, 243, 133, 130]\n", "\n", "Generation: 34, Cost time: 20.15ms\n", " \tfitness: valid cnt: 9131, max: -0.2246, min: -0.4739, mean: -0.2491, std: 0.0111\n", "\n", "\tnode counts: max: 12, min: 6, mean: 9.10\n", " \tconn counts: max: 14, min: 1, mean: 8.49\n", " \tspecies: 17, [2163, 254, 912, 834, 1176, 590, 645, 451, 634, 337, 336, 333, 302, 301, 213, 271, 248]\n", "\n", "Generation: 35, Cost time: 20.59ms\n", " \tfitness: valid cnt: 9237, max: -0.2138, min: -0.4635, mean: -0.2474, std: 0.0128\n", "\n", "\tnode counts: max: 13, min: 6, mean: 9.06\n", " \tconn counts: max: 15, min: 1, mean: 8.40\n", " \tspecies: 18, [1630, 418, 921, 1099, 853, 724, 574, 555, 611, 384, 372, 118, 313, 273, 264, 233, 386, 272]\n", "\n", "Generation: 36, Cost time: 21.12ms\n", " \tfitness: valid cnt: 9259, max: -0.2048, min: -0.4507, mean: -0.2466, std: 0.0157\n", "\n", "\tnode counts: max: 13, min: 6, mean: 9.10\n", " \tconn counts: max: 15, min: 1, mean: 8.59\n", " \tspecies: 18, [1439, 596, 639, 884, 724, 849, 871, 655, 555, 568, 379, 333, 307, 333, 273, 184, 192, 219]\n", "\n", "Generation: 37, Cost time: 21.58ms\n", " \tfitness: valid cnt: 9277, max: -0.1976, min: -0.4515, mean: -0.2439, std: 0.0195\n", "\n", "\tnode counts: max: 14, min: 6, mean: 9.11\n", " \tconn counts: max: 16, min: 1, mean: 8.63\n", " \tspecies: 19, [1365, 756, 720, 875, 729, 1166, 686, 401, 563, 547, 342, 312, 280, 279, 267, 241, 230, 207, 34]\n", "\n", "Generation: 38, Cost time: 22.00ms\n", " \tfitness: valid cnt: 9370, max: -0.1942, min: -0.4384, mean: -0.2419, std: 0.0229\n", "\n", "\tnode counts: max: 14, min: 6, mean: 9.14\n", " \tconn counts: max: 15, min: 1, mean: 8.76\n", " \tspecies: 19, [1344, 821, 694, 848, 745, 575, 926, 548, 562, 404, 510, 292, 308, 278, 246, 245, 231, 226, 197]\n", "\n", "Generation: 39, Cost time: 22.47ms\n", " \tfitness: valid cnt: 9337, max: -0.1914, min: -0.4715, mean: -0.2409, std: 0.0262\n", "\n", "\tnode counts: max: 14, min: 6, mean: 9.12\n", " \tconn counts: max: 15, min: 1, mean: 8.79\n", " \tspecies: 19, [1332, 839, 697, 834, 826, 699, 593, 766, 538, 429, 491, 309, 259, 262, 254, 264, 217, 219, 172]\n", "\n", "Generation: 40, Cost time: 22.43ms\n", " \tfitness: valid cnt: 9466, max: -0.1860, min: -0.4551, mean: -0.2395, std: 0.0297\n", "\n", "\tnode counts: max: 14, min: 7, mean: 9.37\n", " \tconn counts: max: 16, min: 1, mean: 9.30\n", " \tspecies: 20, [786, 1255, 829, 831, 279, 636, 715, 970, 649, 471, 482, 352, 302, 266, 193, 231, 171, 226, 178, 178]\n", "\n", "Generation: 41, Cost time: 21.70ms\n", " \tfitness: valid cnt: 9528, max: -0.1815, min: -0.4816, mean: -0.2370, std: 0.0323\n", "\n", "\tnode counts: max: 14, min: 7, mean: 9.22\n", " \tconn counts: max: 14, min: 1, mean: 9.74\n", " \tspecies: 19, [56, 2184, 900, 848, 1637, 283, 219, 225, 838, 530, 465, 445, 264, 309, 139, 220, 218, 122, 98]\n", "\n", "Generation: 42, Cost time: 21.40ms\n", " \tfitness: valid cnt: 9711, max: -0.1762, min: -0.4812, mean: -0.2340, std: 0.0366\n", "\n", "\tnode counts: max: 14, min: 6, mean: 9.20\n", " \tconn counts: max: 14, min: 1, mean: 9.75\n", " \tspecies: 18, [1682, 938, 887, 64, 1175, 1057, 872, 616, 524, 242, 456, 256, 210, 281, 226, 239, 190, 85]\n", "\n", "Generation: 43, Cost time: 19.78ms\n", " \tfitness: valid cnt: 9698, max: -0.1724, min: -0.4722, mean: -0.2320, std: 0.0397\n", "\n", "\tnode counts: max: 13, min: 6, mean: 9.07\n", " \tconn counts: max: 15, min: 0, mean: 9.73\n", " \tspecies: 16, [1676, 1007, 949, 1325, 666, 721, 676, 591, 534, 332, 315, 296, 302, 200, 201, 209]\n", "\n", "Generation: 44, Cost time: 19.64ms\n", " \tfitness: valid cnt: 9657, max: -0.1653, min: -0.4588, mean: -0.2282, std: 0.0434\n", "\n", "\tnode counts: max: 13, min: 6, mean: 9.01\n", " \tconn counts: max: 15, min: 1, mean: 9.82\n", " \tspecies: 16, [1751, 1018, 1559, 643, 908, 234, 739, 855, 365, 550, 171, 284, 230, 278, 221, 194]\n", "\n", "Generation: 45, Cost time: 18.95ms\n", " \tfitness: valid cnt: 9729, max: -0.1528, min: -0.4854, mean: -0.2274, std: 0.0475\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.92\n", " \tconn counts: max: 15, min: 2, mean: 10.26\n", " \tspecies: 15, [1657, 1067, 79, 2351, 870, 546, 821, 469, 89, 647, 482, 277, 289, 173, 183]\n", "\n", "Generation: 46, Cost time: 19.39ms\n", " \tfitness: valid cnt: 9795, max: -0.1437, min: -0.4953, mean: -0.2212, std: 0.0525\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.92\n", " \tconn counts: max: 15, min: 1, mean: 10.48\n", " \tspecies: 16, [1153, 1706, 536, 1468, 657, 847, 738, 756, 474, 490, 61, 258, 194, 244, 180, 238]\n", "\n", "Generation: 47, Cost time: 19.71ms\n", " \tfitness: valid cnt: 9835, max: -0.1241, min: -0.4912, mean: -0.2157, std: 0.0579\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.95\n", " \tconn counts: max: 15, min: 2, mean: 10.76\n", " \tspecies: 16, [1164, 616, 1589, 960, 977, 817, 345, 731, 899, 502, 518, 78, 237, 241, 161, 165]\n", "\n", "Generation: 48, Cost time: 18.38ms\n", " \tfitness: valid cnt: 9851, max: -0.1187, min: -0.4873, mean: -0.2132, std: 0.0613\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.90\n", " \tconn counts: max: 16, min: 1, mean: 11.30\n", " \tspecies: 14, [1471, 1191, 1126, 442, 1487, 834, 610, 709, 667, 489, 554, 115, 179, 126]\n", "\n", "Generation: 49, Cost time: 18.30ms\n", " \tfitness: valid cnt: 9958, max: -0.1031, min: -0.4948, mean: -0.2064, std: 0.0689\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.90\n", " \tconn counts: max: 16, min: 1, mean: 11.22\n", " \tspecies: 14, [1135, 2423, 204, 1710, 201, 839, 374, 703, 914, 482, 486, 234, 156, 139]\n", "\n", "Generation: 50, Cost time: 17.64ms\n", " \tfitness: valid cnt: 9963, max: -0.0922, min: -0.4904, mean: -0.2013, std: 0.0744\n", "\n", "\tnode counts: max: 13, min: 5, mean: 8.77\n", " \tconn counts: max: 16, min: 3, mean: 11.22\n", " \tspecies: 13, [1383, 1909, 650, 1753, 203, 859, 878, 599, 507, 459, 424, 252, 124]\n", "\n", "Generation: 51, Cost time: 17.62ms\n", " \tfitness: valid cnt: 9997, max: -0.0856, min: -0.5572, mean: -0.1968, std: 0.0800\n", "\n", "\tnode counts: max: 13, min: 5, mean: 8.58\n", " \tconn counts: max: 17, min: 3, mean: 11.35\n", " \tspecies: 13, [1428, 1631, 895, 1291, 673, 869, 565, 695, 720, 446, 394, 277, 116]\n", "\n", "Generation: 52, Cost time: 17.92ms\n", " \tfitness: valid cnt: 9999, max: -0.0785, min: -0.5496, mean: -0.1913, std: 0.0866\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.47\n", " \tconn counts: max: 16, min: 3, mean: 11.21\n", " \tspecies: 14, [1695, 2207, 59, 1139, 817, 873, 228, 1115, 635, 442, 361, 69, 112, 248]\n", "\n", "Generation: 53, Cost time: 18.24ms\n", " \tfitness: valid cnt: 9998, max: -0.0679, min: -0.4930, mean: -0.1888, std: 0.0911\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.58\n", " \tconn counts: max: 17, min: 3, mean: 11.42\n", " \tspecies: 14, [1518, 1742, 1084, 944, 912, 442, 596, 916, 373, 555, 370, 266, 151, 131]\n", "\n", "Generation: 54, Cost time: 18.34ms\n", " \tfitness: valid cnt: 9993, max: -0.0588, min: -0.4946, mean: -0.1871, std: 0.0932\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.66\n", " \tconn counts: max: 17, min: 2, mean: 11.65\n", " \tspecies: 14, [1430, 1208, 1467, 982, 930, 628, 678, 983, 279, 516, 375, 275, 170, 79]\n", "\n", "Generation: 55, Cost time: 18.34ms\n", " \tfitness: valid cnt: 9991, max: -0.0526, min: -0.6070, mean: -0.1872, std: 0.0985\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.71\n", " \tconn counts: max: 17, min: 2, mean: 11.80\n", " \tspecies: 14, [1384, 1174, 1323, 998, 935, 733, 718, 1031, 218, 425, 448, 280, 180, 153]\n", "\n", "Generation: 56, Cost time: 18.84ms\n", " \tfitness: valid cnt: 9985, max: -0.0412, min: -0.5279, mean: -0.1808, std: 0.1018\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.65\n", " \tconn counts: max: 17, min: 2, mean: 11.67\n", " \tspecies: 15, [1366, 1155, 1252, 1018, 932, 786, 739, 748, 494, 450, 414, 282, 185, 61, 118]\n", "\n", "Generation: 57, Cost time: 19.51ms\n", " \tfitness: valid cnt: 9985, max: -0.0355, min: -0.4980, mean: -0.1781, std: 0.1081\n", "\n", "\tnode counts: max: 14, min: 5, mean: 8.74\n", " \tconn counts: max: 17, min: 0, mean: 11.81\n", " \tspecies: 16, [1306, 1074, 1065, 1853, 924, 90, 737, 740, 505, 475, 349, 373, 217, 140, 85, 67]\n", "\n", "Generation: 58, Cost time: 18.93ms\n", " \tfitness: valid cnt: 9966, max: -0.0276, min: -0.5062, mean: -0.1785, std: 0.1115\n", "\n", "\tnode counts: max: 13, min: 5, mean: 8.69\n", " \tconn counts: max: 17, min: 1, mean: 11.55\n", " \tspecies: 15, [1353, 1168, 1248, 251, 938, 797, 662, 673, 460, 475, 376, 2, 163, 74, 1360]\n", "\n", "Generation: 59, Cost time: 19.10ms\n", " \tfitness: valid cnt: 9967, max: -0.0208, min: -0.5241, mean: -0.1711, std: 0.1161\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.65\n", " \tconn counts: max: 17, min: 2, mean: 11.46\n", " \tspecies: 15, [1145, 1229, 1296, 1741, 2, 885, 773, 563, 700, 508, 445, 354, 206, 113, 40]\n", "\n", "Generation: 60, Cost time: 19.13ms\n", " \tfitness: valid cnt: 9946, max: -0.0170, min: -0.7306, mean: -0.1692, std: 0.1225\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.85\n", " \tconn counts: max: 16, min: 3, mean: 11.66\n", " \tspecies: 15, [1558, 887, 1150, 1376, 900, 803, 656, 742, 486, 472, 385, 269, 171, 141, 4]\n", "\n", "Generation: 61, Cost time: 19.49ms\n", " \tfitness: valid cnt: 9949, max: -0.0124, min: -0.6734, mean: -0.1686, std: 0.1252\n", "\n", "\tnode counts: max: 13, min: 6, mean: 8.93\n", " \tconn counts: max: 17, min: 2, mean: 11.66\n", " \tspecies: 16, [1484, 957, 1110, 1194, 908, 818, 703, 734, 504, 486, 400, 301, 200, 154, 42, 5]\n", "\n", "Generation: 62, Cost time: 19.88ms\n", " \tfitness: valid cnt: 9911, max: -0.0105, min: -0.5839, mean: -0.1697, std: 0.1271\n", "\n", "\tnode counts: max: 13, min: 5, mean: 9.04\n", " \tconn counts: max: 17, min: 0, mean: 11.71\n", " \tspecies: 16, [1035, 1337, 1064, 1079, 895, 813, 719, 631, 612, 500, 420, 334, 60, 178, 257, 66]\n", "\n", "Generation: 63, Cost time: 19.78ms\n", " \tfitness: valid cnt: 9900, max: -0.0088, min: -0.6290, mean: -0.1697, std: 0.1280\n", "\n", "\tnode counts: max: 14, min: 6, mean: 8.98\n", " \tconn counts: max: 17, min: 3, mean: 11.62\n", " \tspecies: 16, [1228, 1104, 1049, 1014, 888, 810, 727, 601, 645, 507, 430, 315, 314, 137, 160, 71]\n", "\n", "Generation: 64, Cost time: 19.81ms\n", " \tfitness: valid cnt: 9905, max: -0.0065, min: -0.6859, mean: -0.1711, std: 0.1291\n", "\n", "\tnode counts: max: 14, min: 6, mean: 8.87\n", " \tconn counts: max: 18, min: 3, mean: 11.50\n", " \tspecies: 16, [1175, 1137, 1037, 986, 885, 809, 731, 821, 426, 510, 435, 248, 304, 271, 154, 71]\n", "\n", "Generation: 65, Cost time: 19.72ms\n", " \tfitness: valid cnt: 9910, max: -0.0059, min: -0.6075, mean: -0.1711, std: 0.1305\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.86\n", " \tconn counts: max: 19, min: 3, mean: 11.78\n", " \tspecies: 16, [1059, 1243, 1034, 969, 883, 808, 733, 548, 549, 646, 454, 320, 299, 233, 150, 72]\n", "\n", "Generation: 66, Cost time: 19.88ms\n", " \tfitness: valid cnt: 9904, max: -0.0049, min: -0.6068, mean: -0.1689, std: 0.1324\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.85\n", " \tconn counts: max: 19, min: 3, mean: 11.73\n", " \tspecies: 16, [1177, 1121, 1030, 963, 882, 808, 734, 604, 568, 562, 465, 295, 296, 275, 148, 72]\n", "\n", "Generation: 67, Cost time: 19.88ms\n", " \tfitness: valid cnt: 9903, max: -0.0044, min: -0.6589, mean: -0.1677, std: 0.1341\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.99\n", " \tconn counts: max: 20, min: 3, mean: 11.96\n", " \tspecies: 16, [1140, 1155, 1036, 952, 882, 808, 734, 632, 578, 601, 390, 257, 284, 258, 221, 72]\n", "\n", "Generation: 68, Cost time: 19.22ms\n", " \tfitness: valid cnt: 9887, max: -0.0036, min: -0.7353, mean: -0.1680, std: 0.1366\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.78\n", " \tconn counts: max: 21, min: 3, mean: 12.24\n", " \tspecies: 15, [1292, 1197, 1059, 977, 898, 820, 742, 649, 580, 507, 446, 277, 254, 225, 77]\n", "\n", "Generation: 69, Cost time: 19.64ms\n", " \tfitness: valid cnt: 9966, max: -0.0032, min: -0.6422, mean: -0.1613, std: 0.1399\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.86\n", " \tconn counts: max: 20, min: 3, mean: 12.56\n", " \tspecies: 16, [1241, 1217, 1071, 988, 907, 826, 746, 657, 308, 709, 498, 166, 252, 221, 80, 113]\n", "\n", "Generation: 70, Cost time: 19.97ms\n", " \tfitness: valid cnt: 9993, max: -0.0026, min: -0.6670, mean: -0.1586, std: 0.1413\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.86\n", " \tconn counts: max: 20, min: 3, mean: 12.43\n", " \tspecies: 16, [922, 1454, 1050, 971, 894, 817, 740, 659, 131, 928, 469, 208, 257, 236, 188, 76]\n", "\n", "Generation: 71, Cost time: 19.95ms\n", " \tfitness: valid cnt: 9961, max: -0.0021, min: -0.7166, mean: -0.1600, std: 0.1418\n", "\n", "\tnode counts: max: 15, min: 7, mean: 8.96\n", " \tconn counts: max: 20, min: 3, mean: 12.57\n", " \tspecies: 16, [1368, 966, 1039, 963, 888, 812, 737, 660, 951, 129, 455, 221, 250, 228, 202, 131]\n", "\n", "Generation: 72, Cost time: 19.97ms\n", " \tfitness: valid cnt: 9941, max: -0.0017, min: -0.6700, mean: -0.1597, std: 0.1435\n", "\n", "\tnode counts: max: 15, min: 6, mean: 8.97\n", " \tconn counts: max: 21, min: 3, mean: 12.66\n", " \tspecies: 16, [1114, 1451, 781, 960, 884, 810, 736, 660, 760, 330, 448, 219, 248, 224, 228, 147]\n", "\n", "Generation: 73, Cost time: 19.96ms\n", " \tfitness: valid cnt: 9963, max: -0.0013, min: -0.6457, mean: -0.1582, std: 0.1429\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.05\n", " \tconn counts: max: 22, min: 3, mean: 12.60\n", " \tspecies: 16, [1514, 748, 1071, 957, 883, 809, 735, 660, 980, 116, 444, 257, 246, 222, 197, 161]\n", "\n", "Generation: 74, Cost time: 19.24ms\n", " \tfitness: valid cnt: 9922, max: -0.0010, min: -0.6902, mean: -0.1594, std: 0.1471\n", "\n", "\tnode counts: max: 15, min: 7, mean: 9.03\n", " \tconn counts: max: 23, min: 3, mean: 12.77\n", " \tspecies: 15, [1642, 1118, 790, 978, 899, 821, 742, 663, 799, 290, 430, 243, 223, 194, 168]\n", "\n", "Generation: 75, Cost time: 19.20ms\n", " \tfitness: valid cnt: 9882, max: -0.0008, min: -0.6865, mean: -0.1498, std: 0.1469\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.16\n", " \tconn counts: max: 23, min: 2, mean: 13.00\n", " \tspecies: 15, [1585, 1142, 802, 989, 907, 827, 746, 664, 733, 353, 423, 255, 222, 194, 158]\n", "\n", "Generation: 76, Cost time: 18.52ms\n", " \tfitness: valid cnt: 9895, max: -0.0007, min: -0.7461, mean: -0.1508, std: 0.1486\n", "\n", "\tnode counts: max: 16, min: 7, mean: 9.14\n", " \tconn counts: max: 24, min: 2, mean: 13.07\n", " \tspecies: 14, [1997, 1190, 551, 1018, 929, 842, 753, 665, 852, 214, 401, 219, 192, 177]\n", "\n", "Generation: 77, Cost time: 18.81ms\n", " \tfitness: valid cnt: 9913, max: -0.0006, min: -0.6691, mean: -0.1429, std: 0.1516\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.15\n", " \tconn counts: max: 24, min: 2, mean: 13.19\n", " \tspecies: 14, [1269, 1297, 1166, 1034, 938, 849, 757, 665, 709, 347, 390, 40, 191, 348]\n", "\n", "Generation: 78, Cost time: 18.54ms\n", " \tfitness: valid cnt: 9908, max: -0.0005, min: -0.7353, mean: -0.1428, std: 0.1513\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.32\n", " \tconn counts: max: 24, min: 2, mean: 13.63\n", " \tspecies: 14, [1308, 1590, 831, 1040, 945, 853, 759, 665, 628, 423, 385, 316, 190, 67]\n", "\n", "Generation: 79, Cost time: 18.34ms\n", " \tfitness: valid cnt: 9931, max: -0.0004, min: -0.7203, mean: -0.1386, std: 0.1531\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.32\n", " \tconn counts: max: 25, min: 2, mean: 13.92\n", " \tspecies: 14, [1407, 2070, 251, 1069, 967, 866, 764, 662, 581, 412, 383, 204, 212, 152]\n", "\n", "Generation: 80, Cost time: 17.97ms\n", " \tfitness: valid cnt: 9996, max: -0.0003, min: -0.7266, mean: -0.1349, std: 0.1537\n", "\n", "\tnode counts: max: 17, min: 6, mean: 9.58\n", " \tconn counts: max: 26, min: 2, mean: 14.36\n", " \tspecies: 13, [1526, 1269, 1127, 652, 1029, 923, 817, 711, 605, 501, 370, 310, 160]\n", "\n", "Generation: 81, Cost time: 17.93ms\n", " \tfitness: valid cnt: 9997, max: -0.0003, min: -0.7457, mean: -0.1253, std: 0.1549\n", "\n", "\tnode counts: max: 17, min: 7, mean: 9.59\n", " \tconn counts: max: 25, min: 3, mean: 14.43\n", " \tspecies: 13, [1483, 343, 2904, 88, 1009, 901, 793, 685, 577, 363, 354, 366, 134]\n", "\n", "Generation: 82, Cost time: 18.31ms\n", " \tfitness: valid cnt: 9999, max: -0.0002, min: -0.7337, mean: -0.1272, std: 0.1591\n", "\n", "\tnode counts: max: 17, min: 7, mean: 9.55\n", " \tconn counts: max: 25, min: 5, mean: 14.50\n", " \tspecies: 13, [1462, 2523, 106, 1053, 795, 890, 781, 672, 563, 396, 19, 619, 121]\n", "\n", "Generation: 83, Cost time: 18.05ms\n", " \tfitness: valid cnt: 10000, max: -0.0002, min: -0.7259, mean: -0.1250, std: 0.1579\n", "\n", "\tnode counts: max: 18, min: 6, mean: 9.59\n", " \tconn counts: max: 26, min: 4, mean: 14.68\n", " \tspecies: 13, [1451, 124, 1494, 1905, 1022, 883, 775, 665, 556, 417, 479, 170, 59]\n", "\n", "Generation: 84, Cost time: 18.23ms\n", " \tfitness: valid cnt: 10000, max: -0.0002, min: -0.7298, mean: -0.1239, std: 0.1593\n", "\n", "\tnode counts: max: 18, min: 6, mean: 9.77\n", " \tconn counts: max: 25, min: 6, mean: 14.89\n", " \tspecies: 13, [1445, 914, 2064, 595, 1005, 881, 772, 662, 552, 428, 387, 156, 139]\n", "\n", "Generation: 85, Cost time: 18.06ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7136, mean: -0.1240, std: 0.1601\n", "\n", "\tnode counts: max: 18, min: 6, mean: 9.78\n", " \tconn counts: max: 25, min: 5, mean: 14.94\n", " \tspecies: 13, [863, 1381, 2094, 703, 997, 880, 770, 660, 550, 433, 489, 56, 124]\n", "\n", "Generation: 86, Cost time: 17.49ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7303, mean: -0.1220, std: 0.1603\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.82\n", " \tconn counts: max: 24, min: 6, mean: 15.12\n", " \tspecies: 12, [1437, 1381, 2244, 203, 1025, 888, 769, 650, 531, 408, 374, 90]\n", "\n", "Generation: 87, Cost time: 17.01ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7389, mean: -0.1184, std: 0.1601\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.69\n", " \tconn counts: max: 24, min: 6, mean: 14.92\n", " \tspecies: 12, [1323, 1395, 1928, 1089, 618, 892, 769, 645, 521, 396, 311, 113]\n", "\n", "Generation: 88, Cost time: 17.08ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7353, mean: -0.1176, std: 0.1609\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.76\n", " \tconn counts: max: 24, min: 6, mean: 15.00\n", " \tspecies: 12, [1472, 1264, 1723, 1125, 805, 890, 769, 643, 516, 390, 277, 126]\n", "\n", "Generation: 89, Cost time: 17.03ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7369, mean: -0.1199, std: 0.1638\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.75\n", " \tconn counts: max: 25, min: 6, mean: 15.00\n", " \tspecies: 12, [1509, 1425, 1429, 1140, 900, 892, 706, 705, 514, 387, 264, 129]\n", "\n", "Generation: 90, Cost time: 17.14ms\n", " \tfitness: valid cnt: 10000, max: -0.0001, min: -0.7384, mean: -0.1185, std: 0.1620\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.79\n", " \tconn counts: max: 24, min: 6, mean: 15.03\n", " \tspecies: 12, [1530, 1837, 958, 1147, 939, 893, 737, 673, 513, 385, 261, 127]\n", "\n", "Generation: 91, Cost time: 17.11ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7323, mean: -0.1191, std: 0.1629\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.96\n", " \tconn counts: max: 25, min: 6, mean: 15.14\n", " \tspecies: 12, [1539, 1890, 887, 1153, 948, 892, 753, 657, 512, 384, 262, 123]\n", "\n", "Generation: 92, Cost time: 17.32ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7400, mean: -0.1205, std: 0.1652\n", "\n", "\tnode counts: max: 17, min: 6, mean: 9.91\n", " \tconn counts: max: 25, min: 4, mean: 15.22\n", " \tspecies: 12, [1543, 1076, 1218, 1622, 958, 893, 761, 649, 512, 384, 265, 119]\n", "\n", "Generation: 93, Cost time: 17.36ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7367, mean: -0.1187, std: 0.1647\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.84\n", " \tconn counts: max: 26, min: 4, mean: 15.26\n", " \tspecies: 12, [1545, 1622, 1251, 1053, 946, 894, 765, 645, 512, 384, 289, 94]\n", "\n", "Generation: 94, Cost time: 17.17ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7380, mean: -0.1185, std: 0.1644\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.80\n", " \tconn counts: max: 23, min: 4, mean: 15.32\n", " \tspecies: 12, [1547, 1330, 1117, 1470, 952, 895, 767, 643, 512, 384, 276, 107]\n", "\n", "Generation: 95, Cost time: 17.25ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7406, mean: -0.1183, std: 0.1646\n", "\n", "\tnode counts: max: 16, min: 6, mean: 9.74\n", " \tconn counts: max: 23, min: 4, mean: 15.34\n", " \tspecies: 12, [1547, 1370, 1019, 1526, 953, 896, 768, 642, 512, 384, 170, 213]\n", "\n", "Generation: 96, Cost time: 17.22ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7333, mean: -0.1184, std: 0.1643\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.81\n", " \tconn counts: max: 23, min: 5, mean: 15.44\n", " \tspecies: 12, [1547, 1391, 1349, 1158, 972, 895, 768, 641, 512, 384, 199, 184]\n", "\n", "Generation: 97, Cost time: 17.04ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7485, mean: -0.1171, std: 0.1629\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.93\n", " \tconn counts: max: 24, min: 6, mean: 15.64\n", " \tspecies: 12, [1547, 1095, 1336, 1456, 982, 896, 768, 641, 512, 384, 51, 332]\n", "\n", "Generation: 98, Cost time: 17.14ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7403, mean: -0.1164, std: 0.1635\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.87\n", " \tconn counts: max: 24, min: 6, mean: 15.70\n", " \tspecies: 12, [1549, 1290, 1369, 1244, 965, 896, 768, 576, 576, 384, 294, 89]\n", "\n", "Generation: 99, Cost time: 17.16ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7414, mean: -0.1176, std: 0.1648\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.86\n", " \tconn counts: max: 24, min: 6, mean: 15.71\n", " \tspecies: 12, [1548, 1382, 1263, 1255, 969, 896, 768, 608, 544, 384, 353, 30]\n", "\n", "Generation: 100, Cost time: 17.20ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7386, mean: -0.1202, std: 0.1668\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.88\n", " \tconn counts: max: 24, min: 6, mean: 15.73\n", " \tspecies: 12, [1549, 1358, 1272, 1275, 963, 896, 768, 624, 528, 384, 305, 78]\n", "\n", "Generation: 101, Cost time: 17.12ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7476, mean: -0.1170, std: 0.1644\n", "\n", "\tnode counts: max: 15, min: 6, mean: 9.95\n", " \tconn counts: max: 24, min: 6, mean: 15.88\n", " \tspecies: 12, [1548, 1311, 1277, 1295, 986, 896, 768, 632, 520, 384, 281, 102]\n", "\n", "Generation: 102, Cost time: 17.05ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7492, mean: -0.1199, std: 0.1665\n", "\n", "\tnode counts: max: 14, min: 6, mean: 10.15\n", " \tconn counts: max: 24, min: 6, mean: 16.30\n", " \tspecies: 12, [1549, 702, 1950, 1215, 1001, 896, 768, 636, 516, 384, 269, 114]\n", "\n", "Generation: 103, Cost time: 17.01ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7452, mean: -0.1144, std: 0.1634\n", "\n", "\tnode counts: max: 14, min: 6, mean: 10.25\n", " \tconn counts: max: 24, min: 6, mean: 16.32\n", " \tspecies: 12, [1548, 1630, 1069, 1184, 986, 896, 768, 638, 514, 384, 259, 124]\n", "\n", "Generation: 104, Cost time: 17.09ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7466, mean: -0.1144, std: 0.1625\n", "\n", "\tnode counts: max: 14, min: 6, mean: 10.17\n", " \tconn counts: max: 25, min: 6, mean: 16.12\n", " \tspecies: 12, [1549, 1528, 1196, 1168, 976, 896, 768, 639, 513, 384, 265, 118]\n", "\n", "Generation: 105, Cost time: 17.00ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7460, mean: -0.1149, std: 0.1644\n", "\n", "\tnode counts: max: 14, min: 6, mean: 10.19\n", " \tconn counts: max: 26, min: 6, mean: 16.21\n", " \tspecies: 12, [1548, 1653, 1226, 1009, 981, 832, 832, 640, 512, 384, 262, 121]\n", "\n", "Generation: 106, Cost time: 16.97ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7496, mean: -0.1133, std: 0.1639\n", "\n", "\tnode counts: max: 15, min: 6, mean: 10.20\n", " \tconn counts: max: 27, min: 6, mean: 16.24\n", " \tspecies: 12, [1548, 1320, 1111, 1449, 991, 864, 798, 640, 512, 384, 241, 142]\n", "\n", "Generation: 107, Cost time: 17.06ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7471, mean: -0.1183, std: 0.1655\n", "\n", "\tnode counts: max: 15, min: 6, mean: 10.23\n", " \tconn counts: max: 28, min: 6, mean: 16.32\n", " \tspecies: 12, [1548, 1442, 1301, 1127, 1000, 880, 783, 640, 512, 384, 232, 151]\n", "\n", "Generation: 108, Cost time: 17.08ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7491, mean: -0.1146, std: 0.1648\n", "\n", "\tnode counts: max: 15, min: 6, mean: 10.21\n", " \tconn counts: max: 27, min: 6, mean: 16.44\n", " \tspecies: 12, [1548, 1459, 1173, 1227, 1010, 888, 776, 640, 512, 384, 196, 187]\n", "\n", "Generation: 109, Cost time: 17.02ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7465, mean: -0.1125, std: 0.1630\n", "\n", "\tnode counts: max: 16, min: 6, mean: 10.26\n", " \tconn counts: max: 28, min: 6, mean: 17.02\n", " \tspecies: 12, [1549, 1291, 1378, 1020, 1126, 945, 772, 640, 512, 384, 336, 47]\n", "\n", "Generation: 110, Cost time: 17.22ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7143, mean: -0.1152, std: 0.1650\n", "\n", "\tnode counts: max: 16, min: 6, mean: 10.26\n", " \tconn counts: max: 28, min: 6, mean: 17.13\n", " \tspecies: 12, [1549, 1350, 1151, 1270, 1075, 916, 770, 640, 512, 384, 299, 84]\n", "\n", "Generation: 111, Cost time: 17.16ms\n", " \tfitness: valid cnt: 10000, max: -0.0000, min: -0.7431, mean: -0.1110, std: 0.1626\n", "\n", "\tnode counts: max: 16, min: 6, mean: 10.26\n", " \tconn counts: max: 28, min: 6, mean: 17.16\n", " \tspecies: 12, [1549, 1280, 1316, 1217, 1050, 900, 769, 640, 512, 384, 270, 113]\n", "\n", "Fitness limit reached!\n", "input: [0. 0. 0.], target: [0.], predict: [0.00066471]\n", "input: [0. 0. 1.], target: [1.], predict: [0.9992988]\n", "input: [0. 1. 0.], target: [1.], predict: [0.9988666]\n", "input: [0. 1. 1.], target: [0.], predict: [0.00107922]\n", "input: [1. 0. 0.], target: [1.], predict: [0.9987184]\n", "input: [1. 0. 1.], target: [0.], predict: [0.00093677]\n", "input: [1. 1. 0.], target: [0.], predict: [0.00060118]\n", "input: [1. 1. 1.], target: [1.], predict: [0.99927646]\n", "loss: 8.484730074087565e-07\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/root/wanglishuang/tensorneat_offical/tensorneat/src/tensorneat/genome/default.py:160: UserWarning: genome.output_transform is not None but sympy_output_transform is None!\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\\begin{align}\n", "h_{0} &= \\frac{1}{2.29 e^{- 17.99 h_{2} + 6.53 h_{4} + 0.02 h_{5}} + 1}\\newline\n", "h_{1} &= \\frac{1}{0.21 e^{0.1 h_{6}} + 1}\\newline\n", "h_{2} &= \\frac{1}{0.14 e^{- 2.72 h_{1} - 13.1 i_{0} + 11.51 i_{1} + 11.09 i_{2}} + 1}\\newline\n", "h_{3} &= \\frac{1}{1.15 e^{0.25 i_{2}} + 1}\\newline\n", "h_{4} &= \\frac{1}{1.53 e^{- 1.17 h_{5} - 0.26 h_{8} - 0.44 i_{2}} + 1}\\newline\n", "h_{5} &= \\frac{1}{1 + 0.15 e^{- 2.25 h_{1}}}\\newline\n", "h_{6} &= \\frac{1}{1.2 e^{- 0.45 h_{3} - 0.13 i_{2}} + 1}\\newline\n", "h_{7} &= \\frac{1}{1 + 0.46 e^{- 1.14 h_{1}}}\\newline\n", "h_{8} &= \\frac{1}{1 + 0.11 e^{- 0.91 h_{6}}}\\newline\n", "o_{0} &= - 19.4 h_{0} - 9.02 h_{2} + 9.09 h_{5} + 10.01 h_{7} + 14.11 i_{0} - 14.1 i_{1} - 13.65 i_{2} + 3.62\\newline\n", "\\end{align}\n", "\n", "h = np.zeros(9)\n", "o = np.zeros(1)\n", "h[0] = 1/(2.286112*exp(-17.990682*h[2] + 6.527691*h[4] + 0.016731*h[5]) + 1)\n", "h[1] = 1/(0.213837*exp(0.10407*h[6]) + 1)\n", "h[2] = 1/(0.140065*exp(-2.720749*h[1] - 13.097381*i[0] + 11.51199*i[1] + 11.090915*i[2]) + 1)\n", "h[3] = 1/(1.147046*exp(0.247421*i[2]) + 1)\n", "h[4] = 1/(1.531921*exp(-1.168095*h[5] - 0.255689*h[8] - 0.443025*i[2]) + 1)\n", "h[5] = 1/(1 + 0.145421*exp(-2.246774*h[1]))\n", "h[6] = 1/(1.2034*exp(-0.453613*h[3] - 0.131671*i[2]) + 1)\n", "h[7] = 1/(1 + 0.463093*exp(-1.139964*h[1]))\n", "h[8] = 1/(1 + 0.11458*exp(-0.90822*h[6]))\n", "o[0] = -19.398025*h[0] - 9.018034*h[2] + 9.089612*h[5] + 10.008932*h[7] + 14.108975*i[0] - 14.102385*i[1] - 13.648185*i[2] + 3.619226\n", "\n" ] }, { "data": { "image/png": "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Ghsb8fjjj+Mf//hHt97f1NSEyMhIvPTSSwgPD0d8fLyBKiUi+v8sOlACwJw5c1BYWIT6+sEYPboXXnvtv0HxXi5dArZsAfz8bHHmzP/g008P4cUXXzRKvUREjz76KEpLSzFy5Eg8/fTTWLRoEcrLy+/5nqamJrz//vvw9/fHu+++C6VSiXfeeQe9eln8Nk9EJsBi76H8uVu3buGNN97Au++m4datZkyebIPHHmuHnx/wq18Bt28DVVVAeXkvFBdLsLd3wEsvvYytW99Gnz595C6fiKyQJEnYvXs3tm7ditraWvj7+2PixIkIDAxEv379oNFocP78eZw6dQpFRUVobGzEzJkzoVQqDfZccCKijlhNoLzj5s2b+PDDD3HkSD5OnTqBf/3r33e/NnjwADz22ARMnToNL7zwAoMkEZkErVaLTz/9FH/9619x6tQpVFVV3R2A3qdPH4wZMwZBQUF46aWXMHz4cJmrJSJrZHWB8udu376N27dvw8HBAb/61a/kLoeI6L7a2tpw69Yt2NnZwcnJCTY2NnKXRERWzuoDJRERERHphndrExEREZFOGCiJiIiISCcMlERERESkEwZKIiIiItIJAyURERER6YSBkoiIiIh0wkBJRERERDphoCQiIiIinTBQEhEREZFOGCiJiIiISCcMlERERESkEwZKIiIiItIJAyURERER6YSBkoiIiIh0wkBJRERERDphoCQiIiIinTBQEhEREZFOGCiJiIiISCcMlERERESkEwZKIiIiItIJAyURERER6YSBkoiIiIh0wkBJRERERDphoCQiIiIinTBQEhEREZFOGCiJiIiISCcMlERERESkEwZKIiIiItIJAyURERER6YSBkoiIiIh0wkBJRERERDphoCQiIiIinTBQEhEREZFOGCiJiIiISCcMlERERESkEwZKIiIiItIJAyURERER6eT/Acq/ezF63BoGAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import sys\n", "sys.path.append(\"/root/wanglishuang/tensorneat_offical/tensorneat/src\")\n", "\n", "from tensorneat.pipeline import Pipeline\n", "from tensorneat import algorithm, genome, problem, common\n", "\n", "algorithm = algorithm.NEAT(\n", " pop_size=10000,\n", " species_size=20,\n", " survival_threshold=0.01,\n", " genome=genome.DefaultGenome(\n", " num_inputs=3,\n", " num_outputs=1,\n", " output_transform=common.ACT.sigmoid,\n", " ),\n", ")\n", "problem = problem.XOR3d()\n", "\n", "pipeline = Pipeline(\n", " algorithm,\n", " problem,\n", " generation_limit=200,\n", " fitness_target=-1e-6,\n", " seed=42,\n", ")\n", "state = pipeline.setup()\n", "# run until terminate\n", "state, best = pipeline.auto_run(state)\n", "# show result\n", "pipeline.show(state, best)\n", "\n", "# visualize the best individual\n", "network = algorithm.genome.network_dict(state, *best)\n", "algorithm.genome.visualize(network, save_path=\"./network.svg\")\n", "\n", "# transform the best individual to latex formula\n", "from tensorneat.common.sympy_tools import to_latex_code, to_python_code\n", "sympy_res = algorithm.genome.sympy_func(state, network)\n", "latex_code = to_latex_code(*sympy_res)\n", "print(latex_code)\n", "\n", "# transform the best individual to python code\n", "python_code = to_python_code(*sympy_res)\n", "print(python_code)" ] }, { "cell_type": "code", "execution_count": 2, "id": "69534d96-95b3-4952-a1de-21b9b5e84639", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'nodes': {0: {'idx': 0,\n", " 'bias': Array(0.52739584, dtype=float32),\n", " 'res': Array(1.3078387, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 1: {'idx': 1,\n", " 'bias': Array(-0.00151895, dtype=float32),\n", " 'res': Array(0.71738267, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 2: {'idx': 2,\n", " 'bias': Array(-0.76311255, dtype=float32),\n", " 'res': Array(0.95307755, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 3: {'idx': 3,\n", " 'bias': Array(3.619226, dtype=float32),\n", " 'res': Array(5., dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 4: {'idx': 4,\n", " 'bias': Array(-0.82685274, dtype=float32),\n", " 'res': Array(4.12094, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 5: {'idx': 5,\n", " 'bias': Array(1.5425409, dtype=float32),\n", " 'res': Array(0.50815284, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 6: {'idx': 6,\n", " 'bias': Array(1.9656484, dtype=float32),\n", " 'res': Array(3.8746881, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 7: {'idx': 7,\n", " 'bias': Array(-0.13719033, dtype=float32),\n", " 'res': Array(0.6570905, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 8: {'idx': 8,\n", " 'bias': Array(-0.42652255, dtype=float32),\n", " 'res': Array(1.0546701, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 9: {'idx': 9,\n", " 'bias': Array(1.9281235, dtype=float32),\n", " 'res': Array(1.9254419, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 10: {'idx': 10,\n", " 'bias': Array(-0.18515056, dtype=float32),\n", " 'res': Array(1.3251544, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 11: {'idx': 11,\n", " 'bias': Array(0.7698282, dtype=float32),\n", " 'res': Array(1.1399639, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'},\n", " 12: {'idx': 12,\n", " 'bias': Array(2.1664798, dtype=float32),\n", " 'res': Array(0.9118128, dtype=float32),\n", " 'agg': 'sum',\n", " 'act': 'sigmoid'}},\n", " 'conns': {(2, 7): {'in': 2,\n", " 'out': 7,\n", " 'weight': Array(-0.37654096, dtype=float32)},\n", " (2, 3): {'in': 2, 'out': 3, 'weight': Array(-2.729637, dtype=float32)},\n", " (4, 3): {'in': 4, 'out': 3, 'weight': Array(-3.879605, dtype=float32)},\n", " (6, 4): {'in': 6, 'out': 4, 'weight': Array(4.365674, dtype=float32)},\n", " (2, 8): {'in': 2, 'out': 8, 'weight': Array(0.42006052, dtype=float32)},\n", " (2, 6): {'in': 2, 'out': 6, 'weight': Array(-2.862402, dtype=float32)},\n", " (0, 6): {'in': 0, 'out': 6, 'weight': Array(3.3802414, dtype=float32)},\n", " (1, 6): {'in': 1, 'out': 6, 'weight': Array(-2.9710753, dtype=float32)},\n", " (9, 8): {'in': 9, 'out': 8, 'weight': Array(1.1075453, dtype=float32)},\n", " (8, 4): {'in': 8, 'out': 4, 'weight': Array(-1.5840294, dtype=float32)},\n", " (0, 3): {'in': 0, 'out': 3, 'weight': Array(2.821795, dtype=float32)},\n", " (1, 3): {'in': 1, 'out': 3, 'weight': Array(-2.820477, dtype=float32)},\n", " (9, 3): {'in': 9, 'out': 3, 'weight': Array(1.8179224, dtype=float32)},\n", " (6, 3): {'in': 6, 'out': 3, 'weight': Array(-1.8036067, dtype=float32)},\n", " (5, 9): {'in': 5, 'out': 9, 'weight': Array(1.1668874, dtype=float32)},\n", " (5, 6): {'in': 5, 'out': 6, 'weight': Array(0.70218533, dtype=float32)},\n", " (5, 11): {'in': 5, 'out': 11, 'weight': Array(1., dtype=float32)},\n", " (9, 4): {'in': 9, 'out': 4, 'weight': Array(-0.00405997, dtype=float32)},\n", " (7, 10): {'in': 7, 'out': 10, 'weight': Array(0.34230947, dtype=float32)},\n", " (10, 5): {'in': 10, 'out': 5, 'weight': Array(-0.20480111, dtype=float32)},\n", " (11, 3): {'in': 11, 'out': 3, 'weight': Array(2.0017865, dtype=float32)},\n", " (10, 12): {'in': 10, 'out': 12, 'weight': Array(0.9960602, dtype=float32)},\n", " (12, 8): {'in': 12, 'out': 8, 'weight': Array(0.2424354, dtype=float32)},\n", " (2, 10): {'in': 2, 'out': 10, 'weight': Array(0.09936284, dtype=float32)}},\n", " 'topo_order': [0, 1, 2, 7, 10, 5, 12, 6, 9, 11, 8, 4, 3],\n", " 'topo_layers': [[0, 1, 2], [7], [10], [5, 12], [6, 9, 11], [8], [4], [3]]}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "network" ] }, { "cell_type": "code", "execution_count": 3, "id": "922647ca01533416", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "import jax\n", "import numpy as np\n", "def re_cound_idx(nodes, conns, input_keys, output_keys):\n", " \"\"\"\n", " Make the key of hidden nodes continuous.\n", " Also update the index of connections.\n", " \"\"\"\n", " nodes, conns = jax.device_get((nodes, conns))\n", " next_key = max(*input_keys, *output_keys) + 1\n", " old2new = {}\n", " for i, key in enumerate(nodes[:, 0]):\n", " if np.isnan(key):\n", " continue\n", " if np.in1d(key, input_keys + output_keys):\n", " continue\n", " old2new[int(key)] = next_key\n", " next_key += 1\n", "\n", " new_nodes = nodes.copy()\n", " for i, key in enumerate(nodes[:, 0]):\n", " if (not np.isnan(key)) and int(key) in old2new:\n", " new_nodes[i, 0] = old2new[int(key)]\n", "\n", " new_conns = conns.copy()\n", " for i, (i_key, o_key) in enumerate(conns[:, :2]):\n", " if (not np.isnan(i_key)) and int(i_key) in old2new:\n", " new_conns[i, 0] = old2new[int(i_key)]\n", " if (not np.isnan(o_key)) and int(o_key) in old2new:\n", " new_conns[i, 1] = old2new[int(o_key)]\n", " return new_nodes, new_conns" ] }, { "cell_type": "code", "execution_count": 4, "id": "76aa46bb-6d14-43d9-9ffc-8374c2658a1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2.0000000e+00, 7.0000000e+00, -3.7654096e-01],\n", " [ 2.0000000e+00, 3.0000000e+00, -2.7296369e+00],\n", " [ 4.0000000e+00, 3.0000000e+00, -3.8796051e+00],\n", " [ 6.0000000e+00, 4.0000000e+00, 4.3656740e+00],\n", " [ 2.0000000e+00, 8.0000000e+00, 4.2006052e-01],\n", " [ 2.0000000e+00, 6.0000000e+00, -2.8624020e+00],\n", " [ 0.0000000e+00, 6.0000000e+00, 3.3802414e+00],\n", " [ 1.0000000e+00, 6.0000000e+00, -2.9710753e+00],\n", " [ 9.0000000e+00, 8.0000000e+00, 1.1075453e+00],\n", " [ 8.0000000e+00, 4.0000000e+00, -1.5840294e+00],\n", " [ 0.0000000e+00, 3.0000000e+00, 2.8217950e+00],\n", " [ 1.0000000e+00, 3.0000000e+00, -2.8204770e+00],\n", " [ 9.0000000e+00, 3.0000000e+00, 1.8179224e+00],\n", " [ 6.0000000e+00, 3.0000000e+00, -1.8036067e+00],\n", " [ 5.0000000e+00, 9.0000000e+00, 1.1668874e+00],\n", " [ 5.0000000e+00, 6.0000000e+00, 7.0218533e-01],\n", " [ 5.0000000e+00, 1.1000000e+01, 1.0000000e+00],\n", " [ 9.0000000e+00, 4.0000000e+00, -4.0599704e-03],\n", " [ 7.0000000e+00, 1.0000000e+01, 3.4230947e-01],\n", " [ 1.0000000e+01, 5.0000000e+00, -2.0480111e-01],\n", " [ 1.1000000e+01, 3.0000000e+00, 2.0017865e+00],\n", " [ 1.0000000e+01, 1.2000000e+01, 9.9606019e-01],\n", " [ 1.2000000e+01, 8.0000000e+00, 2.4243540e-01],\n", " [ 2.0000000e+00, 1.0000000e+01, 9.9362835e-02],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan],\n", " [ nan, nan, nan]], dtype=float32)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nodes, conns = re_cound_idx(*best, algorithm.genome.get_input_idx(), algorithm.genome.get_output_idx())\n", "conns" ] }, { "cell_type": "code", "execution_count": 5, "id": "d3ba0f16-e6d8-442e-aa32-bda128a9326c", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'nodes_exprs' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mtype\u001b[39m(\u001b[43mnodes_exprs\u001b[49m)\n", "\u001b[0;31mNameError\u001b[0m: name 'nodes_exprs' is not defined" ] } ], "source": [ "type(nodes_exprs)" ] }, { "cell_type": "code", "execution_count": null, "id": "a4673228-b8cd-4904-bc1d-60fb922e53a5", "metadata": {}, "outputs": [], "source": [ "import re\n", "import sympy as sp\n", "\n", "def analysis_nodes_exprs(nodes_exprs):\n", " input_cnt, hidden_cnt, output_cnt = 0, 0, 0\n", " norm_symbols = {}\n", " for key in nodes_exprs.keys():\n", " if str(key).startswith('i'):\n", " input_cnt += 1\n", " elif str(key).startswith('h'):\n", " hidden_cnt += 1\n", " elif str(key).startswith('o'):\n", " output_cnt += 1\n", " elif str(key).startswith('norm'):\n", " norm_symbols[key] = nodes_exprs[key]\n", " return input_cnt, hidden_cnt, output_cnt, norm_symbols\n", "\n", "def round_expr(expr, precision=2):\n", " \"\"\"\n", " Round numerical values in a sympy expression to a given precision.\n", " \"\"\"\n", " return expr.xreplace({n: round(n, precision) for n in expr.atoms(sp.Number)})\n", "\n", "\n", "def replace_variable_names(expression):\n", " \"\"\"\n", " Transform sympy expression to a string with array index that can be used in python code.\n", " For example, `o0` will be transformed to `o[0]`.\n", " \"\"\"\n", " expression_str = str(expression)\n", " expression_str = re.sub(r\"\\bo(\\d+)\\b\", r\"o[\\1]\", expression_str)\n", " expression_str = re.sub(r\"\\bh(\\d+)\\b\", r\"h[\\1]\", expression_str)\n", " expression_str = re.sub(r\"\\bi(\\d+)\\b\", r\"i[\\1]\", expression_str)\n", " return expression_str\n", "\n", "\n", "def to_latex_code(symbols, args_symbols, input_symbols, nodes_exprs, output_exprs, use_hidden_nodes=True):\n", " input_cnt, hidden_cnt, output_cnt, norm_symbols = analysis_nodes_exprs(nodes_exprs)\n", " res = \"\\\\begin{align}\\n\"\n", " \n", " if not use_hidden_nodes:\n", " for i in range(output_cnt):\n", " expr = output_exprs[i].subs(args_symbols)\n", " rounded_expr = round_expr(expr, 2)\n", " latex_expr = f\"o_{{{sp.latex(i)}}} &= {sp.latex(rounded_expr)}\\\\newline\\n\"\n", " res += latex_expr\n", " else:\n", " for i in range(hidden_cnt):\n", " symbol = sp.symbols(f\"h{i}\")\n", " expr = nodes_exprs[symbol].subs(args_symbols).subs(norm_symbols)\n", " rounded_expr = round_expr(expr, 2)\n", " latex_expr = f\"h_{{{sp.latex(i)}}} &= {sp.latex(rounded_expr)}\\\\newline\\n\"\n", " res += latex_expr\n", " for i in range(output_cnt):\n", " symbol = sp.symbols(f\"o{i}\")\n", " expr = nodes_exprs[symbol].subs(args_symbols).subs(norm_symbols)\n", " rounded_expr = round_expr(expr, 2)\n", " latex_expr = f\"o_{{{sp.latex(i)}}} &= {sp.latex(rounded_expr)}\\\\newline\\n\"\n", " res += latex_expr\n", " res += \"\\\\end{align}\\n\"\n", " return res\n", "\n", "\n", "def to_python_code(symbols, args_symbols, input_symbols, nodes_exprs, output_exprs, use_hidden_nodes=True):\n", " input_cnt, hidden_cnt, output_cnt, norm_symbols = analysis_nodes_exprs(nodes_exprs)\n", " res = \"\"\n", " if not use_hidden_nodes:\n", " # pre-allocate space\n", " res += f\"o = np.zeros({output_cnt})\\n\"\n", " for i in range(output_cnt):\n", " expr = output_exprs[i].subs(args_symbols)\n", " rounded_expr = round_expr(expr, 6)\n", " str_expr = f\"o{i} = {rounded_expr}\"\n", " res += replace_variable_names(str_expr) + \"\\n\"\n", " else:\n", " # pre-allocate space\n", " res += f\"h = np.zeros({hidden_cnt})\\n\"\n", " res += f\"o = np.zeros({output_cnt})\\n\"\n", " for i in range(hidden_cnt):\n", " symbol = sp.symbols(f\"h{i}\")\n", " expr = nodes_exprs[symbol].subs(args_symbols).subs(norm_symbols)\n", " rounded_expr = round_expr(expr, 6)\n", " str_expr = f\"h{i} = {rounded_expr}\"\n", " res += replace_variable_names(str_expr) + \"\\n\"\n", " for i in range(output_cnt):\n", " symbol = sp.symbols(f\"o{i}\")\n", " expr = nodes_exprs[symbol].subs(args_symbols).subs(norm_symbols)\n", " rounded_expr = round_expr(expr, 6)\n", " str_expr = f\"o{i} = {rounded_expr}\"\n", " res += replace_variable_names(str_expr) + \"\\n\"\n", " return res" ] }, { "cell_type": "code", "execution_count": null, "id": "e76e8f9a-7180-48f6-b8cd-cbee84b614ea", "metadata": {}, "outputs": [], "source": [ "input_cnt, hidden_cnt, output_cnt, norm_symbols = analysis_nodes_exprs(nodes_exprs)\n", "norm_symbols" ] }, { "cell_type": "code", "execution_count": null, "id": "4dd7361a-a569-4d12-9c4a-c6ea816fd1e3", "metadata": {}, "outputs": [], "source": [ "print(to_latex_code(symbols, args_symbols, input_symbols, nodes_exprs, output_exprs))" ] }, { "cell_type": "code", "execution_count": null, "id": "b3bfd23c-c414-4832-9f97-44ceffa09afa", "metadata": {}, "outputs": [], "source": [ "print(to_python_code(symbols, args_symbols, input_symbols, nodes_exprs, output_exprs))" ] }, { "cell_type": "code", "execution_count": null, "id": "f2fdba21-1573-4f32-b4a2-4b51add68de5", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.14" } }, "nbformat": 4, "nbformat_minor": 5 }