跳至主内容
框架 无框架

宏ILOCPGOALWRAPPER0

定义文件: ilcp/cpext.h
ILOCPGOALWRAPPER0(_this, 求解器)
ILOCPGOALWRAPPER1(_this, solver,t1,a1)
ILOCPGOALWRAPPER2(_this, solver,t1,a1,t2 a2)
ILOCPGOALWRAPPER3(_this, solver,t1,a1,t2,a2,t3 a3)
ILOCPGOALWRAPPER4(_this, solver,t1,a1,t2,a2,t3,a3,t4 a4)
ILOCPGOALWRAPPER5(_this, solver,t1,a1,t2,a2,t3,a3,t4,a4,a5)
宏,用于封装新的目标类。

该宏定义了一个名为 "_thisI的目标类,其中有n 个数据成员。 当 n 大于零时,数据成员的类型和名称必须以参数形式提供给这个宏。 每个数据成员由其类型 "ti和名称 "ai 定义。

You can use the macro ILOCPGOALWRAPPER to wrap an existing instance of IlcGoal when you want to use it within IBM® ILOG® Concert Technology model objects. 要以这种方式使用 "IlcGoal实例,您需要遵循以下步骤:

  1. 使用宏将 " IlcGoal实例封装到 " IloGoal实例中。
  2. 使用由 " IlcCPEngine::solve和 " IlcCPEngine:startNewSearch"生成的 " IloGoal

示例

下面介绍如何用一个数据成员定义目标包装器:

 ILOCPGOALWRAPPER1(MyGenerate, cp,IloIntVarArray,vars) {
   返回IlcGenerate(cp.getIntVarArray(vars),IlcChooseMinSizeMin);
 }

该宏生成的代码与下面几行类似:

 classMyGenerateConcertI: publicIloGoalI{
   IloIntVarArrayvars ;
 public:
   MyGenerateConcertI (IloEnvI*, IloIntVarArray );
   ~MyGenerateConcertI ();
   virtual IlcGoal extract(const IloCPEngine) const;
 };

 MyGenerateConcertI::MyGenerateConcertI(IloEnvI*env、
                                     IloIntVarArrayvarsvars):
   IloGoalI(env), vars (varsvars) {}

 MyGenerateConcertI::~MyGenerateConcertI () {}

 IloGoal MyGenerateIloEnv,IloIntVarArrayvarsvars) {
   return new (env)MyGenerateConcertIenv.getImpl(), varsvars);
 }

 IlcGoal MyGenerateConcertI::extract(const IloCPEnginesolver) const {
   返回IlcGenerate(cp.getIntVarArray(vars),IlcChooseMinSizeMin);
 }

目标的抽取不会抽取也不得抽取其参数。 因此,在使用目标时,您必须确保将由模型抽取这些参数。 确保这一点的好办法是在模型中添加参数。

下面的例子可以说明这一点:

 IloEnv env;
 IloModel model(env);
 IloIntVarArrayx(env、3、0、10);
 model.add(x); // 这是必须的,否则将无法提取变量
  求解器(模型);
 cp.solveMyGenerate(env,x));
 env.end();

另请参阅: