AnyLogic:从内部数据库中选择数据集的正确方法

时间:2019-06-29 15:52:42

标签: database class anylogic

在我的anylogic项目中,我从内部数据库查询数据集。我要查询的表具有以下结构:

df['Total Score'] = df[['Second','Third']].dot([1,3]) 

我能找到的唯一示例使用Tuple类,如下所示。它可以工作,但是我不得不从项目中手动提取所需的值,这感觉很笨拙。

Name: product_innovation_level
--------------------------------
ID|level_customer|level_employee|
--|--------------|--------------|
 1|            10|            14|

是否有更好的方法将值直接选择到模型类中?我正在寻找这样的东西:

Tuple innovationLevel = selectFrom(product_innovation_level).
                        where(product_innovation_level.id.eq(1)).
                        firstResult(product_innovation_level.level_customer, product_innovation_level.level_employee);

double ngEmployee = innovationLevel.get(product_innovation_level.level_employee);
double ngCustomer = innovationLevel.get(product_innovation_level.level_customer);

我应该为xxx使用哪个班级?我找到了一个自动创建的类Qproduct_innovation_level,但没有找到访问此数据集值的方法。

xxx innovationLevel = selectFrom(product_innovation_level).
                                  where(product_innovation_level.id.eq(1)).
                                  firstResult(xxx);

我试图自己编写一个模型类,但是在这里我遇到类型不匹配的错误(无法从Qproduct_innovation_level转换为InnovationLevelModel)。

2 个答案:

答案 0 :(得分:0)

好吧,我的回答可能有点荒谬,但这也许正是您想要的...

使用以下构造函数和变量创建一个类:

public class MyClass implements Serializable {

    public double ngEmployee;
    public double ngCustomer;
    /**
     * Default constructor
     */
    public MyClass(Tuple innovationLevel) {
        this.ngEmployee = innovationLevel.get(product_innovation_level.level_employee);
        this.ngCustomer = innovationLevel.get(product_innovation_level.level_customer);
    }

}

然后您可以创建该类的实例,如下所示:

MyClass mc=new MyClass(selectFrom(product_innovation_level).
                        where(product_innovation_level.id.eq(1)).
                        firstResult(product_innovation_level.level_customer, product_innovation_level.level_employee));

魔术...现在您可以使用mc.ngEmployeemc.ngCustomer

访问变量了

答案 1 :(得分:0)

在这里,您可以从数据库表中使用AnyLogic可视化定义的代理填充自动创建功能(包括代理类型定义)。

使用Agent向导(位于代理面板的顶部):通过使用数据库表创建新类型的填充,AnyLogic将

  • 使用与表中的列匹配的参数创建新的座席类型
  • 使用每行一个实例创建此代理类型的填充(可能有其他变体),将列映射到适当的代理参数

因此,在您的情况下,您可能有innovationLevels个代理类型为InnovationLevel的种群,其中该代理具有参数

  • id(类型int
  • levelCustomer(类型int
  • levelEmployee(类型int

(该向导将自动定义此代理类型及其在数据库表驱动的填充中的使用)。

请参见 AnyLogic帮助>基于代理的建模>基于数据库数据创建新的代理填充

如果您的ID是顺序的(例如1,2,3,...),则还可以通过列表中的位置访问给定的创新级别(例如,列表中的第二个innovationLevels(1))可能是ID 2)。如果您希望能够按ID“随机访问”创新级别(如果ID不是连续的),还可以执行诸如创建ID(到集合)到InnovationLevel的映射这样的操作。

其他代理可以根据需要包括对InnovationLevel实例的引用。