public void calibrate(List<CalibrationHelper> instruments, OptimizationMethod method, EndCriteria endCriteria,
Constraint additionalConstraint, List<double> weights)
{
if (!(weights.Count == 0 || weights.Count == instruments.Count))
throw new ApplicationException("mismatch between number of instruments and weights");
Constraint c;
if (additionalConstraint.empty())
c = constraint_;
else
c = new CompositeConstraint(constraint_,additionalConstraint);
List<double> w = weights.Count == 0 ? new InitializedList<double>(instruments.Count, 1.0): weights;
CalibrationFunction f = new CalibrationFunction(this, instruments, w);
Problem prob = new Problem(f, c, parameters());
shortRateEndCriteria_ = method.minimize(prob, endCriteria);
Vector result = new Vector(prob.currentValue());
setParams(result);
// recheck
Vector shortRateProblemValues_ = prob.values(result);
notifyObservers();
}