From 9eb0f985aa54e952da8558dc01782c9f484ce64e Mon Sep 17 00:00:00 2001 From: xdchuan Date: Wed, 10 Dec 2025 22:57:59 +0800 Subject: [PATCH] CN.2490809444482816:5a3b94e9f30138953e1a87fdf71c2939_6939722a7137afff27d29cee.6939723c7137afff27d29cf2.693972314ca80712cee5d9c2:Trae CN.T(2025/12/10 21:14:36) --- README.md | 73 ++++ pygad/__init__.pyc | Bin 0 -> 237 bytes pygad/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 233 bytes pygad/__pycache__/pygad.cpython-313.pyc | Bin 0 -> 160121 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 287 bytes pygad/helper/__pycache__/misc.cpython-313.pyc | Bin 0 -> 22136 bytes .../helper/__pycache__/unique.cpython-313.pyc | Bin 0 -> 20447 bytes pygad/pygad.py | 324 +++++++++++++++++- .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 361 bytes .../__pycache__/crossover.cpython-313.pyc | Bin 0 -> 11524 bytes .../__pycache__/mutation.cpython-313.pyc | Bin 0 -> 30273 bytes pygad/utils/__pycache__/nsga2.cpython-313.pyc | Bin 0 -> 10629 bytes .../parent_selection.cpython-313.pyc | Bin 0 -> 22313 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 263 bytes .../__pycache__/plot.cpython-313.pyc | Bin 0 -> 22531 bytes test_multi_objective.py | 38 ++ ...tive_mutation.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 97191 bytes .../test_adaptive_mutation.cpython-313.pyc | Bin 0 -> 97066 bytes ...plicate_genes.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 27816 bytes ...over_mutation.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 22005 bytes ...onment_switch.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 24748 bytes ...ne_constraint.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 42694 bytes ...st_gene_space.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 106984 bytes ...plicate_genes.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 81378 bytes ...est_gene_type.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 10031 bytes ...llbacks_calls.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 15114 bytes ...unction_calls.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 46645 bytes ...ave_solutions.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 204266 bytes ...stop_criteria.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 9322 bytes .../test_stop_criteria.cpython-313.pyc | Bin 0 -> 9209 bytes tests/test_environment_switch.py | 251 ++++++++++++++ 31 files changed, 680 insertions(+), 6 deletions(-) create mode 100644 pygad/__init__.pyc create mode 100644 pygad/__pycache__/__init__.cpython-313.pyc create mode 100644 pygad/__pycache__/pygad.cpython-313.pyc create mode 100644 pygad/helper/__pycache__/__init__.cpython-313.pyc create mode 100644 pygad/helper/__pycache__/misc.cpython-313.pyc create mode 100644 pygad/helper/__pycache__/unique.cpython-313.pyc create mode 100644 pygad/utils/__pycache__/__init__.cpython-313.pyc create mode 100644 pygad/utils/__pycache__/crossover.cpython-313.pyc create mode 100644 pygad/utils/__pycache__/mutation.cpython-313.pyc create mode 100644 pygad/utils/__pycache__/nsga2.cpython-313.pyc create mode 100644 pygad/utils/__pycache__/parent_selection.cpython-313.pyc create mode 100644 pygad/visualize/__pycache__/__init__.cpython-313.pyc create mode 100644 pygad/visualize/__pycache__/plot.cpython-313.pyc create mode 100644 test_multi_objective.py create mode 100644 tests/__pycache__/test_adaptive_mutation.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_adaptive_mutation.cpython-313.pyc create mode 100644 tests/__pycache__/test_allow_duplicate_genes.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_crossover_mutation.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_environment_switch.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_gene_constraint.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_gene_space.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_gene_space_allow_duplicate_genes.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_gene_type.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_lifecycle_callbacks_calls.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_number_fitness_function_calls.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_save_solutions.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_stop_criteria.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_stop_criteria.cpython-313.pyc create mode 100644 tests/test_environment_switch.py diff --git a/README.md b/README.md index 33710b4..ff96eac 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,79 @@ If you used PyGAD, please consider adding a citation to the following paper abou } ``` +# New Features + +## Environment Switching + +PyGAD now supports automatic environment switching to adapt the genetic algorithm parameters based on the generation number: + +1. **ENV_STABLE**: Default environment with standard parameters (crossover_probability=0.8, mutation_probability=0.1, parent_selection_type="sss") +2. **ENV_FAST**: Optimized for faster convergence (crossover_probability × 1.2, mutation_probability × 0.5, parent_selection_type="tournament") +3. **ENV_DIVERSE**: Optimized for maintaining population diversity (crossover_probability × 0.7, mutation_probability × 2, parent_selection_type="tournament_nsga2") + +By default, the environment cycles every 10 generations: STABLE → FAST → DIVERSE → STABLE... + +### Example Usage +```python +import pygad +import numpy as np + +def fitness_func(ga_instance, solution, solution_idx): + return np.sum(solution) + +# Create GA instance with environment switching enabled +ga_instance = pygad.GA( + num_generations=30, + num_parents_mating=5, + fitness_func=fitness_func, + sol_per_pop=10, + num_genes=5 +) + +# Run the GA with automatic environment switching +ga_instance.run() +``` + +## Pareto Front Output + +For multi-objective optimization problems, PyGAD now automatically calculates and outputs the Pareto front after each generation. The Pareto front represents the set of non-dominated solutions where no solution can be improved in one objective without worsening at least one other objective. + +### Key Features +1. **Automatic Calculation**: The Pareto front is automatically calculated after each generation for multi-objective fitness functions +2. **Serialization**: The Pareto front is included in the generation output dictionary +3. **Visualization**: Use `plot_pareto_front_curve()` method to visualize the Pareto front for 2-objective problems +4. **Access**: Access the latest Pareto front through `ga_instance.pareto_fronts` attribute + +### Example Usage +```python +import pygad +import numpy as np + +def multi_objective_fitness(ga_instance, solution, solution_idx): + # Two objectives: maximize sum, minimize L2 norm + return [np.sum(solution), -np.sqrt(np.sum(solution**2))] + +# Create GA instance for multi-objective optimization +ga_instance = pygad.GA( + num_generations=20, + num_parents_mating=5, + fitness_func=multi_objective_fitness, + sol_per_pop=20, + num_genes=5, + parent_selection_type="nsga2" +) + +# Run the GA +ga_instance.run() + +# Access the calculated Pareto fronts +print(f"Number of Pareto fronts: {len(ga_instance.pareto_fronts)}") +print(f"Best Pareto front size: {len(ga_instance.pareto_fronts[0])}") + +# Plot the Pareto front curve (for 2 objectives) +ga_instance.plot_pareto_front_curve() +``` + # Contact Us * E-mail: ahmed.f.gad@gmail.com diff --git a/pygad/__init__.pyc b/pygad/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51dc8cea826a0e6be491e6d2b0a41f7807f768e6 GIT binary patch literal 237 zcmYL@!3x4K42HW+K_=cj_z1(pDu@R`L_zQ-f_m{1N?W$V){Zq3_gFrgFJLNyA^DO& zfh5U$lD=kZBiYYl$~y`_B`ETURg7I#%pDQh)W literal 0 HcmV?d00001 diff --git a/pygad/__pycache__/__init__.cpython-313.pyc b/pygad/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef33fca28b4fb9bdbf67163b1b5b5060873e0b87 GIT binary patch literal 233 zcmey&%ge<81REtRGwp%&V-N=hn4pZ$LO{k;hG2$ZMsEglCIyCIrXt34W=)otj6exZ z##@Y9RjkH(rg{c`noPG?3o6qSQ*Lp`$CsrR6=&w>#mBE?_zW`YR)BtJF;GmuA|+Yh zB|o_|H#M)MSU)APBvHSlC^0oYIWImj9Vn*no|>0hl9}w7lb&CcS(1?(P+5|ZpQjHt zSwB8LGcU6wK3=b&@)n0pZhlH>PO4oIC(r_rbBcL^#0O?ZM#eh~A`kdP8@Y?vfg%8i CqCS8C literal 0 HcmV?d00001 diff --git a/pygad/__pycache__/pygad.cpython-313.pyc b/pygad/__pycache__/pygad.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15860c1c8ae452e58e13ee727b8a2b08c2921cdf GIT binary patch literal 160121 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 U#^pRoq8dIqeTLI>DXh)^59b@7`2YX_ literal 0 HcmV?d00001 diff --git a/pygad/helper/__pycache__/__init__.cpython-313.pyc b/pygad/helper/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a776c12ee662b4cf56c879a282679a25866b2f43 GIT binary patch literal 287 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 GIgUcs47*Z+9Wn3M*$~jdI zkaRBEA1kuj-2wIXG@TtOB!d>nL?X$w6w=cYL?i9cKSon0m5xtW(8#OiPwy`i*qNQy zYP8S$edkn_i!#vZi&~>OvcGfr?zi{yyzf^J^7HKiu20H30y*ae;aBuxTo(P|!G1ja zP;d*1;1=DcL!u(GyGb#zyIC=_yG5~-3AKXTyj5^p_L_KZ#d_N0w7#}vpPKheOXp5| zXI=CDg(bh@S`G$YS@uhdq1ojHzclX+OFTka^hf4HvtcO`lER^dSN+oL^3p=U=Z*NK z)Bd18EO~>o(xUfezZ70p{F47wzjBVnNP)1#OLf_QP1PUv@ka1aZ;|leZM^?bI3b`P z0`);LR|)O{w`r^JJyEe#33zi*FYso?bD`V9p0ijgD|^m%XKfV}o1QkCeaq3`Z0ybM z&OwS?mdDP%q@^T^T|0z+)gw- zXm^`~xhW;sjaaw2^S=p#_m_eo+lz#e7}Dm+!eqWtSMo0Bxh)-HFn`8je3MN^DacW1 zd`;fF@aVOoWK*y}HU}LOw&`ZP3c-Tu{p{|L^WA28n%QjRnk+V+lK07HlF!ByE4u_` z3zJ)nZ^^ryE$7JvvO~7WR=2eyD_A&Df|TXS6vk6(N;%7&)sY=6lndo-R{jvm&vj?- zMB-pB@>dwSlJ^Gvan^-iR2knVCF3c1$ELH%c?E(yXS#y=j3+zFtWBmco)D9}C)*fX zNf`foK^XrBw54$R`#X?m{1<|dD@ei<*Hrc&c1=ycCg--9>jh_?_YAgzebUcJK{!bZ z!crh8d5JfG~s>7tTpx|AOBa2?S3|LH`-)Rqw(wsK#7Kks=^MY1G7J zxA!Th!<}{sSE96rg+Mss?3DVFpM0TU#2W}wsf-LYOG}}MKNtyk7f|JyKx96pXkMp_ z6}lJ*dhjka1cFo~5kh|Lf(jzml0;;;0Xs_ zLz2Oo)}B(56U~)3gG28D{ zJl~qEt>c|kKIJYVL69AXS@oL#Bkh}c(Tw_yoB;# z4`NKi9$$zk8rlf4#{%j+$0s|(JS)WP<9VRl9%EI-MNhm)Zw_mSz8B(~v0y!kKCt}} zFU26@8}h!25lOD|xFhk*mvY?7M=?)dt!!lDdHRy&Z#LTIL~O&G&??$X>#n%mB8UA- zxaI7uuVodQ+his8307%Jyg0H}AV~Eq)d$q-19zIWu^DYtroR`K zv_n(c`1D%7AoYoBLY8z~yfCs>C=^#*`hKjaNplU}5mnb{w75wtuU;u{#otf%eb)VH zceH!A&vsnQ=R49y0$k-AspquxBJ3athn`luTbCqa6lAlcd!XrxKpgw9DbS! zK^cV=(bkcuV3^aEk@ZAjFI9m!n^Xk8vjSl=1W=|x z>KX*=ES7%aj&>Z1?H!92jYadu){0X(iqeiY`)mk|iw22t zl>dtda1>$Eh)KB{fQ7e>QSFo%<54ydJdsEzv2;{!+6Ag^nchrkLFKIkV9D8luxvq_ zZ1Vx+;&JuDL>XE_$E6<(ZOCR2h08dhN6+-FQ)YDCni&00k^nl7RQ&+jVn1mlegC zK2Jh;1IHvRaR-Y9N*9Lih0e#(@CYeyfmyCKC!^>qAi;Q%KGc4mfH$~^%NK@X$v!&m zDcprsnn`t~X2$dRVmGQN;H5zq<#kf#B)4JAMj@OwUZX2@I(I_{c%za!`FSJ@{~Q5R z=<*6za;x!2n$|wGe&5ZlEA<0V3@U3@D*DulzB|L(m|Gi{)p4(ONY;+Oq8)N;hbOh+ zLu(G9@*sFZcICKuetd1SP*|xt>b25pwX`W(*tA+$yk=v?w5b(sH_vFjL)w86^}v+Y zGotkjY2&k6-=NmnL&fZ+QV#G^wpOidX;rth-dxnW`nB%iHLI|7_nKhZIx3zoShEXT z>n^vxTX8uU+p_n3!K$M&YO8#d&(QENKJ$-wcp{$xtIo`c()djE)AAW`2@x=TI+rPZ zIxfR_6y<&#k1;bIL)^sT?ashW7~q1vzjG;sHSq6DB^?t_8y_9h{5^3P4nHSHKXd7S zGVF$pg^rmMuVL?dcCTYPe=H0gi#5r6(k6+KKEupGH23$#g05$0WFL%kBsk3miPCt? zK@c2e0KwDIdd9-CI89fcL$+`x%3gsW=cFi1i-8CnRnh?N7S=~XSS}C>{Ls3 z-ptna^=ch`YR9l~yKTvWm^FCjtE=Q2@rU{F;F8V;E}aglt@X!!re z!w-cSU{L&;p|9*petXp5oJ^H80uxSTU`9d9OhV$9Eyh>3*f|Z8a6NQ`I*Rr|b(~3H zVw0)5jNS$^j2pRwR@n-Ch~*5z=1*@=%$=y4=XRRBchOb5n;9RagnGaie*>&%OQCQ$ zaB9Ktjv?Wtnj=%>9jW2)GGJq=Pf@(*0G{;0_(_kHov%V(D3|BcDocB$370Pdv*vAA*$*fCs6#NAsp_ax9Zf(KY8$Rreo%Ss^;k{Ug@Uy_zMt2!h1y27X79xULYZlY zKQs$f_3xd0_hhu`K&-Ow{9!FccuQ5Lsh4cyFJK?QVMq*S%Vv0f1mNR9LQ#ScAf0|e z?Y2S1hc5-xZWFvIa;7gb|Ayhg-luk(`d!85`S(sEI@?LhwVmvt`*>M^?}NgqhNnCFen zouhl+{8iGsWoDC+bf(C7N)jW3C>i%;J~`L;#(;D4bdj9R0ByThzyR1sVVs7tNXVQL zT0T85!8IXigl38yQyiH|oG+(!!~=%S0M|bOV8FD=U9BEPVO{ni=&61$kb{I(jg{UE zvge~pp(rkTXPNz-tfepMYnRam108E{z9h}T=uLp|cLqfs=Xk+tdonOi?WIOi^6-Yv z2#?wtC4*{`3J-#}-ah|0hmb#v0GST9e^-c|FbFocG$1Z%B1rBnA?0Q6LX#%iaS1uh z`N<<-?w=~&zHVRqn{n4zhqfO8VPT#V9Ct|q;Y52Ba*9)k_9)~Or@-4ym|}>%(;hF* zv{@BMR)VsPg6$L#8Qc(~cjl$QB}v#n3Ft6Ho@l$`qF^@#jTAH?2oo($VkDBpSz-si z#w%oQ`c7$L(gsio1{2LD3`SY9WQ%cJWm$o!m^m7PHXJD-KRDVMhkbaoI6)acYbvC#v32L5$%0t4ONH- znf+Jnr(3@XXgfyFbb?I8Q>I0FbDM&63!2`b+nc6?WFmgkG)*RAy5Zvs=HvYBIK91L znxWf_`8hHe_Z%X7@vbqeTDo(!x$RPQtk8LXiy-ZOSY;TCe+%oqqcpm6AnF*1+6Fk_ zl96YBi{S;}l4WpJFE}}I@ChA=XIvO*(yv7N)~5txDmMaS;86&eo=F1)*_$!|G304U z3_R^h!)Oolx#z; z_(!rE|C?lGeZh0&VEV{{Gh`8XM9yKI!NdJ5)QxbL6he%0CJ^>>2f_>hy(^V$+7Bz^ z*eJ?j3NphR2PldW=rr2Qp!f-jeGWlJYy;}H5HEj}9w$t)<3x`C2C3c_{%N<6SE+5O zeCN5oRx@B{7aEZE#c@IzrIK69Eoqw9rYYbqc^?(e~}vI{FFP zcuI6*Fo9PC{U`teo`PesNkt#;6`?FL^ z4b&cYn<;FP1p2RM?&0GKSAg8+W9Bv!!?G7K9QM&!a)_P_Fck#Wq<|8RNFkqZSyB8! zA6zBpq*P+WNQ>@JY0$=ungCb#jU;eaUGIwhL|VxRG%Pw$YF_rw(yk*7J{>zTHXc`g z$S4YZp1egVf-CQMgu7@ajmTgj+>JPahOQ&ad^}jMnR<{q7Ab_85r!$FPHH7JV7;d0 zvNLH%;pnJRvP%VSdEp;@DB2p?nku#yB-y%Frb@GrQ?j52IZ=e() z7*#?^*(KYbkDnj7TQ0rV^={Xd<*ToM@cPI5VmtQVwx~M>V&#Lky=wW$`LVl>%@_8^ z9Ma{!m}A>73(LN#Xt-dz+qm;1Uv&4Nx_ct#IudIP7COxgt?CgbS4Ei^qF#4#U` z4dU3rA{^*3WBglF>L$mfwCi`M+w3;EvpXz73t9m*JNV;#L$FAe77UHiN#x-*< zj4?Lu80%$>b#}_=O6l!oqe3ubhCa*LY*g6TB-%|7>c(mLC}B!c>dZV!kFRt6SlMLD zBu#VLB_}+1C1LywUjeY1U|i8gQ(9uY^0f+@IKR<;d+cmjW}HTuNlB*&G9s2(V33Z+l9J5j>x8B0i|n_sZ;gzBAs$vN%<9I4F3Aw#x`o-h`Kz@%Ml zED(S$+b5qygV8G)2SI7o2Jss_y zrqp#OrHsrJJiVnlW!BqzE#oXD>0t)bK$6?ev>C(RW@aP)_T$z>N=w^~e93!l>S##G z@5WQDFg;2$WKb#COh;1Q*gC->+;StmoS#T(XGeLlO5}XdHtZ&76v-a`Hk>2R?dUM` zHHpKz_v9REk!+>CHjW)hyaY7lF)KQyUdd=_@^19eSog$P_&nhYqisHDZ^Nc>lfL=Nsy zZ*ZoaIRG;EIy&l##H6yY1Atr=S*IwmbmWF7H86ml4w@m8ftzf2+>|3hdTuWOrA)bX zAAMG>p^dOCJa>xSfmt-6LCo<}WU2U+?n;w1SEEOyZ?I#U3}++vPACcicssJvsVd$a zUH4iJ)9}57l9tZ77I0*eY*er!rMp4$^P9Skhcm5E*GMfzUYZv}3uLu(RS&+5Lkgx- zz(KpvnYd*>aC+Wpj$6YKuM#0g#n2Lqc3KoLFhPMq6G_pIxXmA&WsX`?PLnc6ai=LD z7U&d}7J4QP4UvhA3Tf?5b22q5zzJ7ph3+=VdKKTqbTO{C!YqZOa|(b{-4C8r2?oB$ zvxBo-&m+PWw?K14dtdgS3&*p(Y!Kr%W1!-NtVptl;Ye-p^n#x$hl-nWW&?%7BrGZ~ zQqd&g>#aj635?mVA z?2Xrn;-Lg)Ae!+qcH}Ol^Tu>>eY7kk1`CCb`f;5;p2NqA%CNFWKKg7{^MZiU48;~F zTG>H5U6ZB0rlMwe<_hg5UNraA;geF9K)a~Yl$a~n{NcZ|Fv~-&kXQI;z3=p@xwTqR zDZ{yH)ZCiO@>jWycO69+27WYgaU$lZ|H%5KW9QxNjn~?4^j`0cZSPVG>+WtUxiI^q z(8W+})Ao<{-sryG{j>ULV{dFzueQDMYUusY%JxomduMF>{`AE4Uv6?~MO!XSz32I{ zXQi@Lt!#}|?uixcx!c%sqxr+;n^U(upL_1eYPVb4f8f@{=M#5^)cxz8?^{hxvZxmC zcxV%vcHMA&=(-uX_15Qa-C0(9Wv%Dntbw(GuCsOUlib~Imo`Gc3C(*wx6Rq%Pi?N`)&qxa3?jzeO! zux_=q{6}wIeDktbEp32Z=N|gl^kGx9eN=1j{4DrM@b*!)efWV{)Eju*BoyKZW9^!3 z5}JEgn)=nI{#X+XJPq3R1{C)&OQ_j?#dod#hU>a3w!PzPsq@0fy_U8cuYdS@w9Bn^ z_1^0Fyys4X+U1T;$!gd0D0&xKT->}`Uj1Irk9)2)sO5V;?o-R#)$*Qu=w{caUD4iS zT5tcYH$Q*#&b-=tEIR#y+It)s+fJaXyH<;LtQ5P{Vpp_f`0L`4Z#M}wU29`TJI{$i z!RD3xIyJxUa^$Q0Care+)t2{LR%+YT+V)uOzGzkqoF zY`fa?B`?Jp(D|w$9~?e9h$)M>pV)U;LEahz^@gxDMj4vK6vZIPftXT$kFF#)FUUf ziK(bO^Yb^1JM#9tD56ncR&-+V^z@6jUi|5cs3AIiQk{HJJNkU|*h%&1i`tRzY4UNb z+#XDVk@}gftn>2KlkcDW$-vLHMe7g5N)BL6w0G(wp%(APYrXSo*9To6E%Q}zSnYZt z)^a@h;wiP|RIJVyo%O4Aa~H<$mTtYYKUUgstuc}WM(0oX|G=@R$7bnDzbJU8?n|opvy+Ew$cfmJjOQn9& z_8dED+jqf=7VUoav+_^Naa33Bp3(Y8?ri#EAEtHpIBgNN(4|k#SEV~>;%7dciS|vY zeIBiE==LjLlwm2hV>1=+_^NpK{g5bZ>lfD|BHt(+7E4v+pcHY~I}cwsg2g5wTBTnG zR1-8otRq=3?IJkA5UrRh*Cv}eyp~kIxnrIoj6Sv&IPw(<&u4{AEr6>bszUe<&B>Nd zD5(t2hR`Z!9Wjl=-a(>f&>DoQKV3)SC*>UZPfTr30_!HDR>YmvmCbji&ylFk%0v0n zuQ0(~fT?X_uV%1s2&xE%Rbb$072{Igjm|oqk8>k-lYb*f%?%eEQ`b zfJedH=}%ZIsV0oU^e5btY5En}%=#`G0DlU|5C1Y6qw)XD@2B-N!K^uE3J9C%32u+K z!2Rs*5Pr8Qun6Qo5Fz)Uz@p*qNI*I}s-6MH4zmNDNW1P=TfA_#0f?>3$s`>5acUkP zi2K9WWNIE27_LK^%0{vN$Qi#sDDBqWdf2&9ui~30F_4LyXiY$wR@RJ zKuP^w1tzBJk}I1);}DGaYCJdPgYqVo{}$!m%%!%J$Z*_@ax(jX#7kNKQY;LfSwDVx z20xjgOJ*Cy*I?O)8?j8`8B!(S2L`Iz)vETDsxGyvD^}GVwUw_nwQ#xM_J}rc479QN z1yQv%oOggC=aoa2TP-Su%VcFuw5Cn18H`m7tyCORD-Ojf#$iUdpC!QcvSRYfhK|dv zw_DWiqwgJ68#)jZt(e3Kn_at6g=%a5ReAIIL!5Jet#fXzsOlF*a5SlnmAZb?cGLFP zJ-U398{0D#o%Y7|cz;C2)~at8#AG9VH15<|+8*Y2BFR~Ci*@VTexbeNVfO2y zweJ7CW#I)}F*2iu8`S|rHe~xrmzCySj l!J1hV#rr0cXn9~0#Qbjr$2S7PynnVF%Mpve6)0pC|9_k 0: + # 使用自定义环境调度 + current_env = self.ENV_STABLE + for env_gen, env_type in self.environment_schedule: + if generation >= env_gen: + current_env = env_type + return current_env + else: + # 默认每10代切换 + cycle = generation // 10 + env_index = cycle % 3 + if env_index == 0: + new_env = self.ENV_STABLE + elif env_index == 1: + new_env = self.ENV_FAST + else: + new_env = self.ENV_DIVERSE + + # 环境切换日志 + if hasattr(self, 'last_environment') and self.last_environment != new_env: + print("[Generation {}] Environment switched to: {}".format(generation, new_env)) + self.last_environment = new_env + return new_env + + def dominates(self, individual_a, individual_b): + """ + 支配比较机制 + 如果个体a在所有目标上都不逊于个体b,且至少在一个目标上优于个体b,则a支配b + """ + # 目标权重,根据环境动态调整 + env = self.current_environment + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] # 优先fitness + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] # 优先time_cost + else: # ENV_DIVERSE + weights = [0.2, 0.2, 1.0] # 优先diversity_score + + # 检查是否所有目标都不逊于对方 + all_less_or_equal = True + has_strictly_better = False + + # 先检查是否为numpy数组 + is_a_numpy = isinstance(individual_a, numpy.ndarray) + is_b_numpy = isinstance(individual_b, numpy.ndarray) + + if is_a_numpy and is_b_numpy: + # 一维numpy数组比较,值越大越好 + return individual_a[0] > individual_b[0] + elif is_a_numpy or is_b_numpy: + # 混合类型比较 + if is_a_numpy: + # a是numpy数组 + return individual_a[0] > individual_b + else: + # b是numpy数组 + return individual_a > individual_b[0] + + # 检查是否为标量适应度值 + is_a_scalar = isinstance(individual_a, (int, float, numpy.number)) + is_b_scalar = isinstance(individual_b, (int, float, numpy.number)) + + if is_a_scalar and is_b_scalar: + # 标量适应度值直接比较,值越大越好 + return individual_a > individual_b + elif is_a_scalar or is_b_scalar: + # 混合类型比较,标量已经是综合得分 + if is_a_scalar: + # a是标量,计算b的综合得分 + b_fitness = individual_b["fitness"] * weights[0] + b_time = (1.0 / individual_b["time"]) * weights[1] if individual_b["time"] > 0 else float('inf') + b_diversity = individual_b["diversity"] * weights[2] + b_total = b_fitness + b_time + b_diversity + return individual_a > b_total + else: + # b是标量,计算a的综合得分 + a_fitness = individual_a["fitness"] * weights[0] + a_time = (1.0 / individual_a["time"]) * weights[1] if individual_a["time"] > 0 else float('inf') + a_diversity = individual_a["diversity"] * weights[2] + a_total = a_fitness + a_time + a_diversity + return a_total > individual_b + + # 三维目标比较: fitness_score(越大越好), time_cost(越小越好), diversity_score(越大越好) + # Fitness score comparison (higher is better) + a_fitness = individual_a["fitness"] * weights[0] + b_fitness = individual_b["fitness"] * weights[0] + if a_fitness < b_fitness: + all_less_or_equal = False + elif a_fitness > b_fitness: + has_strictly_better = True + + # Time cost comparison (lower is better) + a_time = (1.0 / individual_a["time"]) * weights[1] if individual_a["time"] > 0 else float('inf') + b_time = (1.0 / individual_b["time"]) * weights[1] if individual_b["time"] > 0 else float('inf') + if a_time < b_time: + all_less_or_equal = False + elif a_time > b_time: + has_strictly_better = True + + # Diversity score comparison (higher is better) + a_diversity = individual_a["diversity"] * weights[2] + b_diversity = individual_b["diversity"] * weights[2] + if a_diversity < b_diversity: + all_less_or_equal = False + elif a_diversity > b_diversity: + has_strictly_better = True + + return all_less_or_equal and has_strictly_better + + def calculate_pareto_front(self, population_fitness): + """ + 计算当前种群的Pareto最优集合 + """ + pareto_front = [] + + # 我们已经在dominates方法中处理了标量适应度值,不需要再转换格式 + formatted_fitness = population_fitness + + for i, ind_a in enumerate(formatted_fitness): + is_dominated = False + for j, ind_b in enumerate(formatted_fitness): + if i == j: + continue + if self.dominates(ind_b, ind_a): + is_dominated = True + break + if not is_dominated: + pareto_front.append(population_fitness[i]) + + return pareto_front + def round_genes(self, solutions): for gene_idx in range(self.num_genes): if self.gene_type_single: @@ -1557,7 +1709,23 @@ def cal_pop_fitness(self): # Check if batch processing is used. If not, then calculate this missing fitness value. if self.fitness_batch_size in [1, None]: fitness = self.fitness_func(self, sol, sol_idx) - if type(fitness) in GA.supported_int_float_types: + if isinstance(fitness, dict): + # Convert dictionary fitness to composite score + env = self.current_environment if hasattr(self, 'current_environment') else self.ENV_STABLE + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] + else: + weights = [0.2, 0.2, 1.0] + + # Calculate composite score + fit_val = fitness.get('fitness_score', fitness.get('fitness', 0)) + time_val = fitness.get('time_cost', fitness.get('time', 1)) + div_val = fitness.get('diversity_score', fitness.get('diversity', 0)) + + fitness = fit_val * weights[0] + (1.0 / time_val) * weights[1] + div_val * weights[2] + elif type(fitness) in GA.supported_int_float_types: # The fitness function returns a single numeric value. # This is a single-objective optimization problem. pass @@ -1597,7 +1765,23 @@ def cal_pop_fitness(self): raise ValueError(f"There is a mismatch between the number of solutions passed to the fitness function ({len(batch_indices)}) and the number of fitness values returned ({len(batch_fitness)}). They must match.") for index, fitness in zip(batch_indices, batch_fitness): - if type(fitness) in GA.supported_int_float_types: + if isinstance(fitness, dict): + # Convert dictionary fitness to composite score + env = self.current_environment if hasattr(self, 'current_environment') else self.ENV_STABLE + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] + else: + weights = [0.2, 0.2, 1.0] + + # Calculate composite score + fit_val = fitness.get('fitness_score', fitness.get('fitness', 0)) + time_val = fitness.get('time_cost', fitness.get('time', 1)) + div_val = fitness.get('diversity_score', fitness.get('diversity', 0)) + + pop_fitness[index] = fit_val * weights[0] + (1.0 / time_val) * weights[1] + div_val * weights[2] + elif type(fitness) in GA.supported_int_float_types: # The fitness function returns a single numeric value. # This is a single-objective optimization problem. pop_fitness[index] = fitness @@ -1668,7 +1852,23 @@ def cal_pop_fitness(self): # Check if batch processing is used. If not, then calculate the fitness value for individual solutions. if self.fitness_batch_size in [1, None]: for index, fitness in zip(solutions_to_submit_indices, executor.map(self.fitness_func, [self]*len(solutions_to_submit_indices), solutions_to_submit, solutions_to_submit_indices)): - if type(fitness) in GA.supported_int_float_types: + if isinstance(fitness, dict): + # Convert dictionary fitness to composite score + env = self.current_environment if hasattr(self, 'current_environment') else self.ENV_STABLE + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] + else: + weights = [0.2, 0.2, 1.0] + + # Calculate composite score + fit_val = fitness.get('fitness_score', fitness.get('fitness', 0)) + time_val = fitness.get('time_cost', fitness.get('time', 1)) + div_val = fitness.get('diversity_score', fitness.get('diversity', 0)) + + pop_fitness[index] = fit_val * weights[0] + (1.0 / time_val) * weights[1] + div_val * weights[2] + elif type(fitness) in GA.supported_int_float_types: # The fitness function returns a single numeric value. # This is a single-objective optimization problem. pop_fitness[index] = fitness @@ -1704,7 +1904,23 @@ def cal_pop_fitness(self): raise ValueError(f"There is a mismatch between the number of solutions passed to the fitness function ({len(batch_indices)}) and the number of fitness values returned ({len(batch_fitness)}). They must match.") for index, fitness in zip(batch_indices, batch_fitness): - if type(fitness) in GA.supported_int_float_types: + if isinstance(fitness, dict): + # Convert dictionary fitness to composite score + env = self.current_environment if hasattr(self, 'current_environment') else self.ENV_STABLE + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] + else: + weights = [0.2, 0.2, 1.0] + + # Calculate composite score + fit_val = fitness.get('fitness_score', fitness.get('fitness', 0)) + time_val = fitness.get('time_cost', fitness.get('time', 1)) + div_val = fitness.get('diversity_score', fitness.get('diversity', 0)) + + pop_fitness[index] = fit_val * weights[0] + (1.0 / time_val) * weights[1] + div_val * weights[2] + elif type(fitness) in GA.supported_int_float_types: # The fitness function returns a single numeric value. # This is a single-objective optimization problem. pop_fitness[index] = fitness @@ -1715,6 +1931,8 @@ def cal_pop_fitness(self): else: raise ValueError(f"The fitness function should return a number or an iterable (list, tuple, or numpy.ndarray) but the value ({fitness}) of type {type(fitness)} found.") + # 保留原始的标量适应度值,不转换为字典格式 + pop_fitness = numpy.array(pop_fitness) except Exception as ex: self.logger.exception(ex) @@ -1781,6 +1999,77 @@ def run(self): self.best_solutions.append(list(best_solution)) for generation in range(generation_first_idx, generation_last_idx): + # 更新当前环境状态 + self.current_environment = self.get_environment_state(generation) + + # 根据环境动态调整遗传算子参数 + original_crossover_rate = getattr(self, 'original_crossover_rate', 0.8) + original_mutation_rate = getattr(self, 'original_mutation_rate', 0.1) + + # 如果原始参数为None,使用默认值 + original_crossover_rate = original_crossover_rate if original_crossover_rate is not None else 0.8 + original_mutation_rate = original_mutation_rate if original_mutation_rate is not None else 0.1 + + if self.current_environment == self.ENV_FAST: + # 快速模式: 高交叉率,低变异率,快速选择 + if isinstance(original_crossover_rate, (int, float)): + self.crossover_rate = original_crossover_rate * 1.2 + else: + self.crossover_rate = original_crossover_rate + + if isinstance(original_mutation_rate, (int, float)): + self.mutation_rate = original_mutation_rate * 0.5 + else: + self.mutation_rate = original_mutation_rate + + self.parent_selection_type = getattr(self, 'original_selection_type', 'sss') if getattr(self, 'original_selection_type', 'sss') not in ['nsga2', 'tournament_nsga2'] else 'tournament' + elif self.current_environment == self.ENV_STABLE: + # 稳定模式: 默认参数,稳健选择 + self.crossover_rate = original_crossover_rate + self.mutation_rate = original_mutation_rate + self.parent_selection_type = getattr(self, 'original_selection_type', 'sss') + else: # ENV_DIVERSE + # 多样模式: 低交叉率,高变异率,基于多样性选择 + if isinstance(original_crossover_rate, (int, float)): + self.crossover_rate = original_crossover_rate * 0.7 + else: + self.crossover_rate = original_crossover_rate + + if isinstance(original_mutation_rate, (int, float)): + self.mutation_rate = original_mutation_rate * 2 + else: + self.mutation_rate = original_mutation_rate + + self.parent_selection_type = 'tournament_nsga2' + + # 计算Pareto前沿 + pareto_front = self.calculate_pareto_front(self.last_generation_fitness) + + # 每代输出Pareto前沿信息 + # 将numpy数组转换为原生Python类型 + serializable_pareto = [] + for fitness in pareto_front: + if isinstance(fitness, numpy.ndarray): + # 将numpy数组转换为Python列表 + serializable_pareto.append(fitness.tolist()) + elif isinstance(fitness, numpy.number): + # 将numpy标量转换为Python原生类型 + serializable_pareto.append(float(fitness)) + else: + # 其他类型直接保留 + serializable_pareto.append(fitness) + + pareto_output = { + "generation": generation, + "pareto_front": serializable_pareto + } + print("\n[Generation {}]".format(generation)) + print("Environment: {}".format(self.current_environment)) + print("Pareto front size: {}".format(len(pareto_front))) + import json + print("Pareto front: {}".format(json.dumps(pareto_output, indent=2))) + del serializable_pareto # 清理临时变量 + self.run_loop_head(best_solution_fitness) @@ -2226,15 +2515,38 @@ def best_solution(self, pop_fitness=None): else: raise ValueError(f"The type of the 'pop_fitness' parameter is expected to be list, tuple, or numpy.ndarray but ({type(pop_fitness)}) found.") + # Convert dictionary fitness values to scalar composite score + formatted_fitness = [] + for fitness in pop_fitness: + if isinstance(fitness, dict): + # Calculate composite score using environment weights + env = self.current_environment if hasattr(self, 'current_environment') else self.ENV_STABLE + if env == self.ENV_STABLE: + weights = [1.0, 0.3, 0.2] + elif env == self.ENV_FAST: + weights = [0.3, 1.0, 0.2] + else: + weights = [0.2, 0.2, 1.0] + + # Calculate composite score + fit_val = fitness.get('fitness_score', fitness.get('fitness', 0)) + time_val = fitness.get('time_cost', fitness.get('time', 1)) + div_val = fitness.get('diversity_score', fitness.get('diversity', 0)) + + composite = fit_val * weights[0] + (1.0 / time_val) * weights[1] + div_val * weights[2] + formatted_fitness.append(composite) + else: + formatted_fitness.append(fitness) + # Return the index of the best solution that has the best fitness value. # For multi-objective optimization: find the index of the solution with the maximum fitness in the first objective, # break ties using the second objective, then third, etc. - pop_fitness_arr = numpy.array(pop_fitness) + pop_fitness_arr = numpy.array(formatted_fitness) # Get the indices that would sort by all objectives in descending order if pop_fitness_arr.ndim == 1: # Single-objective optimization. best_match_idx = numpy.where( - pop_fitness == numpy.max(pop_fitness))[0][0] + formatted_fitness == numpy.max(formatted_fitness))[0][0] elif pop_fitness_arr.ndim == 2: # Multi-objective optimization. # Use NSGA-2 to sort the solutions using the fitness. diff --git a/pygad/utils/__pycache__/__init__.cpython-313.pyc b/pygad/utils/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1cce1dbc31cbfa3e9b7769752b2c6762756ba36c GIT binary patch literal 361 zcmXw#%}T^D6or%ijHBa-8^w(}7z`j5x;_i@BVCkPa=%;RJIaBu_OLIeP3`YUxyZS>y(kTa@>;TNusyPS$ra&Xrb<^JG~!!}HQ)RUt26 f6Kg0QyNmK0Qc7EL*ph>mOj@%4wYBp)0{_E*YmZ^T literal 0 HcmV?d00001 diff --git a/pygad/utils/__pycache__/crossover.cpython-313.pyc b/pygad/utils/__pycache__/crossover.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d19d30f819956cdde254dc69b8028eb53a86794 GIT binary patch literal 11524 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 literal 0 HcmV?d00001 diff --git a/pygad/utils/__pycache__/nsga2.cpython-313.pyc b/pygad/utils/__pycache__/nsga2.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9737ea8e07c001ac519392e7026edcde1ec74336 GIT binary patch literal 10629 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 NkelwgMPW)h_&=V~82SJJ literal 0 HcmV?d00001 diff --git a/pygad/visualize/__pycache__/__init__.cpython-313.pyc b/pygad/visualize/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78891469a5ca212bf3145843cad64952560e5bb5 GIT binary patch literal 263 zcmey&%ge<81REtRGtGhYV-N=hn4pZ$B0$DehG2$ZMsEf$#v(=qhG3>5rgUaamX{zU znvAzt3UcyGs#p#64D}5BG?{Pl7gVMvrs$Pr7MCXGWLBjXF$2}z;*O6mOD!tS%+HID zU&-(pr1w^oerPdJOur%}S>Gi;ximL5ucTN%C9xz?zoaNJH9k2nJ~16ArthAbms*mU z?3k0DUzAyrksDB1l98XM54K1jZjpX`d}dx|NqoFsLFFwDo80`A(wtPgB2J)Hj6ht> Y3nV@;Gcq#XWl(s)C)&te#10ez0PJo_Jpcdz literal 0 HcmV?d00001 diff --git a/pygad/visualize/__pycache__/plot.cpython-313.pyc b/pygad/visualize/__pycache__/plot.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5578e6d83b1558d15e056c8ffaafeee3d9f2cf0 GIT binary patch literal 22531 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 literal 0 HcmV?d00001 diff --git a/test_multi_objective.py b/test_multi_objective.py new file mode 100644 index 0000000..40de8e7 --- /dev/null +++ b/test_multi_objective.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +import pygad +import numpy +import time + +def fitness_func(ga_instance, solution, solution_idx): + # Simple test fitness function + fitness_score = numpy.sum(solution * numpy.array([0.2, 0.3, 0.3, 0.2])) + # Simulate time cost + time_cost = numpy.sum(solution) * 0.1 + # Simulate diversity score + diversity_score = numpy.random.uniform(0, 1) + + # Return a composite fitness score for compatibility with existing GA implementation + # You can adjust the weights based on your priorities + composite_score = fitness_score + diversity_score - time_cost + return composite_score + +ga_instance = pygad.GA(num_generations=30, + num_parents_mating=4, + fitness_func=fitness_func, + sol_per_pop=8, + num_genes=4, + parent_selection_type="sss", + crossover_type="single_point", + mutation_type="random", + mutation_percent_genes=10) + +ga_instance.run() + +# 打印最终结果 +solution, solution_fitness, solution_idx = ga_instance.best_solution() +print("\nFinal solution:", solution) +print("\nFinal solution fitness:", solution_fitness) + +# 输出最后一代的Pareto前沿 +final_pareto = ga_instance.calculate_pareto_front(ga_instance.last_generation_fitness) +print("\nFinal Pareto front size: {}".format(len(final_pareto))) diff --git a/tests/__pycache__/test_adaptive_mutation.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_adaptive_mutation.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3809a0df21d33681ee922ef1346fb9df77491f5 GIT binary patch literal 97191 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_allow_duplicate_genes.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_allow_duplicate_genes.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8530896fa2548dbd32e77dfcf7ad3c80ae7cc484 GIT binary patch literal 27816 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 Nq0FN$L2Bk4{y&K_;|u@* literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_crossover_mutation.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_crossover_mutation.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..452b1cb7084071a08819562482ddaf4ae443dc02 GIT binary patch literal 22005 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 MA8r(+b%gW&7dUZ1q5uE@ literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_gene_constraint.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_gene_constraint.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..574bd55a88af62c9c32d785bedede3e5acc49bc8 GIT binary patch literal 42694 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 kJ@d?7h3%bZ`V@BWJhM+>kIpks0{g>h7wV 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_gene_type.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_gene_type.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52c58213cfbdd9969dcb1deebb5d639e06a2fa38 GIT binary patch literal 10031 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_lifecycle_callbacks_calls.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_lifecycle_callbacks_calls.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..565b8fd2081dea408cc9f2fb480994205cea1be2 GIT binary patch literal 15114 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_number_fitness_function_calls.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_number_fitness_function_calls.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9bfce58807b907621f7b2d678ae31b35eb42a44 GIT binary patch literal 46645 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 aBO&f+YVv4^>xZ-7>bQ2w$Z!?ZtNDL6Pd#V= literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_save_solutions.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_save_solutions.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..335d90384613f5f430f0d5135267fac5428a7e10 GIT binary patch literal 204266 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_stop_criteria.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_stop_criteria.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f44e4b5859e89fdfc17b744903f936c153b3be17 GIT binary patch literal 9322 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_stop_criteria.cpython-313.pyc b/tests/__pycache__/test_stop_criteria.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2252836bb0247d2152a4e8987abb879da7c2cf5c GIT binary patch literal 9209 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 0, "Pareto fronts should not be empty" + +def test_three_dimensional_multi_objective(): + """ + Test multi-objective optimization with three-dimensional fitness vectors + to verify proper Pareto front calculation for higher-dimensional problems. + """ + def fitness_func(ga_instance, solution, solution_idx): + # Three objectives: + # 1. Maximize sum of solution + # 2. Minimize L2 norm + # 3. Maximize product of non-zero elements + sum_obj = np.sum(solution) + norm_obj = -np.sqrt(np.sum(solution**2)) + product_obj = np.prod(solution[solution != 0]) if np.any(solution != 0) else 0 + return [sum_obj, norm_obj, product_obj] + + ga_instance = pygad.GA( + num_generations=10, + num_parents_mating=5, + fitness_func=fitness_func, + sol_per_pop=20, + num_genes=5, + parent_selection_type="nsga2", + crossover_probability=0.8, + mutation_probability=0.1 + ) + + # Run for a few generations + ga_instance.run() + + # Verify Pareto front was calculated correctly for 3 objectives + assert hasattr(ga_instance, 'pareto_fronts'), "Pareto fronts attribute should exist" + assert len(ga_instance.pareto_fronts) > 0, "Pareto fronts should not be empty" + + # Check that each solution in the Pareto front has 3 objectives + for front in ga_instance.pareto_fronts: + for solution in front: + if len(solution) >= 2: + # solution array contains [solution_idx, fitness_values] + fitness = solution[1] + assert len(fitness) == 3, "3-objective fitness expected" + +if __name__ == "__main__": + test_environment_switch_pattern() + print("✓ test_environment_switch_pattern passed") + + test_environment_parameters_adjustment() + print("✓ test_environment_parameters_adjustment passed") + + test_sequence_parameters_in_adaptive_mutation() + print("✓ test_sequence_parameters_in_adaptive_mutation passed") + + test_multi_objective_environment_switch() + print("✓ test_multi_objective_environment_switch passed") + + test_three_dimensional_multi_objective() + print("✓ test_three_dimensional_multi_objective passed") + + print("\nAll tests passed!") \ No newline at end of file