我过去3个月一直在研究模糊逻辑SDK,它已经到了我需要开始大量优化引擎的地步.
与大多数基于"实用"或"需要"的AI系统一样,我的代码通过在世界各地放置各种广告,将所述广告与各种代理的属性进行比较,并相应地"基于每个代理"对广告进行"评分"来工作.
反过来,这会为大多数单一代理模拟生成高度重复的图形.但是,如果考虑到各种代理,则系统变得非常复杂并且使我的计算机难以模拟(因为代理可以在彼此之间广播广告,创建NP算法).
下图:针对单个代理的3个属性计算的系统重复性示例:
上:根据3个属性和8个代理计算的系统示例:

(在开始时折叠,并在之后不久恢复.这是我能够生成的最适合图像的示例,因为恢复通常非常慢)
从两个示例中可以看出,即使代理计数增加,系统仍然是高度重复的,因此浪费了宝贵的计算时间.
我一直在尝试重新构建程序,以便在高重复性期间,更新功能仅连续重复线图.
虽然我的模糊逻辑代码当然可以提前预测计算系统的崩溃和/或稳定性,但它对我的CPU极为不利.我正在考虑机器学习是最好的选择,因为似乎一旦系统初始设置被创建,不稳定时期总是看起来大致相同(但它们出现在"半")随机时间.我说半,因为它通常很容易通过图表上显示的不同模式注意到;但是,就像不稳定的长度一样,这些模式从设置到设置都有很大差异).
显然,如果不稳定期间的时间长度相同,一旦我知道系统何时崩溃,它很容易弄明白何时会达到平衡.
在关于该系统的附注中,并非所有配置在重复期间都是100%稳定的.
图中非常清楚地显示:

因此,机器学习解决方案需要一种方法来区分"伪"折叠和完全折叠.
使用ML解决方案的可行性如何?任何人都可以推荐任何最适合的算法或实现方法吗?
至于可用资源,评分代码根本不能很好地映射到并行体系结构(由于代理之间的纯粹互连),所以如果我需要专门用一个或两个CPU线程来进行这些计算,那就这样吧.(我不想使用GPU,因为GPU正在与我的程序中不相关的非AI部分征税).
虽然这很可能没有什么区别,但代码运行的系统在执行期间还剩下18GB的RAM.因此,使用可能高度依赖数据的解决方案肯定是可行的.(虽然除非必要,我宁愿避免它)
artificial-intelligence machine-learning data-mining pattern-matching fuzzy-logic
花了一整天的调试后,我注意到在调用以下函数时总会发生内存泄漏:
void merge(TContainer<T> List2)
{
TContainer<T> temp(this->Size);
for (int i = 0; i < this->Size; i++)
{
temp.Interface[i] = this->Interface[i];
}
this->Interface = new T[Size + List2.size()];
Size = Size + List2.size();
for(int i = 0; i < List2.size(); i++)
{
Interface[i] = List2[i];
}
for(int i = List2.size(); i < Size; i++)
{
Interface[i] = temp[i];
};
delete[] temp.Interface;
}
Run Code Online (Sandbox Code Playgroud)
在代码中:
TContainer_Short<unsigned short> Temp = TContainer_Short<unsigned short>(0);
for(int i = (ToUpdate.size() - 1); i >= 0; i--)
{
UpdateInUse …Run Code Online (Sandbox Code Playgroud)