微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有谁知道如何建模这种关系?

如何解决有谁知道如何建模这种关系?

我有可以参与某些工作的 AI 玩家。所以我必须找到最好的方法来模拟这种关系。餐厅工作人员从餐厅库存中获取食物并将其带到餐桌上。在此作业中,餐厅库存是“FoodStore”,餐桌是送货点。我对肉类供应商有相同的工作概念,但是他的“食品店”是配送工厂,他的交货点是餐厅库存。这三个对象都必须通过我尚未决定的抽象类或接口“成为”目标对象。

主要问题是我无法检查对象的“FoodAvailable”属性,因为我将它们作为其父类“Goal”进行迭代以保持抽象,以便肉类供应商和餐厅工作人员都可以实现相同的“作业”班级。我需要能够迭代需要食物的潜在交付点,同时检查它们的资源价值,所以我需要交付点对象既满足这两个属性,又要以某种方式抽象。

让事情变得更加复杂的是,我还有其他 AI 会从桌子上过来吃东西。我似乎做得很好。对这种特殊关系进行建模让我很难过。我不认为代码在这种情况下是相关的,因为我只需要对如何表示它有一个高层次的想法。如果有帮助,我可以提供代码

enter image description here

解决方法

我想我有点明白你想要什么。我想到了几个选项...

  1. 使用接口或继承来标识具有 FoodAvailable 属性的对象。我假设您有一个要迭代的对象集合/列表,其中涵盖了所有相关对象。
  2. 嵌套对象。作业可能有子作业,因此当您检查对象的 FoodAvailable 时,它还会检查它们拥有的任何子对象(如果有)。

这是一些显示选项 2 的伪代码。不确定我的逻辑是否 100% 正确,但总体思路应该相当清楚:

FoodAvailable
,

这是演示过程

interface ItemInterface<T>
{
    /// <summary>
    /// itemCall
    /// </summary>
    /// <param name="args"></param>
    void SetItemData (T args);
}

public class TempItem<T>:ItemInterface<T>
{
    /// <summary>
    /// itemCall
    /// </summary>
    /// <param name="args"></param>
    void SetItemData (T args)
    {
        if(T is int a)
        {
            int b = a;
        }
    }
}

public void Main()
{
    object obj = createObjItem();
    //"SetItemData" is ItemInterface call Fun name
    MethodInfo method = obj.GetType ().GetMethod ("SetItemData");
    if( method != null )
    {
        int data = 1;
        method.Invoke (obj,new object [1] { data });
    }
}

private object createObjItem()
{
    TempItem<int> item = new TempItem<int>();
    //transform to obj
    object obj = item;
    return obj;
}

可以看到反射和属性

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。