【问题标题】:Python: Traffic-Simulation (cars on a road)Python:交通模拟(道路上的汽车)
【发布时间】:2010-04-27 10:29:21
【问题描述】:

我想创建一个像这里这样的交通模拟器: http://www.doobybrain.com/wp-content/uploads/2008/03/traffic-simulation.gif 但我对此并没有深思。

我会创建类汽车。 每辆车都有自己的颜色、位置等。

我可以用数组创建道路。

但是如何告诉汽车去哪里呢? 我能听听你的想法吗?

编辑:是否禁止从优秀程序员那里获得新想法?为什么有些人想关闭这个帖子?还是要问这样的问题?我不明白他们。 :(

EDIT2:下次我会去一个玩家论坛。直到现在我都喜欢这些想法。谢谢!

【问题讨论】:

  • 不禁止从开发人员那里获得想法,但这个论坛更多的是关于实施,即如何解决问题,而不是更一般的想法。网上也有游戏论坛。这不是其中之一:)
  • 我认为这是一个完全合法的问题,它的范围可能相当广泛,但正如您从下面的答案中看到的那样,人们已经用他们的想法和经验做出了回应。也许这对于基于游戏开发的 StackExchange 来说是一个完美的问题?
  • 我也认为这是一个公平的问题。但我也认为这里的答案类型与游戏网站上的非常不同。所以我会使用一个游戏网站来获得一些关于什么构建的想法,然后来这里询问如何构建它。
  • 这个问题并不比关于如何在 Django 或 iPhone 上做一些特定的事情更具体。事实上,如果不是 Python 标记,它是一个完全“纯粹”的用于模拟现实世界的编程问题,这似乎是 SO 的最佳问题。

标签: python simulation traffic


【解决方案1】:

你不会告诉汽车去哪里。由于它的速度,它无论如何都会去。往前看(再过几个时间步长在哪里,还有路吗?)你可以看看是否需要调整速度。

道路不是数组;它是一个矩阵或位图。你不能在拐角处走那么快,否则你会飞出马路。

首先明确制定目标和范围总是一个好主意。在这种情况下,您需要考虑建模的范围(所涉及的物理特性)和汽车运动的复杂性(碰撞、跟随弯道等)。

我发现如果你能用简单的英语(或者在我的例子中是荷兰语)清楚地表达你的概念,编写代码会变得容易得多,有时几乎是微不足道的。

编辑

为了清楚起见,当我谈论速度时,我指的是一个矢量,它既有大小(10MPH)又有方向。你的向量将有 2 个元素,xy,除非你还想要飞机,或者想要模拟山丘等(你不想要山丘,因为你会还必须考虑重力:) 使用 z 位置和速度的地方。

【讨论】:

  • @extraneon:为什么这么苛刻?你甚至不知道它会是什么样的模拟,是否涉及物理等等。也许他在谈论将街道“模型”作为一个数组(一个描述基于瓷砖的世界的二维数组)...... @kame:也许你应该更具体(你的模拟重点是什么,等等.)
  • @das_weezul 你是对的。我确实听起来有点刺耳。我已经更新了答案以稍微降低刺耳性。
  • 是的,我的意思是一个基于瓷砖的世界。当您看到图片时,也许我认为每个人都明白我想做“简单”的事情。 ://
【解决方案2】:

每辆车都有一个位置、速度、方向/轨迹/目的地。根据此信息以及其他汽车的相对位置以及(最终)“路标”的存在,您可以计算每辆车的下一个位置以及汽车是否会减速或加速。

当您将一辆新车添加到模拟中时,只需设置它的初始位置、速度和目的地。

【讨论】:

    【解决方案3】:

    您还需要考虑碰撞检测,不一定是汽车本身之间的碰撞,但您需要一种方法来告诉代理(人工智能)在其他车辆附近何时适合刹车。你可以用每辆车周围的边界球来做到这一点。

    【讨论】:

      【解决方案4】:

      我鼓励您为此使用我自己的项目。它被称为GarlicSim,它是一个用于进行模拟的平台,它非常适合您想要的那种模拟。 (顺便just yesterday我做了一个大版本,0.4版)。

      这都是 Python,它也会给你一个漂亮的 GUI。

      如果你是认真的,我可以帮助你编写你的 simpack。如果您想这样做,请在邮件列表中发送邮件。

      【讨论】:

      • 这些链接已失效。我们有机会在 github 上看到这个项目吗?
      【解决方案5】:

      模拟器背后的理论是排队论。我在母校的一门课程上找到了一个页面,该页面将向您显示一些可以帮助您的关键字 - https://www.erasmus.cvut.cz/prospectus/FTS/11THO-E.html。 模拟器本身会“更容易”。

      【讨论】:

        【解决方案6】:

        有一个名为 processing 的基于 Java 的包,它面向艺术家和非程序员或初学者程序员,其中包括一些非常好的可视化功能,同时提供了一个简化的开发环境(没有“public static void main(String[ ] args)",例如)。查看展示粒子系统的演示,了解如何为您的个人汽车建模。此代码调用pyprocessing 有一个 Python 版本,它遵循许多相同的简单编程习惯。

        这是我的小"tesla" applet - 在两个球形电极之间移动鼠标。

        【讨论】:

          【解决方案7】:

          第一个问题:模拟的范围是什么?

          您可以使用复杂的 AI 和先进的照片级逼真的图形,将其像离散时间的一维元胞自动机一样简单,也可以像成熟的物理系统一样复杂(您甚至可以对引擎中的化学反应进行建模!)和音效。

          在这两者之间,有很多可能性。想想你能做什么以及你想学什么。

          【讨论】:

          • 我希望它真的很容易。就像图片中一样。汽车是二维矩形。
          • 图片是静止图像,它没有说明时间或模拟的动态。您应该制定一个详细的规范,以了解您首先要做什么。
          猜你喜欢
          • 1970-01-01
          • 2012-11-09
          • 1970-01-01
          • 2019-04-29
          • 1970-01-01
          • 1970-01-01
          • 2020-01-23
          • 1970-01-01
          • 2011-01-04
          相关资源
          最近更新 更多