How to use Parameters and Parameter Files(如何用参数和参数文件)

Contents

Parameter Overview

  一个参数是模型一部分,它的初始值用来构造一个实际的模型。它定义了初始模型的条件。典型的,你可以使用这些参数去构建你模型框架。例如,参数NumAgents  可以指定一个模型包含的个体的初始数字。这些参数的值能够被重置,并能被用户通过 Repast 用户界面或通过参数文件自动地设置。然而,对于这些你的模型必须符合下面的一些简单编译规则。在字符串数组中参数名必须通过你模型中 getInitParam()方法一来返回。例如:

public String[] InitParam()
{
    get
    {
        String[] params =
            {
                "evapRate",
                "diffusionConstant",
                "maxIdealTemp",
                "minIdealTemp",
                "maxOutputHeat",
                "minOutputHeat",
                "worldXSize",
                "worldYSize",
                "numBugs"
            };

        return params;
    }
}     

  这些(evapRate 等)是这个模型的参数。

  这些参数的取得和设置的方法必须是关联的。如果两者所出现的参数是可读和可的,如果只是取得方法所出现的参数是只读。取得和设置的方法是参数名跟在"get" 或 "set"后面的。例如,得到上面的参数设置,这个模型必须包含这样的方法:

public double EvapRate {
  set { eRate = value; }
  get { return eRate; }
}

  等等这些是对于参数的一部分。所有参数的调用是通过这些方法和一些实际变量来使保持隐藏的参数重现。

  一旦模型开始运行,许多 Repast 数据库收集机制是依靠这些参数在运行的生命周期中保持不变。这不排除通过用户界面和参数文件的对参数任何改变,但是,一旦模型实际运行时,这些参数是不期望被改变的。一旦参数被这种方法定义,通过用户界面和参数文件, 它们能够被改变。

Parameter Files

  参数文件能够与 gui 模型和 batch 模型一起使用。对于 gui 模型,参数文件设置了一些或全部的参数初始值,正如用户通过手工键入那些值。对于 batch 模型,参数文件定义了一个参数空间,以及描述模型应怎样拓展这个空间。一个参数有下例的格式:

runs: x 
Parameter { 
value_definition 
}

  这里的 X 是一些数字,Parameter 是一些通过 get 和 set 方法调用的模型参数名。运行 runs 中指定的数字是为了执行当前参数值。在非 batch 模型中 "runs:"可以被忽略value_definition 是由一个和多个关键词和相应的值组成的。

  多关键词值的定义:

  •         "start:" the starting numerical value of a parameter.
  • "end:" the ending numerical value of a parameter.
  • "incr:" the amount to increment the current value of the parameter.  

  关键词 start, end, 和 incr 一起提供了一个值的定义,并且必须总是一起出现。对于一个 batch 仿真,它们定义一个参数空间并从头到尾自动重置。start:定义一个初始参数。end:这个参数等于并包含结束参数,incr:合计 start:值和一些随后值增量直到 end:参数。对于一个 gui 仿真 start: value 是作为一个缺省参数使用的,并其余的关键词是被忽略的。

  单一关键词 value_definitions: 

  •         "set:" defines a single numerical value as a constant for the entire collection of batch runs.
  • "set_list:" defines a space separated list of numerical values. A batch simluation will iterate through the list.
  • "set_boolean:" defines a boolean value as a constant for the entire batch simulation. Allowed values are "true" and "false" (without the quotes).
  • "set_string:" defines a string value as a constant for the entire batch simluation. The string value must not contain any white space.
  • "set_boolean_list:" same as set_list but a list of boolean values (true or false).
  • "set_string_list:" same as set_list but a list of string values.

  对于一个非 batch 模型,序列关键词是等同于"set:" 关键词,其值为序列第一个成员。

  Some examples, 

runs: 10 
Food { 
start: 10 
end: 30 
incr: 10 
}

  这表示开始一个食物的参数值为 10,并运行仿真 10 次都使用这个值。食物值的增量为 10,运行仿真 10 次后值为 20(start 10 + incr 10)。增加另一个增量10,再一次运行 10 次食物值为 30(start 10 + incr 10 + incr 10)。当在这点上增加当前值总和大于结束值仿真结束。

  More than one parameter can be specified, so for example, 

runs: 10 
Food { 
start: 10 
end: 30 
incr: 10 
} 
MaxAge { 
start: 10 
end: 30 
incr: 10 
}

  食物和最大年龄两者如上述被增加。如果使用不止一个参数,使它们同步是很重要的,不管如何,当参数当前值的和大于结束值,仿真将退出。

Parameters can also be nested. For example, 

runs: 1 
Food { 
start: 10 
end: 30 
incr: 10 
{ 
runs: 10 
MaxAge { 
start: 0 
end: 40 
incr: 1 
} 
}
}

  这个例子表示取食物值为 10,最大年龄值为 0 运行仿真 10 次。最大年龄增量为1,并运行仿真 10 次,持续到最大年龄值大于 40。在这点上,食物的增量为 10,取最大年龄值为 0 运行 10 次。最大年龄增量为 1,并运行仿真 10 次。持续到食物值大于 30。嵌套多层次是可以的。

  Setting constants: 

runs: 1 
Food { 
start: 10 
end: 30 
incr: 10 
{ 
runs: 10 
MaxAge { 
start: 0 
end: 40 
incr: 1 
} 
} 
} 
RngSeed { 
set: 1 
}

  RngSeed 是每个模型的参数,并象其它参数一样操作。在这里被设置为 1,并在单独 batch 运行中将保持常量。

  List parameters: 

runs: 1 
Food { 
start: 10 
end: 30 
incr: 10 
{ 
runs: 10 
MaxAge { 
set_list: 1.2 3 10 12 84 
} 
} 
} 
RngSeed { 
set: 1 
}

  除了 maxAge 通过序列增加,其它与上述一样。  因此取 maxAge 为 1.2 运行 10次。那么设置 maxAge 到 3 再运行 10 次。持续直到序列最后,食物增加和开始在MaxAge 序列起始,如此直到食物参数大于 30。

  布尔值和字符串关键字是以同样的方式运行的,只设置布尔值与字符串的值来代替数字。参数文件可以包含注释,由标准的 c/c++/java 注释标记: '//', '/*...*/'界定的。

  在你的模型中加载一个参数文件,参考How Run a Simulation(如何运行一个Repast仿真程序)和键的方法和

posted @ 2014-12-25 15:25  Buller Lee  阅读(298)  评论(0)    收藏  举报