Пример #1
0
int
CbcParam::setDoubleParameter (CbcModel &model, double value) const
{
    if (value < lowerDoubleValue_ || value > upperDoubleValue_) {
        std::cout << value << " was provided for " << name_ <<
                  " - valid range is " << lowerDoubleValue_ << " to " <<
                  upperDoubleValue_ << std::endl;
        return 1;
    } else {
        double oldValue;
        switch (type_) {
        case CBC_PARAM_DBL_INFEASIBILITYWEIGHT:
            oldValue = model.getDblParam(CbcModel::CbcInfeasibilityWeight);
            model.setDblParam(CbcModel::CbcInfeasibilityWeight, value);
            break;
        case CBC_PARAM_DBL_INTEGERTOLERANCE:
            oldValue = model.getDblParam(CbcModel::CbcIntegerTolerance);
            model.setDblParam(CbcModel::CbcIntegerTolerance, value);
            break;
        case CBC_PARAM_DBL_INCREMENT:
            oldValue = model.getDblParam(CbcModel::CbcCutoffIncrement);
            model.setDblParam(CbcModel::CbcCutoffIncrement, value);
        case CBC_PARAM_DBL_ALLOWABLEGAP:
            oldValue = model.getDblParam(CbcModel::CbcAllowableGap);
            model.setDblParam(CbcModel::CbcAllowableGap, value);
            break;
        case CLP_PARAM_DBL_TIMELIMIT: {
            oldValue = model.getDblParam(CbcModel::CbcMaximumSeconds) ;
            model.setDblParam(CbcModel::CbcMaximumSeconds, value) ;
            break ;
        }
        case CLP_PARAM_DBL_DUALTOLERANCE:
        case CLP_PARAM_DBL_PRIMALTOLERANCE:
            setDoubleParameter(model.solver(), value);
            return 0; // to avoid message
        default:
            oldValue = 0.0; // to avoid compiler message
            abort();
        }
        std::cout << name_ << " was changed from " << oldValue << " to "
                  << value << std::endl;
        return 0;
    }
}