这是一个简单的问题,但我想就如何解决它提出建议。我有一个Policy
带构造函数的类Policy::Policy(const int& mode)
。
根据 的值mode
,Policy
对象可以具有不同的行为和特征。例如,假设有 3 种可能的运行我的程序的模式,分别对应于mode=1
、mode=2
和mode=3
。现在,任何时候都不会有Policy
具有不同模式值的对象。
所以,对我来说,有一个变量是有道理的,static int Policy::MODE
这样所有的Policy
对象都知道它们应该在什么模式下运行。创建的第一个Policy
对象将在其构造函数中设置此静态类变量的值。Policy
然后,如果尝试使用不同的值创建任何其他对象mode
,则实例化将退出并出现错误(因为这不应该发生)。
关于如何解决这个问题的任何建议?
[根据评论请求在下面添加了其他解释。]
该计划旨在优化疾病筛查政策。每个Policy
对象代表一个筛选策略,并具有许多必要的功能,以便跟踪反映在人群中实施该策略的影响的统计数据。在优化的说法中,每个筛选策略都是决策变量的向量,并且通过使用疾病的自然历史模型模拟策略来估计目标函数。
该Policy
对象需要能够无缝地适应多个复杂的优化框架。它不仅需要能够表示疾病筛查策略,还需要能够表示任意数量的标准测试问题,这些问题可用于测试优化算法是否运行良好。基于类的MODE
值而改变的特征/特征Policy
如下:(1)用于评估策略的模拟模型,(2)构造函数中的代码,用于设置诸如决策变量向量的长度之类的东西,以及 (3) 用于显示有关给定策略及其估计性能的信息的代码。
对于任何特定的模拟模型(即目标函数),都有多个“策略表达式”(即决策变量的向量)可以解码为模拟模型所需的策略表达式。因此,每个“模式”都代表了一种表达筛选策略的方式与特定模拟模型的配对,以评估该策略。
撇开很多不相关的东西,如果只有 2 种不同的运行模式,这将是类的结构:
class Policy {
public:
vector<double> x; // encoded representation of a policy (decision variables)
explicit Policy(const int& mode) {
// set Policy::MODE if not already set (code not shown)
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
void simulate() {
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
void displayInfo() {
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
private:
static int MODE;
};
在高层次上,您可以说每个众数值代表解决方案与估计器的配对。