Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/30/11 18:07:32 (13 years ago)
Author:
abeham
Message:

#1465, #1469, #1470, #1494, #1496, #1497, #1539, #1487

  • merged to trunk
Location:
trunk/sources
Files:
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab.Analysis

  • trunk/sources/HeuristicLab.Analysis/3.3/DataVisualization/DataRowVisualProperties.cs

    r5445 r6342  
    3636      Columns,
    3737      Points,
    38       Bars
     38      Bars,
     39      Histogram
     40    }
     41    #endregion
     42    #region LineStyle
     43    public enum DataRowLineStyle {
     44      Dash,
     45      DashDot,
     46      DashDotDot,
     47      Dot,
     48      NotSet,
     49      Solid
    3950    }
    4051    #endregion
     
    6071      }
    6172    }
     73    private bool secondXAxis;
     74    public bool SecondXAxis {
     75      get { return secondXAxis; }
     76      set {
     77        if (secondXAxis != value) {
     78          secondXAxis = value;
     79          OnPropertyChanged("SecondXAxis");
     80        }
     81      }
     82    }
    6283    private Color color;
    6384    public Color Color {
     
    7091      }
    7192    }
     93    private DataRowLineStyle lineStyle;
     94    public DataRowLineStyle LineStyle {
     95      get { return lineStyle; }
     96      set {
     97        if (lineStyle != value) {
     98          lineStyle = value;
     99          OnPropertyChanged("LineStyle");
     100        }
     101      }
     102    }
    72103    private bool startIndexZero;
    73104    public bool StartIndexZero {
     
    77108          startIndexZero = value;
    78109          OnPropertyChanged("StartIndexZero");
     110        }
     111      }
     112    }
     113    private int lineWidth;
     114    public int LineWidth {
     115      get { return lineWidth; }
     116      set {
     117        if (lineWidth != value) {
     118          lineWidth = value;
     119          OnPropertyChanged("LineWidth");
     120        }
     121      }
     122    }
     123    private int bins;
     124    public int Bins {
     125      get { return bins; }
     126      set {
     127        if (bins != value) {
     128          bins = value;
     129          OnPropertyChanged("Bins");
     130        }
     131      }
     132    }
     133    private bool exactBins;
     134    public bool ExactBins {
     135      get { return exactBins; }
     136      set {
     137        if (exactBins != value) {
     138          exactBins = value;
     139          OnPropertyChanged("ExactBins");
    79140        }
    80141      }
     
    92153      set { secondYAxis = value; }
    93154    }
     155    [Storable(Name = "SecondXAxis")]
     156    private bool StorableSecondXAxis {
     157      get { return secondXAxis; }
     158      set { secondXAxis = value; }
     159    }
    94160    [Storable(Name = "Color")]
    95161    private Color StorableColor {
     
    97163      set { color = value; }
    98164    }
     165    [Storable(Name = "LineStyle")]
     166    private DataRowLineStyle StorableLineStyle {
     167      get { return lineStyle; }
     168      set { lineStyle = value; }
     169    }
    99170    [Storable(Name = "StartIndexZero")]
    100171    private bool StorableStartIndexZero {
    101172      get { return startIndexZero; }
    102173      set { startIndexZero = value; }
     174    }
     175    [Storable(Name = "LineWidth")]
     176    private int StorableLineWidth {
     177      get { return lineWidth; }
     178      set { lineWidth = value; }
     179    }
     180    [Storable(Name = "Bins")]
     181    private int StorableBins {
     182      get { return bins; }
     183      set { bins = value; }
     184    }
     185    [Storable(Name = "ExactBins")]
     186    private bool StorableExactBins {
     187      get { return exactBins; }
     188      set { exactBins = value; }
    103189    }
    104190    #endregion
     
    110196      this.chartType = original.chartType;
    111197      this.secondYAxis = original.secondYAxis;
     198      this.secondXAxis = original.secondXAxis;
    112199      this.color = original.color;
     200      this.lineStyle = original.lineStyle;
    113201      this.startIndexZero = original.startIndexZero;
     202      this.lineWidth = original.lineWidth;
     203      this.bins = original.bins;
     204      this.exactBins = original.exactBins;
    114205    }
    115206    public DataRowVisualProperties() {
    116207      chartType = DataRowChartType.Line;
    117208      secondYAxis = false;
     209      secondXAxis = false;
    118210      color = Color.Empty;
     211      lineStyle = DataRowLineStyle.Solid;
    119212      startIndexZero = false;
     213      lineWidth = 1;
     214      bins = 10;
     215      exactBins = false;
    120216    }
    121217
  • trunk/sources/HeuristicLab.Analysis/3.3/DataVisualization/DataTableVisualProperties.cs

    r5445 r6342  
    2121
    2222using System.ComponentModel;
     23using System.Drawing;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3031  [StorableClass]
    3132  public class DataTableVisualProperties : DeepCloneable, INotifyPropertyChanged {
     33    private Font titleFont;
     34    public Font TitleFont {
     35      get { return titleFont; }
     36      set {
     37        if (titleFont == null || value == null
     38          || titleFont.Name != value.Name || titleFont.Size != value.Size || titleFont.Style != value.Style) {
     39          titleFont = value;
     40          OnPropertyChanged("TitleFont");
     41        }
     42      }
     43    }
     44    private Color titleColor;
     45    public Color TitleColor {
     46      get { return titleColor; }
     47      set {
     48        if (titleColor != value) {
     49          titleColor = value;
     50          OnPropertyChanged("TitleFontColor");
     51        }
     52      }
     53    }
     54    private Font axisTitleFont;
     55    public Font AxisTitleFont {
     56      get { return axisTitleFont; }
     57      set {
     58        if (axisTitleFont == null || axisTitleFont == null
     59          || axisTitleFont.Name != value.Name || axisTitleFont.Size != value.Size || axisTitleFont.Style != value.Style) {
     60          axisTitleFont = value;
     61          OnPropertyChanged("AxisTitleFont");
     62        }
     63      }
     64    }
     65    private Color axisTitleColor;
     66    public Color AxisTitleColor {
     67      get { return axisTitleColor; }
     68      set {
     69        if (axisTitleColor != value) {
     70          axisTitleColor = value;
     71          OnPropertyChanged("AxisTitleColor");
     72        }
     73      }
     74    }
    3275    private string xAxisTitle;
    3376    public string XAxisTitle {
     
    5497    }
    5598
     99    private string secondXAxisTitle;
     100    public string SecondXAxisTitle {
     101      get { return secondXAxisTitle; }
     102      set {
     103        if (value == null) value = string.Empty;
     104        if (secondXAxisTitle != value) {
     105          secondXAxisTitle = value;
     106          OnPropertyChanged("SecondXAxisTitle");
     107        }
     108      }
     109    }
     110
    56111    private string secondYAxisTitle;
    57112    public string SecondYAxisTitle {
     
    66121    }
    67122
     123    private bool xAxisMinimumAuto;
     124    public bool XAxisMinimumAuto {
     125      get { return xAxisMinimumAuto; }
     126      set {
     127        if (xAxisMinimumAuto != value) {
     128          xAxisMinimumAuto = value;
     129          if (value) xAxisMinimumFixedValue = double.NaN;
     130          OnPropertyChanged("XAxisMinimumAuto");
     131        }
     132      }
     133    }
     134
     135    private bool xAxisMaximumAuto;
     136    public bool XAxisMaximumAuto {
     137      get { return xAxisMaximumAuto; }
     138      set {
     139        if (xAxisMaximumAuto != value) {
     140          xAxisMaximumAuto = value;
     141          if (value) xAxisMaximumFixedValue = double.NaN;
     142          OnPropertyChanged("XAxisMaximumAuto");
     143        }
     144      }
     145    }
     146
     147    private double xAxisMinimumFixedValue;
     148    public double XAxisMinimumFixedValue {
     149      get { return xAxisMinimumFixedValue; }
     150      set {
     151        if (xAxisMinimumFixedValue != value) {
     152          xAxisMinimumFixedValue = value;
     153          OnPropertyChanged("XAxisMinimumFixedValue");
     154        }
     155      }
     156    }
     157
     158    private double xAxisMaximumFixedValue;
     159    public double XAxisMaximumFixedValue {
     160      get { return xAxisMaximumFixedValue; }
     161      set {
     162        if (xAxisMaximumFixedValue != value) {
     163          xAxisMaximumFixedValue = value;
     164          OnPropertyChanged("XAxisMaximumFixedValue");
     165        }
     166      }
     167    }
     168
     169    private bool secondXAxisMinimumAuto;
     170    public bool SecondXAxisMinimumAuto {
     171      get { return secondXAxisMinimumAuto; }
     172      set {
     173        if (secondXAxisMinimumAuto != value) {
     174          secondXAxisMinimumAuto = value;
     175          if (value) secondXAxisMinimumFixedValue = double.NaN;
     176          OnPropertyChanged("SecondXAxisMinimumAuto");
     177        }
     178      }
     179    }
     180
     181    private bool secondXAxisMaximumAuto;
     182    public bool SecondXAxisMaximumAuto {
     183      get { return secondXAxisMaximumAuto; }
     184      set {
     185        if (secondXAxisMaximumAuto != value) {
     186          secondXAxisMaximumAuto = value;
     187          if (value) secondXAxisMaximumFixedValue = double.NaN;
     188          OnPropertyChanged("SecondXAxisMaximumAuto");
     189        }
     190      }
     191    }
     192
     193    private double secondXAxisMinimumFixedValue;
     194    public double SecondXAxisMinimumFixedValue {
     195      get { return secondXAxisMinimumFixedValue; }
     196      set {
     197        if (secondXAxisMinimumFixedValue != value) {
     198          secondXAxisMinimumFixedValue = value;
     199          OnPropertyChanged("SecondXAxisMinimumFixedValue");
     200        }
     201      }
     202    }
     203
     204    private double secondXAxisMaximumFixedValue;
     205    public double SecondXAxisMaximumFixedValue {
     206      get { return secondXAxisMaximumFixedValue; }
     207      set {
     208        if (secondXAxisMaximumFixedValue != value) {
     209          secondXAxisMaximumFixedValue = value;
     210          OnPropertyChanged("SecondXAxisMaximumFixedValue");
     211        }
     212      }
     213    }
     214
     215    private bool yAxisMinimumAuto;
     216    public bool YAxisMinimumAuto {
     217      get { return yAxisMinimumAuto; }
     218      set {
     219        if (yAxisMinimumAuto != value) {
     220          yAxisMinimumAuto = value;
     221          if (value) yAxisMinimumFixedValue = double.NaN;
     222          OnPropertyChanged("YAxisMinimumAuto");
     223        }
     224      }
     225    }
     226
     227    private bool yAxisMaximumAuto;
     228    public bool YAxisMaximumAuto {
     229      get { return yAxisMaximumAuto; }
     230      set {
     231        if (yAxisMaximumAuto != value) {
     232          yAxisMaximumAuto = value;
     233          if (value) yAxisMaximumFixedValue = double.NaN;
     234          OnPropertyChanged("YAxisMaximumAuto");
     235        }
     236      }
     237    }
     238
     239    private double yAxisMinimumFixedValue;
     240    public double YAxisMinimumFixedValue {
     241      get { return yAxisMinimumFixedValue; }
     242      set {
     243        if (yAxisMinimumFixedValue != value) {
     244          yAxisMinimumFixedValue = value;
     245          OnPropertyChanged("YAxisMinimumFixedValue");
     246        }
     247      }
     248    }
     249
     250    private double yAxisMaximumFixedValue;
     251    public double YAxisMaximumFixedValue {
     252      get { return yAxisMaximumFixedValue; }
     253      set {
     254        if (yAxisMaximumFixedValue != value) {
     255          yAxisMaximumFixedValue = value;
     256          OnPropertyChanged("YAxisMaximumFixedValue");
     257        }
     258      }
     259    }
     260
     261    private bool secondYAxisMinimumAuto;
     262    public bool SecondYAxisMinimumAuto {
     263      get { return secondYAxisMinimumAuto; }
     264      set {
     265        if (secondYAxisMinimumAuto != value) {
     266          secondYAxisMinimumAuto = value;
     267          if (value) secondYAxisMinimumFixedValue = double.NaN;
     268          OnPropertyChanged("SecondYAxisMinimumAuto");
     269        }
     270      }
     271    }
     272
     273    private bool secondYAxisMaximumAuto;
     274    public bool SecondYAxisMaximumAuto {
     275      get { return secondYAxisMaximumAuto; }
     276      set {
     277        if (secondYAxisMaximumAuto != value) {
     278          secondYAxisMaximumAuto = value;
     279          if (value) secondYAxisMaximumFixedValue = double.NaN;
     280          OnPropertyChanged("SecondYAxisMaximumAuto");
     281        }
     282      }
     283    }
     284
     285    private double secondYAxisMinimumFixedValue;
     286    public double SecondYAxisMinimumFixedValue {
     287      get { return secondYAxisMinimumFixedValue; }
     288      set {
     289        if (secondYAxisMinimumFixedValue != value) {
     290          secondYAxisMinimumFixedValue = value;
     291          OnPropertyChanged("SecondYAxisMinimumFixedValue");
     292        }
     293      }
     294    }
     295
     296    private double secondYAxisMaximumFixedValue;
     297    public double SecondYAxisMaximumFixedValue {
     298      get { return secondYAxisMaximumFixedValue; }
     299      set {
     300        if (secondYAxisMaximumFixedValue != value) {
     301          secondYAxisMaximumFixedValue = value;
     302          OnPropertyChanged("SecondYAxisMaximumFixedValue");
     303        }
     304      }
     305    }
     306
    68307    #region Persistence Properties
     308    [Storable(Name = "TitleFont")]
     309    private Font StorableTitleFont {
     310      get { return titleFont; }
     311      set { titleFont = value; }
     312    }
     313    [Storable(Name = "TitleColor")]
     314    private Color StorableTitleColor {
     315      get { return titleColor; }
     316      set { titleColor = value; }
     317    }
     318    [Storable(Name = "AxisTitleFont")]
     319    private Font StorableAxisTitleFont {
     320      get { return axisTitleFont; }
     321      set { axisTitleFont = value; }
     322    }
     323    [Storable(Name = "AxisTitleColor")]
     324    private Color StorableAxisTitleColor {
     325      get { return axisTitleColor; }
     326      set { axisTitleColor = value; }
     327    }
    69328    [Storable(Name = "XAxisTitle")]
    70329    private string StorableXAxisTitle {
     
    77336      set { yAxisTitle = value; }
    78337    }
     338    [Storable(Name = "SecondXAxisTitle")]
     339    private string StorableSecondXAxisTitle {
     340      get { return secondXAxisTitle; }
     341      set { secondXAxisTitle = value; }
     342    }
    79343    [Storable(Name = "SecondYAxisTitle")]
    80344    private string StorableSecondYAxisTitle {
     
    82346      set { secondYAxisTitle = value; }
    83347    }
     348    [Storable(Name = "XAxisMinimumAuto")]
     349    private bool StorableXAxisMinimumAuto {
     350      get { return xAxisMinimumAuto; }
     351      set { xAxisMinimumAuto = value; }
     352    }
     353    [Storable(Name = "XAxisMaximumAuto")]
     354    private bool StorableXAxisMaximumAuto {
     355      get { return xAxisMaximumAuto; }
     356      set { xAxisMaximumAuto = value; }
     357    }
     358    [Storable(Name = "XAxisMinimumFixedValue")]
     359    private double StorableXAxisMinimumFixedValue {
     360      get { return xAxisMinimumFixedValue; }
     361      set { xAxisMinimumFixedValue = value; }
     362    }
     363    [Storable(Name = "XAxisMaximumFixedValue")]
     364    private double StorableXAxisMaximumFixedValue {
     365      get { return xAxisMaximumFixedValue; }
     366      set { xAxisMaximumFixedValue = value; }
     367    }
     368    [Storable(Name = "SecondXAxisMinimumAuto")]
     369    private bool StorableSecondXAxisMinimumAuto {
     370      get { return secondXAxisMinimumAuto; }
     371      set { secondXAxisMinimumAuto = value; }
     372    }
     373    [Storable(Name = "SecondXAxisMaximumAuto")]
     374    private bool StorableSecondXAxisMaximumAuto {
     375      get { return secondXAxisMaximumAuto; }
     376      set { secondXAxisMaximumAuto = value; }
     377    }
     378    [Storable(Name = "SecondXAxisMinimumFixedValue")]
     379    private double StorableSecondXAxisMinimumFixedValue {
     380      get { return secondXAxisMinimumFixedValue; }
     381      set { secondXAxisMinimumFixedValue = value; }
     382    }
     383    [Storable(Name = "SecondXAxisMaximumFixedValue")]
     384    private double StorableSecondXAxisMaximumFixedValue {
     385      get { return secondXAxisMaximumFixedValue; }
     386      set { secondXAxisMaximumFixedValue = value; }
     387    }
     388    [Storable(Name = "YAxisMinimumAuto")]
     389    private bool StorableYAxisMinimumAuto {
     390      get { return yAxisMinimumAuto; }
     391      set { yAxisMinimumAuto = value; }
     392    }
     393    [Storable(Name = "YAxisMaximumAuto")]
     394    private bool StorableYAxisMaximumAuto {
     395      get { return yAxisMaximumAuto; }
     396      set { yAxisMaximumAuto = value; }
     397    }
     398    [Storable(Name = "YAxisMinimumFixedValue")]
     399    private double StorableYAxisMinimumFixedValue {
     400      get { return yAxisMinimumFixedValue; }
     401      set { yAxisMinimumFixedValue = value; }
     402    }
     403    [Storable(Name = "YAxisMaximumFixedValue")]
     404    private double StorableYAxisMaximumFixedValue {
     405      get { return yAxisMaximumFixedValue; }
     406      set { yAxisMaximumFixedValue = value; }
     407    }
     408    [Storable(Name = "SecondYAxisMinimumAuto")]
     409    private bool StorableSecondYAxisMinimumAuto {
     410      get { return secondYAxisMinimumAuto; }
     411      set { secondYAxisMinimumAuto = value; }
     412    }
     413    [Storable(Name = "SecondYAxisMaximumAuto")]
     414    private bool StorableSecondYAxisMaximumAuto {
     415      get { return secondYAxisMaximumAuto; }
     416      set { secondYAxisMaximumAuto = value; }
     417    }
     418    [Storable(Name = "SecondYAxisMinimumFixedValue")]
     419    private double StorableSecondYAxisMinimumFixedValue {
     420      get { return secondYAxisMinimumFixedValue; }
     421      set { secondYAxisMinimumFixedValue = value; }
     422    }
     423    [Storable(Name = "SecondYAxisMaximumFixedValue")]
     424    private double StorableSecondYAxisMaximumFixedValue {
     425      get { return secondYAxisMaximumFixedValue; }
     426      set { secondYAxisMaximumFixedValue = value; }
     427    }
    84428    #endregion
    85429
     
    88432    protected DataTableVisualProperties(DataTableVisualProperties original, Cloner cloner)
    89433      : base(original, cloner) {
     434      if (original.titleFont != null)
     435        this.titleFont = (Font)original.titleFont.Clone();
     436      if (original.axisTitleFont != null)
     437        this.axisTitleFont = (Font)original.axisTitleFont.Clone();
    90438      this.xAxisTitle = original.xAxisTitle;
    91439      this.yAxisTitle = original.yAxisTitle;
     440      this.secondXAxisTitle = original.secondXAxisTitle;
    92441      this.secondYAxisTitle = original.secondYAxisTitle;
     442      this.xAxisMinimumAuto = original.xAxisMinimumAuto;
     443      this.xAxisMinimumFixedValue = original.xAxisMinimumFixedValue;
     444      this.xAxisMaximumAuto = original.xAxisMaximumAuto;
     445      this.xAxisMaximumFixedValue = original.xAxisMaximumFixedValue;
     446      this.secondXAxisMinimumAuto = original.secondXAxisMinimumAuto;
     447      this.secondXAxisMinimumFixedValue = original.secondXAxisMinimumFixedValue;
     448      this.secondXAxisMaximumAuto = original.secondXAxisMaximumAuto;
     449      this.secondXAxisMaximumFixedValue = original.secondXAxisMaximumFixedValue;
     450      this.yAxisMinimumAuto = original.yAxisMinimumAuto;
     451      this.yAxisMinimumFixedValue = original.yAxisMinimumFixedValue;
     452      this.yAxisMaximumAuto = original.yAxisMaximumAuto;
     453      this.yAxisMaximumFixedValue = original.yAxisMaximumFixedValue;
     454      this.secondYAxisMinimumAuto = original.secondYAxisMinimumAuto;
     455      this.secondYAxisMinimumFixedValue = original.secondYAxisMinimumFixedValue;
     456      this.secondYAxisMaximumAuto = original.secondYAxisMaximumAuto;
     457      this.secondYAxisMaximumFixedValue = original.secondYAxisMaximumFixedValue;
    93458    }
    94459    public DataTableVisualProperties() {
     460      titleColor = Color.Black;
     461      axisTitleColor = Color.Black;
    95462      this.xAxisTitle = string.Empty;
    96463      this.yAxisTitle = string.Empty;
     464      this.secondXAxisTitle = string.Empty;
    97465      this.secondYAxisTitle = string.Empty;
     466      this.xAxisMinimumAuto = true;
     467      this.xAxisMinimumFixedValue = double.NaN;
     468      this.xAxisMaximumAuto = true;
     469      this.xAxisMaximumFixedValue = double.NaN;
     470      this.secondXAxisMinimumAuto = true;
     471      this.secondXAxisMinimumFixedValue = double.NaN;
     472      this.secondXAxisMaximumAuto = true;
     473      this.secondXAxisMaximumFixedValue = double.NaN;
     474      this.yAxisMinimumAuto = true;
     475      this.yAxisMinimumFixedValue = double.NaN;
     476      this.yAxisMaximumAuto = true;
     477      this.yAxisMaximumFixedValue = double.NaN;
     478      this.secondYAxisMinimumAuto = true;
     479      this.secondYAxisMinimumFixedValue = double.NaN;
     480      this.secondYAxisMaximumAuto = true;
     481      this.secondYAxisMaximumFixedValue = double.NaN;
    98482    }
    99483
  • trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj

    r5933 r6342  
    138138    <Compile Include="HeuristicLabAnalysisPlugin.cs" />
    139139    <Compile Include="Properties\AssemblyInfo.cs" />
     140    <Compile Include="QualityAnalysis\QualityDistributionAnalyzer.cs" />
    140141    <Compile Include="ValueAnalysis\MinAverageMaxValueAnalyzer.cs" />
    141142    <Compile Include="ValueAnalysis\MinAverageMaxValueCalculator.cs" />
  • trunk/sources/HeuristicLab.Analysis/3.3/MultidimensionalScaling/MultidimensionalScaling.cs

    r5933 r6342  
    6868    /// In every iteration it tries to find the best location for every item.</param>
    6969    /// <returns>A Nx2 matrix where the first column represents the x- and the second column the y coordinates.</returns>
    70     public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates, int maximumIterations = 20) {
     70    public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates, int maximumIterations = 10) {
    7171      int dimension = dissimilarities.Rows;
    7272      if (dimension != dissimilarities.Columns || coordinates.Rows != dimension) throw new ArgumentException("The number of coordinates and the number of rows and columns in the dissimilarities matrix do not match.");
     
    7575      double epsf = 0;
    7676      double epsx = 0;
    77       int maxits = 100;
    78       alglib.mincgstate state = null;
    79       alglib.mincgreport rep;
     77      int maxits = 0;
    8078
     79      alglib.minlmstate state;
     80      alglib.minlmreport rep;
    8181      for (int iterations = 0; iterations < maximumIterations; iterations++) {
    8282        bool changed = false;
     
    8585
    8686          try {
    87             if ((iterations == 0 && i == 0)) {
    88               alglib.mincgcreate(c, out state);
    89               alglib.mincgsetcond(state, epsg, epsf, epsx, maxits);
    90             } else {
    91               alglib.mincgrestartfrom(state, c);
    92             }
    93             alglib.mincgoptimize(state, StressGradient, null, new Info(coordinates, dissimilarities, i));
    94             alglib.mincgresults(state, out c, out rep);
     87            alglib.minlmcreatevj(dimension - 1, c, out state);
     88            alglib.minlmsetcond(state, epsg, epsf, epsx, maxits);
     89            alglib.minlmoptimize(state, StressFitness, StressJacobian, null, new Info(coordinates, dissimilarities, i));
     90            alglib.minlmresults(state, out c, out rep);
    9591          } catch (alglib.alglibexception) { }
    9692          if (!double.IsNaN(c[0]) && !double.IsNaN(c[1])) {
     
    105101    }
    106102
    107     // computes the function and the gradient of the raw stress function.
    108     private static void StressGradient(double[] x, ref double func, double[] grad, object obj) {
    109       func = 0; grad[0] = 0; grad[1] = 0;
     103    private static void StressFitness(double[] x, double[] fi, object obj) {
    110104      Info info = (obj as Info);
    111105      for (int i = 0; i < info.Coordinates.Rows; i++) {
    112         double c = info.Dissimilarities[info.Row, i];
     106        double f = Stress(x, info.Dissimilarities[info.Row, i], info.Coordinates[i, 0], info.Coordinates[i, 1]);
     107        if (i < info.Row) fi[i] = f;
     108        else if (i > info.Row) fi[i - 1] = f;
     109      }
     110    }
     111
     112    private static void StressJacobian(double[] x, double[] fi, double[,] jac, object obj) {
     113      Info info = (obj as Info);
     114      int idx = 0;
     115      for (int i = 0; i < info.Coordinates.Rows; i++) {
    113116        if (i != info.Row) {
     117          double c = info.Dissimilarities[info.Row, i];
    114118          double a = info.Coordinates[i, 0];
    115119          double b = info.Coordinates[i, 1];
    116           func += Stress(x, c, a, b);
    117           grad[0] += ((2 * x[0] - 2 * a) * Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a) - 2 * c * x[0] + 2 * a * c) / Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a);
    118           grad[1] += ((2 * x[1] - 2 * b) * Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a) - 2 * c * x[1] + 2 * b * c) / Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a);
     120          double f = Stress(x, c, a, b);
     121          fi[idx] = f;
     122          jac[idx, 0] = 2 * (x[0] - a) * (Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1])) - c) / Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1]));
     123          jac[idx, 1] = 2 * (x[1] - b) * (Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1])) - c) / Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1]));
     124          idx++;
    119125        }
    120126      }
  • trunk/sources/HeuristicLab.Analysis/3.3/Tests/MultidimensionalScalingTest.cs

    r5938 r6342  
    2121
    2222using System;
     23using System.Globalization;
    2324using HeuristicLab.Data;
    2425using Microsoft.VisualStudio.TestTools.UnitTesting;
     
    4243      distances3[0, 2] = distances3[2, 0] = 6.4;
    4344      distances3[1, 2] = distances3[2, 1] = 5;
    44       stress = MultidimensionalScaling.CalculateNormalizedStress(distances3,
    45         MultidimensionalScaling.KruskalShepard(distances3));
     45      DoubleMatrix coords3 = MultidimensionalScaling.KruskalShepard(distances3);
     46      Console.WriteLine("Coordinates: ");
     47      Console.WriteLine("A = ({0}, {1}), B = ({2}, {3}), C = ({4}, {5})", coords3[0, 0], coords3[0, 1], coords3[1, 0], coords3[1, 1], coords3[2, 0], coords3[2, 1]);
     48      stress = MultidimensionalScaling.CalculateNormalizedStress(distances3, coords3);
     49      Console.WriteLine("Stress = " + stress.ToString(CultureInfo.InvariantCulture.NumberFormat));
    4650      Assert.IsTrue(stress < 0.1);
    4751      DoubleMatrix distances4 = new DoubleMatrix(4, 4);
Note: See TracChangeset for help on using the changeset viewer.