成本函数设计的困难:
1.包括在不解决见问题的情况下解决新的问题。当你在自驾车上工作时,
你可能会发现车辆行为合理,除了一些特定的情况。也许它在红绿灯左转时没有足够的攻击性。
所以,为了解决这个问题,您可以添加新的成本函数,调整现有的或修改权重。
但每次你做,你有可能会介绍有些将变革转化为已经发挥作用的东西。
实际上,我们通过回归测试来解决这个问题,我们在那里定义一些情况,
每一个都有预期的行为。那么,每当我们做出改变,我们模拟整个车辆
我们的测试用例,并确保它仍然按预期行事。我们在这里不会多说测试,
但它是在安全关键应用程序中开发软件的重要组成部分。
2.下一个难题是平衡截然不同幅度的成本。
因为,是的,我们希望有效地到达目的地,但如果我们处于安全问题的情况下,
我们想要解决这个问题,而不是考虑效率。做到这一点的一种方法是拥有权重
反映成本函数解决的问题类型。所以我们想要最重的惩罚任何由于物理原因都不可能的行为,
那么我们想要考虑安全性,合法性,舒适性。只有那些满意的人才会考虑效率。
但我们也可能想调整这些权重的相对重要性取决于情况。
例如,如果灯变红,合法性成为一个更相关的关切
比我们在正常的高速公路上行驶时要高。这导致我们最后的困难,
推理个人成本函数。理想情况下,每个成本函数都将承担非常具体的责任,
这是我们之前在速度成本函数中没有做的事情。
我们试图平衡我们快速开车的欲望,
这与效率有关,我们希望不超过速度限制,这是合法性。
在实践中,我们可能想要定义几种与车速相关的成本函数。
在这种情况下,我们可能会有一个二进制代价函数,它只是检查我们是否是
突破速度极限和持续成本函数使我们朝着目标速度前进。通过将每个成本函数分配给一个非常具体的角色,
如安全与合法性与效率,我们可以将所有成本函数的输出标准化为-1和1之间的值。
此外,只要有可能,就有助于参数化。这使我们可以使用一些参数优化技术
随着我们的设置渐变下降,回归测试以编程方式调整我们的成本函数。
最后,从车辆状态角度考虑是有帮助的。我们可以间接控制的东西,我们的车辆是它的位置,速度和加速度。
在提出成本函数时,记住这些内容会很有帮助。
我们来看一个例子。假设我们想要考虑以下几类成本函数。包括可行性、安全性、合法性、舒适性、高效性
让我们考虑位置,速度和加速度。
二进制“我们超速吗?”成本函数会在这里,
那么想要让我们接近速度限制的成本函数就会到达这里。
而现在,不是我们之前提出的那种奇怪的不连续图,这可能只是这样的抛物线。尽管即使速度超过限制速度,成本也很低,
这是可以的,因为我们有我们的二进制代价函数来防止这种行为。
继续考虑速度,我们也可能想尝试驾驶接近平均交通速度的速度,
出于安全原因,即使该速度高于或低于速度限制。那会在这里。
在职位栏中,我们会有一个明显的可行性问题,就是避免碰撞。
如果那里已经有汽车,我们就不能开车。然后,出于安全原因,我们会想要缓冲距离,
它试图让我们远离其他车辆,以及检查以确保我们正在开车的成本函数靠近我们车道中心的道路以及靠近我们的目标车道的车道上。
为了加速,我们首先想要确保我们只考虑汽车可以执行的行为,然后我们希望避免有任何快速变化。
因为那些被认为不舒服。你将在下一课中了解更多。
例如,考虑合并到高速公路上。这真是一个潜在的危险情况,想尽快赶上交通速度。
所以这个成本函数(accerration is feaible for car)可能会变得比通常情况更相关。
但是我们也希望确保我们在没有差距的情况下获得收益,所以我们要确保(Avoid collision )这个成本函数和(buffer distence)这个成本函数的权重足够高。
我们可以将这些合并优先级与不同的情况进行比较。例如,一辆汽车接近突然变黄的绿灯。
在这种情况下,我们可能想要增加与之相关的权重合法性,可能需要补充一种遵守交通规则的全新成本功能。
现在,它并没有完全落入这个位置,速度或加速度类别,所以我会把它放在这里。
如果这一切都开始觉得它变得相当复杂,那么你是对的。使用有限状态机很难避免这种爆炸性的复杂性。
部分原因是由于有限的状态机本身,但我们也在努力解决一个非常困难的问题
无论采取什么解决方案,一些复杂性都是不可避免的。