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

Any逻辑:基于最短距离创建与特定代理的单向连接

子车峰
2023-03-14

我对任何逻辑都是新手,希望执行以下任务。我在GIS环境中有几种类型的固定代理,希望通过网络将它们连接起来。连接的条件如下:让代理类型A有4个代理,代理类型B有20个代理。我想根据最短(直线)距离连接B和A。也就是说,B型代理将连接到最近的A型代理。

非常感谢。

共有1个答案

富辰阳
2023-03-14

在您的特定情况下,这是您在模型开始时想要的:

// For each of your Bs
for (Agent B : populationOfB) {
  // Find the nearest A (using a straight line) and connect.
  B.connections.connectTo(B.getNearestAgent(populationOfAgentA));
}

更一般地说,如果您希望aB连接到多个与特定条件集匹配的代理,并且需要在运行中(或在模型开始时)执行此操作,则可以执行以下操作:

// For each B
for (Agent B : populationOfB) {

  // Find all A agents that it could possibly connect with.
  // Every time we take an agent from this collection, it will shrink to ensure we don't keep trying to connect to the same A.
  List<Agent> remainingOptions = filter(

    // We start with the full population of A
    populationOfAgentA, 

    // We don't want B to connect with any A it's already connected to, so filter them out.
    A -> B.connections.isConnectedTo(A) == false

      // You might want other conditions, such as maximum distance, some specific attribute such as affordability, etc.; simply add them here with a "&&"
      /* && <Any other condition you want, if you want it.>*/
  );

  // If B ideally wants N connections total, we then try to get it N connections. We don't start i at zero because it may already have connections.
  for (int i = B.connections.getConnectionsNumber(); i < N; i += 1) {

    // Find the nearest A. (You can sort based on any property here, but you'd need to write that logic yourself.)
    Agent nearestA = B.getNearestAgent(remainingOptions);

    // Connect to the nearest A.
    B.connections.connectTo(nearestA);

    // The A we just connected to is no longer a valid option for filling the network.       
    remainingOptions.remove(nearestA);

    // If there are no other remaining viable options, we need to either quit or do something about it.
    if (remainingOptions.isEmpty()) {
      traceln("Oops! Couldn't find enough As for this B: " + B);
      break;
    }
  }
}

还要注意,我经常使用连接:如果你需要多个收藏,例如工作、学校和社交网络,你可以用它来代替更具体的网络。

 类似资料:
  • 这道题是 LeetCode 72 题。 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 动态规划 解决两个字符串的动态规划问题,一般都是用两个指针 i,j 分别指向两个字符串的最后,然后一步步往前走,缩小问题的规模。 定义状态:dp[i][j] 表示 s1、s2 长

  • 例如,我有两个实体列表和一个测量它们之间距离的函数。假设是姓名和电子邮件。在下面的表格中,我测量了每封电子邮件到每个名字的距离。 现在我想在名称中找到每个电子邮件的最小距离对。但是,请注意,如果两封电子邮件具有相同的最小距离名称候选人,则赢得距离最小的人。在这种情况下,另一个电子邮件应该选择第二接近的候选名称,并再次检查。 因此,在这种情况下,结果应为: 解释表: 速度很重要。。它可以以数据帧或d

  • 本文向大家介绍Ruby实现的最短编辑距离计算方法,包括了Ruby实现的最短编辑距离计算方法的使用技巧和注意事项,需要的朋友参考一下 利用动态规划算法,实现最短编辑距离的计算。

  • 问题内容: 我目前正在将数据读入如下所示的数据框中。 我想根据此数据创建一个欧几里得距离矩阵,该矩阵显示所有城市对之间的距离,因此我得到一个结果矩阵,如下所示: 我的实际数据框中还有更多城市和坐标,因此我需要能够以某种方式遍历所有城市对并创建一个距离矩阵,就像上面显示的那样,但是我不确定如何配对所有城市一起引用并应用欧几里德距离公式?任何帮助,将不胜感激。 问题答案: 我认为您对distance_

  • 本文向大家介绍编辑距离相关面试题,主要包含被问及编辑距离时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 概念 编辑距离的作用主要是用来比较两个字符串的相似度的 编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,

  • 本文向大家介绍Spring基于ProxyFactoryBean创建AOP代理,包括了Spring基于ProxyFactoryBean创建AOP代理的使用技巧和注意事项,需要的朋友参考一下 Spring 通知类型 通过前面的学习可以知道,通知(Advice)其实就是对目标切入点进行增强的内容,Spring AOP 为通知(Advice)提供了 org.aopalliance.aop.Advice 接