使用马尔可夫模型生成用于太阳能收集的随机数

问题描述 投票:0回答:2

如何在 C# 中使用马尔可夫模型生成 随机数?我在这里注意到,马尔可夫算法的几乎所有应用都是用于随机写入文本。是否有源代码或教程可以让我完全理解它是如何工作的?我的目标实际上是生成随机数来模拟太阳能收集

c# random simulation markov
2个回答
1
投票

首先决定你的马尔可夫模型有多深。你看前面的数字吗?前两个数字?前三个数字?也许更深?

其次,查看一些实际的太阳能数据并提取一组 1、2 或 3 个数字后面的概率。理想情况下,您将能够获得完整的覆盖范围,但很可能存在差距。对于那些推断或输入一些平均值/随机值的人。

到目前为止所有这些都是数据。

第三步生成前 1、2 或 3 个数字。从您的数据库中选择正确的组合并随机选择可能的追随者之一。当我这样做时,我也可能有一个低概率的随机元素,这样事情就不会陷入困境。

删除 1、2 或 3 个数字中最早的元素。将其他数字向下移动并在末尾添加新数字。重复直到有足够的数据。

这是我的 1 深马尔可夫词生成器的简短摘录,显示了数据表的一部分:

// The line addEntry('h', "e 50 a 23 i 12 o  7 @ 100") shows the the letter
// 'h' is followed by 'e' 50% of the time, 'a' 23% of the time, 'i' 12% of 
// the time, 'o' 7% of the time and otherwise some other letter, '@'.
//
// Figures are taken from Gaines and tweaked. (see 'q')
private void initMarkovTable() {
    mMarkovTable = new HashMap<Character, List<CFPair>>(26);

    addEntry('a', "n 21 t 17 s 12 r 10 l  8 d  5 c  4 m  4 @ 100");
    addEntry('b', "e 34 l 17 u 11 o  9 a  7 y  5 b  4 r  4 @ 100");
    addEntry('c', "h 19 o 19 e 17 a 13 i  7 t  6 r  4 l  4 k  4 @ 100");
    addEntry('d', "e 16 i 14 a 14 o 10 y  8 s  6 u  5 @ 100");
    addEntry('e', "r 15 d 10 s  9 n  8 a  7 t  6 m  5 e  4 c  4 o  4 w 4 @ 100");
    addEntry('f', "t 22 o 21 e 10 i  9 a  7 r  5 f  5 u  4 @ 100");
    addEntry('g', "e 14 h 14 o 12 r 10 a  8 t  6 f  5 w  4 i  4 s  4 @ 100");
    addEntry('h', "e 50 a 23 i 12 o  7 @ 100");
    // ...
}

数据以字母频率对的形式组织。我使用“@”字符来表示“在此处选择任何字母”。您的数据将改为数字频率对。

为了选择输出,我读取相应的数据行并生成随机百分比。长时间扫描数据累积频率,直到累积频率超过随机百分比。这就是您选择的字母(或您的情况下的数字)。


0
投票

在“太阳能”收集的背景下利用马尔可夫模型生成随机数涉及应用数学框架来模拟太阳辐射的随机性质。马尔可夫模型可以捕获不同阳光强度状态之间的概率转变。通过将此类模型纳入模拟中,研究人员和工程师可以生成真实的随机数序列,模拟太阳能可用性的变化。这种方法有助于设计和优化太阳能系统,从而可以更准确地评估和有效利用可再生能源。

© www.soinside.com 2019 - 2024. All rights reserved.