summaryrefslogtreecommitdiff
path: root/NEWS
blob: f19ce442c53a1a9af0121bf19de1434132933dad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
# Changes in version 2.7.0

## Required Matlab/Octave version

* Required Matlab version number has been raised to R2009b.

* Required Octave version number has been raised to 4.0.0.

## Prediction

* `stk_predict.m` now officially supports a shorter calling syntax:

        [zp, ...] = skt_predict (model, x_prd)

  that can be used either to compute predictions from any type of
  model (proper prior model structures, posterior model object,
  (experimental) noise model objects, etc.).

* `@stk_model_gpposterior/stk_predict.m`: no longer exists.  The base
  `stk_predict` function now provides the recommended interface for
  all possible types of models, and then dispatches to the (new)
  internal function `stk_predict_` to do the actual computations (but
  do not rely on it directly, since this is an internal function).

## Models

* `get_input_data`, `get_output_data`, `get_prior_model`: Removed
  (these getters were already deprecated, cf. STK 2.6.0 release notes).

## Arrays

* `stk_dataframe` arrays now possess a `sample_size` property, which
  can be read using the usual dot-indexing notation or through the
  (slightly faster) getter `stk_get_sample_size`.

* `stk_model_gpposterior` objects also have a `sample_size` property,
  which corresponds to the sample size of the underlying data set and
  can be read similarly.

* `stk_length`: deprecated (use `stk_get_sample_size` instead).

* `@stk_model_gpposterior/stk_{set,get}_optimizable_parameters.m`: Fix
  a bug (erroneous property name).

## Sequential design of experiments

* `@stk_sampcrit_akg/set.m`: Remove replicated input points when the AKG
  reference grid is construted using Scott's original method (i.e., taking
  past observations points plus the candidate point).

## Examples

* `stk_example_kb07.m`: Add a second figure where nu is fixed to 5/2
  and rho varies.

* `stk_example_doe05.m`: Make it possible to use the exact KG criterion
  instead of Scott's approximation (previously, only the latter was
  proposed).

* `stk_example_doe06.m`: New example script, which illustrates a
  simple sequential design strategy to estimate an excursion set
  (failure region) and its volume (probability of failure).

## Miscellaneous

* `stk_init.m`: Make STK startup faster.

* `startup.m`: Run `stk_init` automatically for in-place use.

* `stk_select_optimizer.m`, `stk_optim_hasfmincon.m`: Removed
  (had been deprecated since 2015, and were never part of the public API).

* `README.md`: Explain how to initialize STK when using the Parallel
  Computing Toolbox in Matlab, by means of the `pctRunOnAll` function.

* Internal: source formatting, comments, etc.

-----


# Changes in version 2.6.1

## Documentation

