1

最適化変数x と定数 yがあります。

制約を表現したい

f(x) <= y. 

やってみた

 27: IloRange rng = (f(cplex->getValue(x)) <= y);
 28: model.add(rng);

しかし、私はエラーが発生します

cplex.cpp:27: error: conversion from 'bool' to non-scalar type 'IloRange' requested

誰かがこのフォームの制約を書くのを手伝ってくれますか?

4

1 に答える 1

2

まず、線形計画法では厳密な不等式は使用できません。ただし、表現できます

f(x) <= y

cplex->getValue(x) は double であるため、f(x) <= y はブール値です。いずれにせよ、cplex->getValue() は解が得られた後でしか使用できないため、反復的に解く場合を除き、決してモデルの一部にすべきではありません。IloRange を取得するには、パラメータとして IloNumVar を受け入れ、IloExpr を返すように f(x) を書き直す必要があります。たとえば、次のようなものがある場合

double f(double x) {return 2*x;}

バージョンが必要です

IloExpr f(IloNumVarx) {return 2*x;}

それからあなたは書くことができます

IloRange rng = (f(x) <= y);

cplex (または任意の線形計画法ソルバー) を使用している場合、f(x) は線形関数または凸二次関数のみです。

于 2012-07-18T03:34:21.433 に答える