为了简化问题并希望简化答案,我将提供一个我试图做的简化版本。
设定固定条件:
- 房间内允许的最大氧气体积 = 100,000单位
- 房间内维持的目标氧气体积 = 100,000单位
- 每秒最大空气处理周期 == 3.0周期/秒(最小值为0.3)
- 每秒使用的能量(瓦特)公式为:(100w * 每秒周期数)SQUARED
- 每“周期”增加到空气中的最大氧气量 = 100单位(最小值为0单位)
- 1人每秒消耗10单位氧气
- 房间最大容纳人数为100人(最少1人)
- 输入每周期处理一次,输出可以在每个周期改变 – 但是如果一个输出被反馈为输入,它只能影响下一个周期。
假设我有这些输入:
- A. 房间内当前氧气量(范围:为简单起见0到1000单位 – 可以标准化)
- B. 房间内当前人数(最大容量为0到100人)或/和可以更改为房间内所有人每秒消耗的总氧气量(0到1000单位/秒)
- C. 当前每秒空气处理周期数(0.3到3.0周期/秒)
- D. 当前使用的能量(这是上述当前每秒周期数 * 100然后平方)
- E. 每周期当前增加到空气中的氧气量(0到100单位)
(可能反馈为输入的输出?):
- F. 之前每秒周期数的变化(+或- 0.0到0.1周期/秒)
- G. 之前每周期增加的O2单位数(从0到100单位/周期)
- H. 之前当前最大容纳人数的变化(0到100人)
我的程序可以采取的行动(输出)如下:
- 通过增加/减少(0.0到0.1周期/秒)改变每秒周期数
- 改变每周期增加的O2单位数(从0到100单位/周期)
- 改变当前最大容纳人数(0到100人) – (基本上允许强制减少人数,然后允许人数恢复到最大值)
程序的目标是维持以下状态的稳态:
- 尽可能接近房间内100,000单位的O2
- 绝不允许房间内的O2单位降至0
- 允许房间内最多100人尽可能长时间的当前占用,而不强制移除人员(随着时间推移,房间内的O2耗尽并接近0单位时,应将人员从房间移除至最低限度,然后随着更多的O2被添加回房间,允许最大人数恢复到100)
- 理想情况下,使用维持上述两个条件所需的最小能量(瓦特)。例如,如果房间内的O2降至90,000单位,并且目前房间内有10人(每秒消耗100单位O2),那么与其以3.0周期/秒(90千瓦)运行并以每秒100单位补充总共每秒300单位(相对于消耗的100单位有200单位的剩余)在50秒内补充10,000单位的赤字,总共使用4500千瓦 – 更理想的是以2.0周期/秒(40千瓦)运行,这将每秒产生200单位(相对于消耗的单位有100单位的剩余),在100秒内补充10,000单位的赤字,总共使用4000千瓦。
注意:根据无法控制的外部因素,人数可能会每秒波动(假设人们自由进出房间)。系统唯一能控制的是强制将人从房间移除和/或通过更改下一个周期允许的最大容量来阻止新人进入房间(假设系统可以做到这一点)。我们不希望系统仅仅因为它只能支持以全功率为30人输出足够的O2每秒,就永久性地减少容量。我们有大量可用的O2,在耗尽到危险水平之前需要一段时间,这将要求系统强制减少容量。
我的问题:
能否有人向我解释如何配置这个神经网络,以便它可以通过监控所需结果从每次行动(周期)中学习。我在这里面临的挑战是,我找到的大多数文章都假设你知道正确的输出答案(即:我知道A、B、C、D、E输入都是特定值,那么输出1应该是增加0.1周期/秒)。
但我想要的是满足我在上述目标中列出的条件。所以每次程序进行一个周期,假设它决定尝试增加每秒周期数,结果是可用的O2要么比前一个周期下降的幅度更小,要么现在正在增加回100,000,那么这个输出可以被认为比减少每秒周期数或维持当前每秒周期数更正确。我在这里简化了,因为有多个变量会创造“理想”的结果 – 但我想我已经说明了我的目标。
代码:
对于这个测试练习,我使用了一个名为Swift-AI的Swift库(特别是它的NeuralNet模块:https://github.com/Swift-AI/NeuralNet
所以如果你想根据那个库来定制你的回答会很有帮助,但不是必需的。我更希望了解如何设置网络,然后根据我上面列出的条件配置它进行初始和迭代的重新训练。我假设在足够多的周期和不同的条件之后,它将设置适当的权重来处理任何未来的条件,重新训练的影响将变得越来越小。
回答:
这是一个控制问题,而不是预测问题,所以你不能仅仅使用监督学习算法。(正如你所注意到的,你没有通过反向传播直接学习的目标值。)你仍然可以使用神经网络(如果你真的坚持)。请查看强化学习。但如果你已经知道当你采取像强制人们离开这样的行动时氧气水平会发生什么,为什么要通过数百万次的试错评估来学习这些简单的事实,而不是将其编码到模型中呢?
我建议查看模型预测控制。如果没有其他,至少你应该研究那里是如何构建问题的。或者甚至只是简单的旧PID控制。用几个状态变量制作这个过程的良好动态模型似乎非常容易。
你可能在这个模型中有一些需要“在线”学习的未知参数。但一个简单的PID控制器已经可以容忍并补偿一定程度的不确定性。而且调整几个参数比从头开始学习一般的原因-效果结构要容易得多。可以做到,但这涉及尝试所有可能的行动。对于你的算法所知,最好的行动可能是通过杀死他们永久性地将氧气消耗者人数减少到零,然后因为以少量能量维持氧气水平而获得巨大的奖励。当算法对问题一无所知时,它将不得不尝试一切来发现效果。