summaryrefslogtreecommitdiffstats
path: root/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java
diff options
context:
space:
mode:
Diffstat (limited to 'nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java')
-rw-r--r--nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java91
1 files changed, 91 insertions, 0 deletions
diff --git a/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java
new file mode 100644
index 000000000..284549506
--- /dev/null
+++ b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/goodness/ACRComparator.java
@@ -0,0 +1,91 @@
+/**
+ * Description: For comparison of goodness in landscape with loosed constraints
+ * which varied adaptively according to the social information.
+ *
+ * Applied domain: efficiently for ridge class feasible space (SF), such as
+ * the problem with equality constraints
+ *
+ * Author Create/Modi Note
+ * Xiaofeng Xie Jun 24, 2003 Created
+ * Xiaofeng Xie May 11, 2004
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * Please acknowledge the author(s) if you use this code in any way.
+ *
+ * @version 1.0
+ * @Since MAOS1.2
+ *
+ * [1] Xie X F, Zhang W J, Bi D C. Handling equality constraints by adaptive
+ * relaxing rule for swarm algorithms. Congress on Evolutionary Computation,
+ * Oregon, USA, 2004
+ */
+
+package net.adaptivebox.goodness;
+
+import net.adaptivebox.global.IUpdateCycleEngine;
+import net.adaptivebox.knowledge.Library;
+
+public class ACRComparator implements IGoodnessCompareEngine, IUpdateCycleEngine {
+ private final Library socialPool;
+ private double epsilon_t = 0;
+
+ private static final double RU = 0.75;
+ private static final double RL = 0.25;
+ private static final double BETAF = 0.618;
+ private static final double BETAL = 0.618;
+ private static final double BETAU = 1.382;
+
+ private final double T;
+
+ private static final double TthR = 0.5;
+
+ public ACRComparator(Library lib, int T) {
+ socialPool = lib;
+ this.T = T;
+
+ // set the (epsilon_t|t=0) as the maximum CONS value among the SearchPoints in the library
+ epsilon_t = lib.getExtremalVcon(true);
+ }
+
+ private static int compare(double data1, double data2) {
+ if (data1 < data2)
+ return LESS_THAN;
+ else if (data1 > data2)
+ return LARGER_THAN;
+ else
+ return EQUAL_TO;
+ }
+
+ public int compare(double[] fit1, double[] fit2) {
+ if (Math.max(fit1[0], fit2[0]) <= Math.max(0, epsilon_t)) { // epsilon>0
+ return compare(fit1[1], fit2[1]);
+ } else {
+ return compare(fit1[0], fit2[0]);
+ }
+ }
+
+ public void updateCycle(int t) {
+ // calculates the ratio
+ double rn = (double) socialPool.getVconThanNum(epsilon_t) / (double) socialPool.getPopSize();
+
+ if (t > TthR * T && T != -1) { // Forcing sub-rule
+ epsilon_t *= BETAF;
+ } else { // Ratio-keeping sub-rules
+ if (rn > RU) {
+ epsilon_t *= BETAL; // Shrink
+ }
+ if (rn < RL) {
+ epsilon_t *= BETAU; // Relax
+ }
+ }
+ }
+}