diff defical-sharp/libsemtd/ga.cs @ 0:ebed2bd0d300

Initial import from svn. History be damned.
author Edho P. Arief <me@myconan.net>
date Fri, 02 Apr 2010 23:11:57 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defical-sharp/libsemtd/ga.cs	Fri Apr 02 23:11:57 2010 +0700
@@ -0,0 +1,108 @@
+/*using System;
+
+namespace libsemtd
+{
+    public partial class Semtd
+    {
+        private void ga_LabelRemoveVer(int posVer) { this.labelVer[posVer] = 0; }
+        private void ga_LabelSetVer(int posVer, int labelVer) { this.labelVer[posVer] = labelVer; }
+        private double ga_ScoreAlgorithm(int start, int end, params int[] numbers)
+        {
+            //STANDARD DEVIATION
+            double mean = 0;
+            double nstdev = 0;
+            int numData = end - start + 1;
+            foreach (double num in numbers)
+            {
+                mean += num;
+            }
+            mean /= numData;
+            for (int i = start; i <= end; i++)
+            {
+                nstdev += Math.Pow((numbers[i] - mean), 2);
+            }
+            return Math.Sqrt(nstdev / numData);
+        }
+        private double ga_SemtScore()
+        {
+            if (this.scoreCache > -1) { return scoreCache; }
+            if (this.IsSemt()) { return 0; }
+            int rangeDelta = this.numEdges - this.labelRangeEdge();
+            int upperBound = this.labelEdgeAbsoluteMax;
+            int edgeTempMax = this.labelEdgeMax;
+            int edgeTempMin = this.labelEdgeMin;
+            int[] edgeTempLabels = new int[upperBound + 1];
+            if (rangeDelta > 0)
+            {
+                if ((edgeTempMax + rangeDelta) > upperBound)
+                {
+                    edgeTempMax = upperBound;
+                    edgeTempMin -= upperBound - edgeTempMax;
+                }
+                else
+                {
+                    edgeTempMax += rangeDelta;
+                }
+            }
+            for (int i = 0; i < upperBound; i++)
+            {
+                edgeTempLabels[i] = this.labelEdgesUsed[i];
+            }
+            this.scoreCache = ga_ScoreAlgorithm(edgeTempMin, edgeTempMax, edgeTempLabels);
+            return scoreCache;
+        }
+        private void ga_FixLabel()
+        {
+            bool[] labelVerUsed = new bool[this.numVerTotal+ 1];
+            bool[] verPassed = new bool[this.numVerMain + 1];
+            for (int i = 0; i < this.numVerMain; i++)
+            {
+                if (!labelVerUsed[this.labelVer[i]])
+                {
+                    labelVerUsed[this.labelVer[i]] = true;
+                    verPassed[i] = true;
+                }
+            }
+            for (int i = 0; i < this.numVerMain; i++)
+            {
+                if (!verPassed[i])
+                {
+                    for (int nextLabel = 0; nextLabel < this.numVerMain; nextLabel++)
+                    {
+                        if (!labelVerUsed[nextLabel])
+                        {
+                            this.labelVer[i] = nextLabel;
+                            verPassed[i] = true;
+                            labelVerUsed[nextLabel] = true;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        private void ga_SwapLabel()
+        {
+            Random random = new Random();
+            int verA, verB, labelVerTemp;
+            verA = random.Next(this.numVerMain);
+            verB = verA;
+            while (verA == verB)
+            {
+                verB = random.Next(1, this.numVerMain);
+            }
+            labelVerTemp = this.labelVer[verA];
+            this.labelSetVer(verA, this.labelVer[verB]);
+            this.labelSetVer(verB, labelVerTemp);
+        }
+        private bool ga_IsSemt()
+        {
+            int[] labelVerTemp = new int[this.numVerMain];
+            for(int i=0;i<this.numVerMain;i++)
+                labelVerTemp[i] = this.labelVer[i];
+            labelReset();
+            for (int i = 0; i < this.numVerMain; i++)
+                labelSetVer(i, labelVerTemp[i]);
+            return isSemt();
+        }
+    }
+}*/