当前位置: 首页 > 知识库问答 >
问题:

如何找到由数据库填充的MoveTo目标?

荆钱明
2023-03-14

我需要一些关于Anylogic模型的帮助。

模型(短):订单在单个路由中移动的制造场景。工作场所(WP)是通过模拟启动动态创建的。它们的名称、数量和其他参数存储在数据库中(excel导入)。订单也是根据导入创建的。代理人口“订单”有一个集合路由,其中包含它必须以特定顺序停止的工作场所。

目标:我想要一个moveTo块在main中找到代理订单的下一个目的地。问题和解决方案路径:

>

  • 我将目标类型设置为代理,并在代理字段中键入一个函数agent.get目标()。此函数按顺序返回集合的下一个条目WP目标名称=routing.get(i)。这样我得到一个数据类型错误(在运行未编译时)。我怀疑这是因为数据库没有将入口保存为WP类型,而只保存为字符串。是否有可能从Excel创建带有代理的集合?

    在此之后,我尝试使用与字符串相同的getDestination,通过findFirst查找与返回名称匹配的WP,并将其作为WP返回<代码>WP targetWP=findFirst(wps,w-

    我认为这并不难,但找不到答案或解决方案。正如你所知,我是一个初学者。。。希望描述是好的,有人可以帮助我或给我一个提示:)谢谢

  • 共有2个答案

    锺离锦
    2023-03-14

    欢迎使用堆栈溢出:)要通过Excel导入创建填充,必须创建一个方法并调用如下代码。您还需要一个空的人口
    int n=excelFile。getLastRowNum(您的姓名);for(int i=第一行;i

    现在,如果您想按名称获取工作场所,您必须创建一个与您的尝试类似的方法<函数体:WP workplaceToFind=wps。findFirst(w-

    卢皓轩
    2023-03-14

    是否可以使用Excel中的代理创建集合?

    不直接使用集合的属性,并且正如您所看到的,您不能拥有作为代理类型的数据库(DB)列类型1

    但是直接通过Java代码(您可以使用插入数据库查询向导为您构建框架代码)相对简单。

    在此之后,我尝试使用与字符串相同的getDestination,通过findFirst查找与返回名称匹配的WP,并将其作为WP返回

    是的,这是一种方法。如果您的订单详细信息在Excel/数据库中,它们可能是通过某个字符串ID(这将是您从单独的Excel工作表/数据库表创建的工作场所代理的参数)引用工作场所的。但是,您需要使用Javaequals方法来比较字符串,而不是==(用于比较数字或两个对象是否是同一个对象)。

    我想要一个移动到主块,找到代理订单的下一个目的地

    所以一般的整体解决方案是

    >

  • 从DB创建一组Workplace代理(假设在Main中称为workplace),每个代理都有一个String参数id或从DB列映射的类似参数。

    从DB创建一组order代理(比如在Main中称为订单),然后在它们的启动操作中,使用另一个DB表中的数据设置它们的工作场所ID集合(类型ArrayList,元素类String;假设称为workplaceIDsList)。

    order可能还需要一个工作变量,将下一个索引存储在它需要去的列表中(所以假设一个int变量nextWorkplaceIndex从0开始)。

    在Main中编写一个名为getWorkplaceByID的函数,该函数具有一个字符串,并返回一个工作区。这将从与ID匹配的人群中获取工作场所;与您的方法类似的单行方法是findFirst(workplaces,w)-

    MoveTo块(我假设它在Main中)需要将order移动到由getWorkplaceByID(agent.workplaceIDsList.get(nextWorkplaceIndex))定义的代理。(位在计算表达式后增加索引,以便为下一个工作场所做好准备。)

    为了填充集合,您将有两个表,如下所示(假设使用字符串作为工作场所和订单的ID):

    >

    order\u-workplaces表:列order\u-idsequence\u-numworkplace\u-id(因此有多行指定订单id的工作区id序列)。

    在订单的启动操作中,通过插入数据库查询向导设置骨架查询代码,如下所示(在这里,我们希望循环此订单ID的所有行,并做一些事情——我们将更改骨架代码以向集合中添加条目,而不是像骨架代码那样仅通过traceln打印内容)。

    https://imgs.xnip.cn/cj/n/32/81f154b1-93e4-41bc-bac0-c14c3d4a8631.png" width="100%" height="100%" />

    然后我们编辑骨架代码如下所示。(请注意,我们在初始查询中添加了一个orderBy子句,因此我们确保以升序序列号顺序获取行。)

    List<Tuple> rows = selectFrom(order_workplaces)
        .where(order_workplaces.order_id.eq(id))
        .orderBy(order_workplaces.sequence_num.asc())
        .list();
    
    for (Tuple row : rows) {
        workplaceIDsList.add(row.get(order_workplaces.workplace_id));
    }
    

    AnyLogic数据库是一个普通的关系数据库——实际上是HSQLDB——数据库只理解它们自己的特定数据类型,如VARCHAR,AnyLogic和它使用的库将这些数据类型转换为Java类型,如String。在用户界面中,AnyLogic使其看起来像是将列类型设置为int、String等。但这些实际上是列内容最终将被翻译成的Java类型。

    AnyLogic确实支持具有选项列表类型的列(以及包含可执行Java代码的列的特殊类型列),但这些是特殊情况,在后台使用特殊逻辑将列数据(最终仍然是一个字符串)转换为适当的选项列表实例,或(对于代码列)转换为动态编译,然后执行Java)。

  •  类似资料:
    • 简介 Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是更应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义的一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类从而控制数据填充的顺序。 编写 See

    • 问题内容: 我一直在尝试使用从数据库查询的数据加载TableView,但似乎无法使其正常工作。 这是我第一次尝试用数据库查询项填充数据库的情况,以防我的代码看起来杂乱无章,而且效果不佳。 FXML是通过JavaFx SceneBuilder完成的。 这是数据库查询类: 这是通过JavaFx场景生成器生成的FXML脚本: 问题答案: 这是将数据从数据库填充到tableView的最佳解决方案。 这是参

    • 问题内容: 如何填充一个int列(当前为空),其中包含不带重复项的随机数? 问题答案: 我想您可以使该列成为防止重复的主键,尽管这是一种hack。您可以稍后删除密钥。

    • 我正在创建一个web应用程序,您必须从数据库中读取对象/实体的列表,并将其填充到JSF

    • 问题内容: 我正在尝试使用我的Derby数据库数据填充Netbeans GUI-builder jTable。 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回其中包含参数数据和列的tableModel,因为我知道在GUI中执行此方法是一种不好的做法。在线上的所有教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它看不到数据和列,