* `stk_factorialdesign`: Provide missing help text.
  ([ticket #91](https://sourceforge.net/p/kriging/tickets/91/))

* Fix HTML doc (`INDEX` structure was broken).
  

# Changes in version 2.6.0

## Required Octave version

* Required Octave version number has been raised to 3.8.

## Parameter estimation

* `stk_param_init`: The syntax with an additional `do_estim_lnv`
  parameter is now deprecated.  Set model.lognoisevariance to NaN if
  you want an initial estimate for the variance of the noise.

* `stk_param_init_lnv`: Refuse noiseless models (error).

* `stk_model_gpposterior`: Trigger parameter estimation when
  lognoisevariance is NaN.  In the (experimental) case where
  lognoisevariance is a noise model object, parameter estimation is
  triggered as soon as at least one of the optimizable parameters of
  the model is NaN.
  ([ticket #93](https://sourceforge.net/p/kriging/tickets/93/))

* `stk_param_relik`: Return [] instead of NaN when the derivative with
  respect to lnv is requested for a noiseless model.

* `stk_param_relik`: Detect duplicated observation points automatically
  and raise an error for noiseless models.

* `stk_param_getdefaultbounds`: Estimation bounds for the regularity
  parameter of the Matérn covariance function are now customizable through
  the options `nu_min_dimfun` and `nu_max_dimfun`.

## Covariance functions

* Deprecated: `stk_noisecov`.

## Models

* `stk_get_input_data`, `stk_get_output_data`, `stk_get_prior_model`:
  New getters for model properties, that replace `get_input_data`,
  `get_output_data` and `get_prior_model` respectively (now deprecated).

* `stk_get_observation_variances`: New getter, which returns the
  vector of variances associated to the observations that have been
  used to build a model.

* `stk_gaussiannoise_`, `stk_gaussiannoise_het0`: New classes
  representing Gaussian noise models.  Currently in experimental
  state, these two classes are merely a proof-of-concept.  Other noise
  model classes can be defined by subclassing `stk_gaussiannoise_`.
  ([ticket #38](https://sourceforge.net/p/kriging/tickets/38/))

* `stk_example_misc05`: Demonstrate the use of noise model objects
  to estimate the dispersion parameter in an heteroscedatic case.

* `stk_simulate_noise`: New function to simulate noise sample replicates.

## `stk_dataframe` and related classes

* `stk_dataframe`: Accept char vectors (or strings) as `colnames` or
  `rownames` argument when there is only one column or one row
  ([ticket #92](https://sourceforge.net/p/kriging/tickets/92/))

* `@stk_dataframe/sort`: Argument `dim` can now be skipped, as in the
  base `sort` function.

* `@stk_dataframe/unique`: Overload base function.

## Graphics

* `stk_plot1d`: Do not create a legend systematically.
  ([ticket #82](https://sourceforge.net/p/kriging/tickets/82/))

* `stk_legend`: New function to create a legend, using the graphical
  objects for which a non-empty DisplayName has been provided.

* `stk_plot_shadedci`: Change gray levels and improve legend.

## Miscellaneous

* `stk_options_set`: Make it possible to set all options at once using
  an option structure.  Add help text.

* `stk_runtests`: Return test results in a structure.

* `stk_sampling_nesteddesign`: Fix help text.

-----


# Changes in version 2.5.1

## Bug fixes

* `stk_dominatedhv`: Workaround for Octave 4.4 issue
  ([ticket #89](https://sourceforge.net/p/kriging/tickets/89/))

## Miscellaneous

* Documentation fixes.

* `stk_option_set`: Return option struct only if `nargout > 0`.


# Changes in version 2.5.0

## Required Octave version

* Required Octave version number has been raised to 3.6.0.

## Sequential design of experiments

* `stk_sampcrit_akg_eval`: New function.  Computes the Approximate
  Knowledge Gradient (AKG) sampling criterion.

* `stk_example_doe05`: Example script that demonstrates the use of the AKG
  and EQI sampling criteria for noisy optimization.

* New (experimental) classes to represent sampling criterion objects:
  `stk_sampcrit_ei`, `stk_sampcrit_akg`, `stk_sampcrit_eqi`.

* `stk_sampcrit_ei_eval`: Remove deprecated calling forms.

## Design of experiments

* `stk_factorialdesign`: Accept one-variable `stk_dataframe` objects as
  factors and preserve column names in this case.

* `stk_sampling_nesteddesign`: New function to create nested designs.

* `stk_sampling_nestedlhs`: New function to create nested LHS (NLHS).

* `stk_sampling_sobol`: Fix help text.

## Validation of models

* `stk_distrib_normal_crps`: New function to compare observations and
  predictive (Gaussian) density.

* Calling `stk_predict_leaveoneout` with no output arguments now
  automatically creates two cross-validation diagnostics in two subplots:
  prediction VS observations (left panel) and normalized residuals (right
  panel).

* `stk_predict_leaveoneout` uses now the virtual LOO formula.

## `stk_dataframe` and related classes

* `stk_hrect`: Preserve column names for `stk_dataframe` inputs.

* `@stk_dataframe/find`: Overload base function to support calling find
  with an stk_dataframe as first input argument.

* `@stk_dataframe/plotmatrix`: Overload base function to enrich
  `plotmatrix` graphics with variable names when possible.

* Logical functions

   + Operations that normally return logical (`lt`, `eq`, `and`...) now
     return logical values for `stk_dataframe` arguments.

   + New overloaded functions for `stk_dataframe` objects: `isinf`,
     `isnan`, `isfinite`.

* Testing array membership

   + `@stk_dataframe/ismember`: No longer assumes `rows` flag for
     consistency with the base `ismember` function.

   + `stk_factorialdesign/ismember`: New function.  Tests membership
     for factorial designs much more efficiently than for plain arrays
     or data frames.

* `stk_generate_samplepaths` now returns a plain numerical array instead of
  a data frame.

## Miscellaneous

* `stk_plot_probdom2d`: New function to represent the uncertainty about a
  2D Pareto front.  This function is currently considered experimental and
  should not be expected to produce a reliable representation of the
  uncertainty for difficult or high-dimensional optimization problems.

* New test case: "truss3" (Koski, 1985; Das, 1997).

* Many functions have been optimized for speed.

* `stk_plot1d`: Handle the case where `xt` is not sorted.

* Support old-style STK structures (with a `.a` field) has been removed.

-----


# Changes in version 2.4.2

## Bug fixes

* Fix display problem of `stk_model_gpposterior` objects in Octave 4.2
  (ticket #73).


# Changes in version 2.4.1

## Bug fixes

* `stk_pmisclass`: Handle properly the case where `K22` is negative or
  null.

* `stk_get_optimizable_parameters`, `stk_get_optimizable_parameters`: Fix
  syntax errors.

* `stk_param_estim`: Issue a better error message when `LNV0` (the starting
  point for the estimation of the lognoisevariance parameter) is either
  `NaN` of infinite (ticket #72).

## Sampling criteria

* `stk_sampcrit_ei_eval`: The function now has a new syntax. The other
  syntaxes, introduced (accidentally) in STK 2.4.0, will remain supported
  in 2.4.x, but are deprecated and will be removed in a future release.

* Unlike the older `stk_distrib_normal_ei` function, `stk_sampcrit_ei_eval`
  is written for a *minimization* problem, following the usual convention
  in optimization software.

* From now on, it is recommended to use `stk_sampcrit_ei_eval` instead of
  `stk_distrib_normal_ei`.

* `stk_sampcrit_emmi_eval`: Now accepts for the input argument `ZI` a set
  of observations that contains dominated solutions (rows).  Dominated rows
  and duplicates are removed automatically, as in `stk_sampcrit_ehvi_eval`.

## Documentation

* `stk_pmisclass`, `stk_sampcrit_ei_eval`, `stk_sampcrit_ehvi_eval`: Help
  text has been added for all these functions.


# Changes in version 2.4.0

## Choosing the optimizer used in `stk_param_estim`

* The choice of the optimization algorithm used in `stk_param_estim` is now
  much more flexible, thanks to a new interface based on "optimizer object"
  classes.

* The following classes are currently available: `@stk_optim_octavesqp`,
  `@stk_optim_fmincon`, `@stk_optim_fminsearch`.

* `stk_optim_octavesqp` works both in Octave and in Matlab, with two
  possible choices for the QP solver: `qp` (available in Octave only, this
  is Octave's core `qp` function) and `quadprog` (available in Matlab from
  the Optimization toolbox or from MOSEK; should be available in Octave's
  optim package soon).

* Automatic detection of available optimizers.

* `stk_minimize_boxconstrained` (new function): Perform box-constrained
  minimization of a function.  This function is overloaded for each
  optimizer object class that supports box-constrained optimization.

* `stk_minimize_unconstrained` (new function): Perform unconstrained
  minimization of a function.  This function is overloaded for each
  optimizer object class that supports unconstrained optimization.

## Covariance functions

* It is now possible to specify default bounds for the estimation of the
  parameters in a user-defined covariance function. See the documentation
  of `stk_param_getdefaultbounds` for more information.

* Experimental/undocumented feature: it is possible to provide a
  specialized `stk_param_init` function for user-defined covariance
  functions.  Read `stk_param_init` if you need to do this.  (This feature
  might be removed or modified in future releases.)

* Radial basis functions (old and new):

   + `stk_rbf_matern`, `stk_rbf_matern32`, `stk_rbf_matern52` and
     `stk_rbf_gauss` (previously available internally as `stk_sf_*`
     functions).
   + New: `stk_rbf_exponential`, `st_rbf_spherical`.
   + Bugfix: `stk_rbf_matern32`, `stk_rbf_matern52` return 0 for very large
     `h`, where `stk_sf_matern32` and `stk_sf_matern52` returned NaN.

* New covariance functions

   + Exponential (aka Matérn 1/2): `stk_expcov_iso`, `stk_expcov_aniso`
   + Spherical: `stk_sphcov_iso`, `stk_sphcov_aniso`

## Linear models

* `model.lm` and linear model objects (`stk_lm_*` classes), introduced as
  an experimental feature in STK 2.2.0, are now the recommended way of
  setting the linear part of Gaussian process models.

* `model.order` is deprecated (but still supported).

* As an example, the following define a Gaussian process with a Matérn 5/2
  covariance function and a quadratic trend:

        model = stk_model ('stk_materncov52_aniso');
        model.lm = stk_lm_quadratic;

* `stk_lm_polynomial` (new function): Create a polynomial model of given
  degree, up to cubic models.

## `stk_model_gpposterior` objects

* A new `stk_model_gpposterior` class is introduced to represent a Gaussian
  process conditioned by observations (which is again Gaussian process).

* Internally, an `stk_model_gpposterior` object currently stores the QR
  factorization of the associated kriging matrix (other representations
  will be implemented in the future).

* `stk_predict` is overloaded for `stk_model_gpposterior` objects.

* `stk_model_update` (new function): Update a model with new observations.

## Space-filling designs

* `stk_sampling_sobol`: New function to generate points from a Sobol
  sequence using the algorithm of Bratley and Fox (1988), as modified by
  Joe and Kuo (2003).  The C implementation under the hood is due to Steven
  G. Johnson, and was borrowed from the NLopt toolbox (version 2.4.2).

## Sampling criterions for sequential designs

* `stk_sampcrit_ei_eval` (new function): Compute the expected improvement
  (EI) criterion for single-objective noiseless optimization.

* `stk_sampcrit_ehvi_eval` (new function): Compute the expect hyper-volume
  improvement (EHVI) criterion (Emmerich, Giannakoglou & Naujoks, 2006) for
  multi-objective noiseless optimization.  This function implements an
  exact computation of the EHVI criterion, using a decomposition of the
  dominated region into hyper-rectangles.

* `stk_sampcrit_emmi_eval` (new function): Compute the expected maximin
  improvement (EMMI) criterion for multi-objective noiseless optimization
  (Svenson & Santner, 2010).

## Miscellaneous

* `stk_pmisclass` (new function): Compute either the current probability of
  misclassification or the expectation of the future probability of
  misclassification, with respect to a given threshold.

* `stk_dominatedhv` (new function): Compute Pareto-dominated hypervolumes,
  which relies internally on the "Walking Fish Group" (WFG 1.10)
  algorithm. The function can also return the underlying
  inclusion-exclusion representation of the dominated region, i.e., its
  representation as a collection of signed overlapping hyper-rectangles.

* `stk_predict_leaveoneout`: New function that computes leave-one-out
  predictions and residuals.

* `stk_isnoisy` (new function): Returns false for a noiseless model and
  true otherwise.

## Graphics

* All STK functions related to graphics now accept a handle to existing
  axes as optional first input argument, and return a handle (or a vector
  of handles when appropriate) to the graphical object created by the
  function.

* STK is now compatible with Matlab >= R2014b, where handles to graphical
  objects are not numbers any more.

* `stk_plot1d`: A nice default legend can now be created painlessly using
  legend ('show'), and a struct of handles to the graphical objects
  composing the plot is returned to facilitate further customization. See,
  e.g., examples 1 and 2 in the "kriging basics" series.

* `stk_plot2d`: Removed (had been deprecated for a while).

* `stk_plot_predvsobs` (new function): Plot predictions against observations.

* `stk_plot_histnormres` (new function): Plot histogram of normalized
  residuals, together with the N(0, 1) pdf as a reference.

## Examples

* `stk_example_doe04`: Example script that demonstrates the use of
  `stk_pmisclass`.

* `stk_example_kb10`: Example script that demonstrates the use of
  leave-one-out cross-validation to produce goodness-of-fit graphical
  diagnostics.

* `stk_testfun_borehole` (new function): New test function (the "borehole
  model" response function, from Harper & Gupta 1983).

* `stk_testfun_twobumps` (new function): A simple 1D test function.

* `stk_dataset_twobumps` (new function): Define three datasets based on the
  TwoBumps test function.

## stk_dataframe class

* New overloaded functions for stk_dataframe objects: `acos`, `acosd`,
  `acosh`, `asin`, `asind`, `asinh`, `atan`, `atand`, `atanh`, `cos`,
  `cosd`, `cosh`, `exp`, `expm1`, `log`, `log10`, `log1p`, `log2`,
  `logical`, `sin`, `sind`, `sinh`, `sqrt`, `tan`, `tand`, `tanh`.

* `@stk_dataframe/bsxfun`: Now preserve row names if possible.

* `@stk_dataframe/openvar` (new function): Convert `stk_dataframe` object
  to table or double array before opening it the variable editor.

* `stk_dataframe` arrays now accept characters indices (row/column names)
  and cell array indices (list of row/column names).

* The `info` field is deprecated.

## Other minor changes

* `stk_plot_shadedci`: Delete invisible area object.

* `@stk_hrect/ismember`: Optimize for speed.

* `stk_predict`: In the case of discrete models, row input vectors are no
  longer accepted.

* `stk_runtests`: Now also available in the Octave package release, to
  provide a convenient wrapper around __run_test_suite__ ().

* `stk_maxabscorr`: No longer relies on corr ().

* `stk_kreq_qr`: Now has a default constructor, which allows to load saved
  `stk_kreq_qr` objects properly.

-----


# Changes in version 2.3.4

## Bug fixes

* `@stk_hrect/ismember`: Fix

   + a bug that prevented `ismember` from working on more than one point at
     a time, and
   + another bug in the case where `B` is not an `stk_hrect` object (it was
     incorrectly assumed to be an `stk_dataframe` in this case).

* `@stk_hrect/subsref`: Make sure that the returned value is still an
  `stk_hrect` object when the number of rows (which is two) is unchanged.

## Minor changes

* Add a `clean` target to the Octave package Makefile.

* Decrease unit test verbosity.


# Changes in version 2.3.3

## Bug fixes

* `stk_dist`, `stk_filldist`, `stk_gpquadform`, `stk_mindist`: Fix segmentation
  faults occurring with very large matrices (related to signed
  integer-based index computation in the underlying MEX-files).

* `stk_example_doe03`: Use the appropriate flag for maximization.

* `mole/matlab/file_in_path.m`: Fix two bugs (Matlab only)

## Minor changes

* `stk_example_doe03`: Display pointwise credible intervals in the upper
  panel.


# Changes in version 2.3.2

## Bug fixes

* `stk_param_estim`: Fix a bug related to parameter objects. More
  precisely, use `(:)` indexing systematically to access the vector of
  numerical parameters corresponding to a given parameter object.

* `@stk_kreq_qr/get`: Fix a call to `dot` to make it work when there is
  only one observation.

* Add missing field "Depends" to the `DESCRIPTION` file in the Octave
  package.

## Minor changes

* `stk_param_getdefaultbounds`: Return empty lower and upper bounds for
  parameter classes that do not implement the `stk_param_getdefaultbounds`
  (instead of calling `error`).

* Add optional field "Autoload" to the `DESCRIPTION` file in the Octave
  package.


# Changes in version 2.3.1

## Bug fixes

* `stk_optim_hasfmincon`: Detect `fmincon` by trying to use it, instead of
  relying on the result of the `exist` function (ticket #30 closed).

* `stk_param_estim`: Make sure that the bounds that we use for the `lnv`
  parameter contain the starting point `lnv0` when it is provided.

* `@stk_dataframe/set`: Fix `stk_error` calls (missing mnemonic).

* `stk_distrib_bivnorm_cdf`: Fix a bug in the case of mixtures of singular
  and non-singular cases.

* `@stk_dataframe/subsasgn`: Preserve column names when deleting rows, even
  if the resulting array is empty.

## Minor changes

* `stk_init`: Clear persistent variables. As a consequence, `stk_init` can
  now be used to restart STK completely.

* `stk_commonsize`: Accept empty dimensions, under the condition that all
  input arguments have the same empty dimensions (in which case the result
  is empty).

* `stk_commonsize`: is now faster when some arguments already have the
  proper size (unnecessary calls to `repmat` are avoided).

* `stk_distrib_normal_cdf`, `stk_distrib_bivnorm_cdf`: are now slightly
  faster (unnecessary calls to `stk_commonsize` are avoided).


# Changes in version 2.3.0

## Model structures

* `lognoisevariance` is now considered a mandatory field. For backward
  compatibility, a missing or empty lognoisevariance field is interpreted
  as `-inf`. A NaN value in the lognoisevariance field is now interpreted
  as meaning that the variance of the noise must be estimated.

* `model.param` is set to NaN by `stk_model`. This special value indicates
  that the parameters must be estimated from the data before any prediction
  can be done.

* Improved documentation for `stk_model`.

## Parameter estimation

* `stk_param_init` defaults to using the input value of
  `model.lognoisevariance` if it is not NaN, and estimating the variance if
  it is NaN. The meaning of the fifth argument, now called `DO_ESTIM_LNV`,
  has thus slightly changed: it is used to force or prevent the estimation
  of the variance of the noise, regardless of the value of
  `model.lognoisevariance`.

* `stk_param_init` also supports the heteroscedastic noisy case, but only
  when the variance of the noise is assumed to be known.

* `stk_param_init_lnv` is a new function that provides a rough estimate of
  the variance of the noise (in the spirit of `stk_param_init`).

* `stk_param_estim` estimates the variance of the noise if either

   + `param0lnv` is provided and is not empty (as in STK <= 2.2.0), or
   + `model.lognoisevariance` is NaN (new behaviour).

  If `param0lnv` is not provided, a starting point is obtained using the
  new `stk_param_init_lnv` function. In all cases (whether `lnv` is
  estimated or not) a meaningful value is returned for `lnv` (equal to
  `model.lognoisevariance` when `lnv` is not estimated).

* `stk_param_estim` can provide a value for `param0` when it is missing
  from the list of input arguments.

* `stk_param_relik`: Compute `G = W' * K * W` in such a way that the result
  is always (?) symmetric.

## Prediction

* `stk_predict` computes `lambda_mu` and `RS` only when necessary, depending on
  the number of output arguments.

## Covariance functions

* `stk_noisecov` now has a `pairwise` argument, like the others.

## Sampling

* `stk_sampling_randunif` accepts empty dim argument when `box` is provided

## Simulation of Gaussian process sample paths

* `stk_generate_samplepaths`: Do not add observation noise to the generated
  sample paths. This is consistent with `stk_predict`, which returns
  posterior variances for the unknown function, not for future noisy
  observations.

* `stk_conditioning`: Simulate sample paths conditioned on noisy
  observations when the additional `NOISE_SIM` argument is provided.

* `stk_generate_samplepaths`: Fix conditioning on noisy observations, which
  was not implemented properly until now.

* `stk_generate_samplepaths`: The output is an `stk_dataframe` object if
  either `MODEL.response_name` exists and is a non-empty string, or one of
  the input arguments (`XI`, `ZI`, `XT`) is an `stk_dataframe` object.

* `stk_conditioning`: The output is an `stk_dataframe` object if either
  `LAMBDA` or `ZSIM` is an `stk_dataframe` object.

## Objects representing sets

* `stk_hrect`: new class to describe hyper-rectangle objects.

* `stk_boundingbox`: constructs the bounding box for a set of points.

## Examples

* `stk_example_kb04` demonstrates how it is possible to estimate the
  variance of the noise without providing a initial guess for it.

* `stk_example_kb09` demonstrates how to simulate conditional sample paths
  in the case of noisy observations, both in the homoscedastic and in the
  heteroscedastic cases.

## Miscellaneous

* `stk_distrib_bivnorm_cdf` computes bivariate normal probabilities.

* `stk_disp_progress`: New function that displays a textual progress
  indicator.

* `stk_feval` handles cell-arrays of functions (ticket #19 closed),
  multivariate outputs (ticket #20 closed), and uses vectorized calls by
  default (unless a progress indicator is displayed).

* `sort`, `mtimes`, `uplus` and `uminus` are now overloaded for
  `stk_dataframe` objects

* `min`, `max` are now able to return a second output argument (index of
  mininizer or maximizer) for `stk_dataframe` arguments.

* Now the output of `stk_dataframe` is always an `stk_dataframe` object.
  Previously, this wasn't true if the first input argument was, e.g., an
  `stk_factorialdesign` object.

* `stk_distrib_normal_ei`, `stk_distrib_student_ei`: bugfix (the optional
  input argument "minimize" was not taken into account).

* `stk_distrib_normal_cdf`: Fix the zero-variance case.

-----


# Changes in version 2.2.1

## Octave 4.0 compliance

* Fix unit tests

## Octave package

* Do not ship `stk_test` and `stk_runtests` with the Octave package


# Changes in version 2.2.0

## Octave package

* The STK is now available both as an "all-purpose" Matlab/Octave toolbox
  (as usual) and as a full-fledged Octave package that can be installed
  using `pkg install`.

## Core

* `stk_model` now also accepts function handles for `covariance_type`.

* `stk_ortho_func` is deprecated and will be completely replaced, in the
  3.x series, by linear model objects. In the meantime, `stk_ortho_func`
  has been kept as a gateway to `stk_lm_*` functions and now supports the
  case of cubic polynomial models.

* `stk_cholcov`: new function that adaptively adds a little bit of noise on
  the diagonal of a covariance matrix to help `chol` succeed, when the
  first factorization returned by `chol` is not complete (a warning is
  emitted when doing so). Used in `stk_param_init`, `@stk_kreq_qr/get`,
  `stk_param_relik`...

* `@stk_kreq_qr`: heuristic improvement of numerical conditioning
  (implemented in the new private function `compute_P_scaling`).

## Covariance functions

* Accept `invRho = 0` in anisotropic covariance functions.

* `stk_sf_matern`: Handle special cases (3/2, 5/2, infinity) explicitly,
  and handle large values of the smoothness parameter `nu` better.

* Handle the case of Gaussian isotropic and anisotropic covariance
  functions in `stk_param_init` and `stk_param_getdefaultbounds`.

## Linear models

* Introduce linear models objects. Currently, the following linear model
  object classes are available: `stk_lm_null`, `stk_lm_constant`,
  `stk_lm_affine`, `stk_lm_quadratic`, `stk_lm_cubic` and `stk_lm_matrix`.

* Linear model objects are still considered an experimental feature. They
  can be accessed by setting `model.order` to NaN, in which case `model.lm`
  is expected to contain a linear model object.

* `stk_example_misc03`: New example script that demonstrates the use of
  linear model objects.

## Sample path simulation (`stk_generate_samplepaths`)

* The simulation of conditioned sample paths has been made easier (see
  ticket #3 on SF). This is demonstrated by `stk_example_kb08`.

* Now uses `model.response_name` (if available) to create column names for
  the output array, and `xt.rownames` (if available) to create row names.

* `stk_generate_samplepaths` can deal with replicated rows in `xt`.

## Parameter estimation

* `stk_param_estim`

   * Warn about constant-response data.
   * Return an additional `info` structure, which currently contains the
     criterion that has been used, the criterion value at the optimum, and
     the bounds.
   * Add a new (optional) input argument that will make it possible,
     in the future, to select which estimation criterion to use.

* `stk_param_relik`

   * Check symmetry of `G = W' * K * W` and apply a naive fix if it is not
     (emit a warning when doing so).
   * Improved implementation, which seems to reduce the number of warnings
     related to bad conditioning, and also improve the performance for
     large `n` (about 1000, say).

* New optimization options (can bet set through `stk_options_set`)

   * Add global options to control upper/lower bounds for `stk_param_estim`.
   * (Matlab) Add a `optim_display_level` option to control the verbosity
     `fmincon`/`fminsearch`. Its default value is `'off'`.

* `stk_param_gls`: new function that computes the GLS estimator.

## Array objects (`stk_dataframe`, `stk_factorialdesign`)

* `stk_length`: New function that returns the "length" of an array,
  currently defined as its number of rows.

* Improved display for both `stk_dataframe` and `stk_factorial` objects

* Fix and improve accessors (`subsasgn`, `subsref`, `set`, `get`,
  `fieldnames`)

* Minimalist support for linear indexing on `stk_dataframe` objects

* New overloaded methods: `@stk_dataframe/abs`, `@stk_dataframe/reshape`

* `@stk_dataframe/plot`: Full rewrite to improve compatibility with the
  base plot function. The case where `x` is an `stk_dataframe` objects with
  two or more columns is now handled in a way that is consistent with the
  base plot function (i.e., if `x` has two columns, then we get two 1D
  plots).

* `@stk_dataframe/horzcat`, `@stk_dataframe/vertcat`: Now the result is
  always an `stk_dataframe` object, and has row names iff either one of the
  two arguments doesn't have row names, or the row names of both arguments
  agree.

* `@stk_dataframe/bsxfun`: Modify the behaviour of `bsxfun` for
  `stk_dataframe` objects. The result is always an `stk_dataframe` object,
  and has column names iff either one of the two arguments doesn't have
  columns names or the columns names of both arguments agree.

## Graphics

* `stk_plot2d` is deprecated and will be removed in the 3.x series. Use
  `contour`, `mesh`, `surf`... directly instead (they are now overloaded
  for `stk_factorialdesign` objects).

* `stk_plot1d`: Improved flexibility in the way input arguments are
  handled.

* `stk_figure` does not set the axis title any more.

## Pareto domination

* `stk_isdominated`: New function that returns true for dominated rows.

* `stk_paretofind`: New function that finds non-dominated points.

* `stk_example_misc04`: New example script illustrating random Pareto fronts.

## Faster and less verbose startup

* Stop bothering users at startup with information that they can find in
  the `README` file anyway.

* Don't display selected optimizers at startup.

* In Matlab, don't bother checking if the PCT is installed.

## Documentation

* New HTML documentation, available in the "all-purpose" Matlab/Octave
  release (doc/html directory) and online on Source-Forge at
  <http://kriging.sourceforge.net/htmldoc>.

* Lots of fixes and improvements in help texts.

* Add a `CITATION` file, which explains how to cite STK in publications.

* `stk_testfun_braninhoo`: Fix domain bounds in the documentation.

## Miscellaneous

* Options set/get

   * `stk_options_set`: Add a reset feature.
   * `stk_options_set`: Prevent persistent from being cleared (bugfix)

* Remove `page_screen_output` (not needed anymore).

* Restore the `stk_` prefix for `distrib_*` functions (`distrib_normal_cdf`
  is renamed to `stk_distrib_normal_cdf`, `distrib_student_ei` to
  `stk_distrib_student_ei`, etc.)

* Lots of internal changes, minor changes, etc. not worth mentioning here.

-----


# Changes in version 2.1.1

## Bug fix

* Fix a bug in `stk_param_init`.

## Minor changes

* Add size checks to several functions.

* Warn Octave users about the problem with MEX-files in privates folders:
  Octave must be restarted when `stk_init` is run for the first time.


# Changes in version 2.1.0

## How to get help

* Several ways to get help, report bugs or ask for new features on
  Sourceforge are now proposed to the user (both in `README` or
  `stk_init.m`)

## Examples

* Existing examples have been improved: descriptions rewritten; graphical
  options controlled globally thanks to dedicated plotting functions
  (`stk_figure`; `stk_subplot`, `stk_axes`, `stk_title`...); + lots of
  minor changes

* New examples

   * kb06: ordinary kriging VS linear trend
   * kb07: simulations of Matérn sample paths with different various `nu`
   * doe03: one-dimensional Bayesian optimization (expected improvement)

## Covariance functions

* New function: `stk_gausscov_iso` (isotropic Gaussian covariance model)

* New function: `stk_gausscov_aniso` (anisotropic Gaussian covariance model)

## Special functions

* The precision of `stk_sf_matern` has been improved around 0 for high `nu`

* New function: `stk_sf_gausscorr` (Gaussian correlation function in 1D)

## Design of experiments

* New function: `stk_phipcrit` (phi_p criterion for space-filling designs)

* New function: `stk_maxabscorr` (maximal pairwise absolute correlation)

## Probability distributions

* A new 'probability distributions' module has been initiated (read
  `misc/distrib/README` to understand the reasons why)

* Currently provides: pdf, cdf and expected improvement (EI) for the
  Gaussian and Student t distributions

## Matlab/Octave compatibility

* Matlab/Octave compatibility throughout all supported releases has been
  strengthened, thanks to the creation of a Matlab/Octave Language
  Extension (MOLE) module

* octave_quantile removed; instead, a replacement for `quantile` is
  provided by the MOLE when needed.

* new function `graphicstoolkit`, providing a kind of replacement for
  `graphics_toolkit`, that also work in Matlab and old Octave releases

* ...

## Miscellaneous

* `stk_plot1dsim` has been removed (use `stk_plot1d` instead)

* plotting functions now work directly on the current axes

* An optional `box` argument has been added to `stk_sampling_halton_rr2`

* `stk_feval` now uses input row names for its output

## Bugfixes

* `@stk_kreq_qr/stk_update` is now (inefficient but) working

* `isequal` is now working for `stk_dataframe` and `stk_kreq_qr` objects in
  Octave 3.2.x (explicit overloading was required for these old releases)

* and many other tiny little things

-----


# Changes in version 2.0.3

## Bug fix

* Fix a bug `core/stk_predict.m` (related to blockwise computations)


# Changes in version 2.0.2

## Bug fixes

* Fix a bug in `@stk_dataframe/subsref` (handle colnames properly when
  ()-indexing is used to extract a subset of rows).

* Fix a bug in `@stk_dataframe/stk_dataframe` (make sure that `.data`
  contains numerical data) and add a copy constructor.


# Changes in version 2.0.1

## Bug fixes

* Fix a bug in `stk_predict` (don't compute the optional outputs `lambda`
  and `mu` when they are not requested by the caller).

* Fix a bug in `stk_sampling_olhs` (fail neatly when called with n = 2).


# Changes in version 2.0.0

## Required Octave version number

* Required Octave version number has been raised to 3.2.2.

## Important changes to the public API

* New R-like data structures: `@stk_dataframe`, `@stk_factorial_design`.

* The structures previously used everywhere in STK (with a `.a` field) are
  still supported but should be considered as deprecated (and will probably
  be completely removed in the next major release).

* As a result, `stk_predict` does not return a `.a`/`.v` structure any
  more. Instead, it returns an stk_dataframe object with two variables
  called `mean` and `var`.

* The function that computes (the opposite of the log of) the restricted
  likelihood is now called `stk_param_relik` instead of `stk_remlqrg`.

## Internal structure

* Many improvements in the internal structure of STK, for the sake of
  clarity (for those who happen to read the code) and efficiency:

* `@stk_kreq_qr`: new class for encapsulating basic computations related to
  a Gaussian process (kriging) model.

* The old `Kx_cache`/`Px_cache` mechanism, for working efficiently on
  finite spaces, has been replaced by a new covariance function:
  `stk_discretecov`.

* A new framework to encapsulate various approaches to parallel
  computations. Currently only supporting `'none'` or `'parfor'`
  (Mathworks' PCT toolbox parfor loops) engines, more to come later.

## Experimental support for parameter objects.

* `model.param` is now allowed to be an object from a user-defined
  class. This feature is experimental, and not really used currently in the
  toolbox.

* A new function `stk_param_getdefaultbounds` has appeared in `./param`,
  that was previously hidden in `stk_predict`. It can be overridden in the
  case where `model.param` is an object from a user-defined class.

## New sampling algorithms and related functions

* Fill-distance computation: exact (using Pronzato & Müller, Statistics &
  Computing, 2011) or approximate (using a space-filling reference set).

* Van Der Corput and Halton RR2-scrambled sequences (quasi-MC)

* NOLHS designs (Cioppa & Lucs, Technometrics, 2007)

## Miscellaneous

* `misc/options`: a new system for managing options

* `octave_quantile`: replacement for the missing `quantile` function in
  base Matlab (Mathworks' Statistics toolbox is not a requirement of STK).

* Add MEX-files for computing "Gibbs-Paciorek quadratic forms" to support
  future work on non-stationary covariance functions.

* `AUTHORS`: a list of maintainers and contributors can now be found at the
  root of the source tree.

* `stk_compile_all`: now recompiles MEX-files automatically if the source code
  has changed.

* Various new utility functions, tiny or not-so-tiny improvements,
  bugfixes here and there...

-----


# Changes in version 1.2

## `stk_predict`

* Now offers the possibility to compute the posterior covariance matrix (it
  is returned as a fourth optional argument).

* Has been modified to work with non-stationary covariance functions.

## Covariance functions

* Added a new `"pairwise"` option to all covariance functions and also to
  `stk_dist` (formerly `stk_distance_matrix`). This options allows to
  compute only the diagonal of the full distance/covariance matrix).

## Space-filling designs

* New function (`stk_filldist`) to compute the (discretized) fill distance.

* New function (`stk_sampling_olhs`) to generate Orthogonal Latin Hypercube
  (OLH) samples using the algorithm of Ye (1998).

## Parameter estimation

* New (experimental) function to choose automatically the starting point
  for a parameter estimation optimization procedure (`stk_param_init`).

## New functions to work with boxes

* `stk_rescale`,

* `stk_normalize`.

## More flexible representation of data

* Improved the flexibility most functions (`stk_predict`,
  `stk_param_estim`, ...), which are now accepting both matrices and "data
  structures" (with an `.a` field) as input arguments.

* New function: `stk_datastruct`

## Regular grids

* New function `stk_plot2d` that serves has a wrapper around
  {`surf`|`contour`|`mesh`|`pcolor`}-type functions, to plot data defined
  over a two-dimensional regular grid.

* `stk_sampling_regulargrid` now also returns 'ndgrid-style' coordinate
  matrices stored in new `.coord` field.

## Examples

* Reorganized the example folder and renamed all example scripts.

* New example (`stk_example_misc03`) to demonstrate the effect of adding a
  prior on the covariance parameters.

* Improved graphical outputs in `stk_example_kb03`.

* New test function: `stk_testfun_braninhoo` (Branin-Hoo).

## Miscellaneous

* Renamed `stk_distancematrix` to `stk_dist`.

* Various new utility functions: `stk_runexamples`, `stk_disp_framedtext`,
  `stk_disp_examplewelcome`, `stk_plot_shadedci`, `stk_octave_config`.

* Improved Octave-specific configuration.

* Lots of bugfixes and improvements.

-----


# Changes in version 1.1

* New special functions for the Matérn 3/2 and 5/2 correlation functions
  (`stk_sf_matern32`, `stk_sf_matern52`). New covariance functions
  (`stk_materncov32_iso`, `stk_materncov32_aniso`, ...).

* New MEX-file to compute the separation distance (`stk_mindist`).

* New function to generate random Latin Hypercube Samples
  (`stk_sampling_randomlhs`).  Renamed `stk_sampling_cartesiangrid` to
  `stk_sampling_regulargrid`, and changed the meaning of the first argument
  for consistency with other `stk_sampling_*` functions.

* Improved `stk_model` function. Now provides default parameters for several
  families of covariance functions.

* Renamed fields in model structures (`covariance_cache` to `Kx_cache` and `P0`
  to `Px_cache`). A new field `dim` has been added to the model structure.

* Changed the order of the arguments of the functions that use the
  structure `model`. Now, `model` is always the first argument.

* Changed `stk_param_estim` to make it possible to estimate noise variance.

* Fixed issues in `stk_param_estim` related to the definition of the search
  domain and the selection of (constrained/unconstrained) optimizer.

* Renamed `stk_conditionning` to `stk_conditioning`.

* New functions for a more flexible and efficient management of STK's
  configuration in `stk_init` (path, compilation of MEX-file, checking for
  optional packages, selection of the default optimizer, ...).

* New functions for unit testing, based on Octave's testing system
  (`stk_test`, `stk_runtests`). Tests have been added to most functions in
  the toolbox.

* Improved documentation & new examples.

* Improved argument checking and error messages.

* Improved compatibility with older versions of Octave and Matlab.

* Lots of minor changes and bug fixes.

* Complete reorganization of the code (better directory structure).