- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为了简化问题并希望得到答案,我将提供一个略为简化的版本。
设置固定条件:
房间内允许的最大氧气量=100000单位
室内维持的目标氧气量=100000单位
每秒最大空气处理周期=每秒3个周期(min为0.3)
每秒使用的能量(瓦特)是这样的公式:(100W*周/秒)的平方
按“循环”添加到空气中的最大氧=100个单位(最小0个单位)
一个人每秒消耗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.以前的循环每循环增加氧气单位(从0到100单位/循环)
H.先前对当前占用最大(0至100人)的变更
以下是我的程序可以执行的操作(输出):
以(每秒0.0到0.1个周期)的增量/减量更改每秒周期
改变每周期增加的氧气单位(从0到100单位/周期)
改变当前占用最大(0至100人)-(基本上允许强制占用减少,然后允许其归一化到最大值)
该计划的目标是保持以下方面的内部平衡:
房间里有将近100000单位的氧气
永远不要让房间的氧气降到0单位。
允许在不强行拆除的情况下尽可能长地占用每个房间的100人(因为房间中的O2随着时间的推移而耗尽,接近0个单位的人应该被从房间移至最小,然后允许最大恢复到100,因为越来越多的02被添加回房间)。
理想情况下,使用维持上述两种状态所需的最小能量(瓦特)。例如,如果房间的氧气减少到90000单位,而目前房间里有10个人(每秒使用100单位的氧气)。然后,不再以每秒3.0个循环(90千瓦)和每秒100个单位的速度运行,而是在50秒内补充300个单位/秒的总量(比消耗的100个单位多出200个单位),以补充10000个单位的不足,总共使用4500千瓦。-以2.0周/秒(40kw)的速度运行更为理想,即每秒生产200台(比消耗量多出100台),持续100秒,以补充10000台的不足,并使用总计4000kw。
注:根据无法控制的外部因素(比如说人们自由进出房间),入住率可能会从秒到秒波动。该系统唯一的控制是强制将人员从房间中移出,和/或通过及时更改下一个周期允许的最大容量来防止新人员进入房间(让我们说系统可以做到这一点)。我们不希望这个系统仅仅因为它只能支持每秒输出足够的氧气来满足30人的满负荷运行就永久性地降低容量。我们有大量的可用氧气,需要一段时间才能耗尽到危险的水平,并要求系统强制降低容量。
我的问题是:
有人能给我解释一下我如何配置这个神经网络,这样它就可以通过监控期望的结果从每个动作(周期)中学习。我的挑战是,我在这个主题上找到的大多数文章都假设您知道正确的输出答案(即:我知道A、B、C、D、E输入都是特定值,那么输出1应该每秒增加0.1个周期)。
但我想要的是满足我在上述目标中提出的条件。所以每次程序做一个循环,假设它决定尝试增加每秒的循环次数,结果是可用的氧气减少的量比前一个循环减少的量少,或者现在又增加到100000,那么这个输出可以被认为比减少每秒的循环次数或保持每秒电流周期。我在这里进行简化,因为有多个变量可以创造“理想”的结果——但我想我已经说明了我追求的目标。
代码:
对于这个测试练习,我使用一个名为swift a i的swift库(特别是它的neuralnet模块:https://github.com/Swift-AI/NeuralNet
因此,如果您想针对该库定制您的响应,这将是有帮助的,但不是必需的。我更多的只是寻找如何建立网络的逻辑,然后根据我上面列出的这些条件配置它来进行初始和迭代的自我训练。我会假设在足够的周期和不同的条件下,在某个时刻它会有适当的重量设置来处理任何未来的条件,再训练会变得越来越不有效。
最佳答案
这是一个控制问题,不是一个预测问题,所以你不能只使用有监督的学习算法。(正如你注意到的,你没有直接通过反向传播学习的目标值。)你仍然可以使用神经网络(如果你真的坚持的话)。看看reinforcement learning。但是,如果你已经知道当你采取强迫人们离开的行动时,氧气水平会发生什么变化,为什么你会通过数百万次反复评估来了解这样一个简单的事实,而不是将其编码成一个模型?
我建议看看model predictive control。如果没有别的,你应该研究一下这个问题是如何被陷害的。甚至可能只是普通的旧的PID control。用很少的状态变量来建立这个过程的动力学模型似乎很容易。
在这个模型中可能有一些未知参数需要学习“在线”。但是一个简单的pid控制器已经可以容忍和补偿一定量的不确定性。对一些参数进行微调要比从头学习一般的因果结构容易得多。这是可以做到的,但需要尝试所有可能的行动。据你的算法所知,最好的办法可能是通过杀死氧气消耗者,将氧气消耗者的数量永久性地减少到零,然后获得一笔巨大的奖励,用很少的能量维持氧气水平。当算法对这个问题一无所知时,它将不得不尽一切努力来发现效果。
关于swift - 神经网络如何在无法直接控制的外部条件下从测试输出中学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013972/
我是一名优秀的程序员,十分优秀!