MQL5中的OOP问题 - 页 94

 
Igor Makanu:

我可以用一个 "正面 "的解决方案从int中做出重要的位子,但我不能做出一个普遍的解决方案......。我不能!()()。

我极有可能没有解释我想怎么走,走到哪里去。

这里有4个字节的int/uint,还有我的数据集,我想在优化器中解压

让我们假设我成功地以这种方式包装它。

0-8 9-16 17-24 25-32
int_11 int_9 int_12

我需要什么类型的int_XXX,我还没有估计到。

但我想有一个可用性的代码形式

总的来说,它按我希望的那样运作

//+------------------------------------------------------------------+
// value - значение
// pos - бит начала числа
// cnt_bits - общее количество занимаемых бит
//+------------------------------------------------------------------+
int BitsToInt(const uint value, const uint pos, const uint cnt_bits)
{
   uint mask_value = (0x7FFFFFFF >> (sizeof(uint) * 8 - cnt_bits)) << pos;
   uint mask_sign = 1 << (pos + cnt_bits - 1);
   int sign = (bool)(value & mask_sign) ? -1 : 1;
   return(sign * (int)((value & mask_value) >> pos));
}
//+------------------------------------------------------------------+
void OnStart()
{
   uint v = 0x7F << 12;
   Print(BitsToInt(v, 12, 8));   // 127
   v = 0xFF << 12;
   Print(BitsToInt(v, 12, 8));   // -127
}
//+------------------------------------------------------------------+

...太糟糕了,如果我又数错了位子(())。

 
Igor Makanu:

总的来说,它的效果和我希望的一样好。

...太糟糕了,如果位数又算错了(())。

不谦虚的问题,追逐比特的目的是什么?

 
Alexandr Andreev:

不谦虚的问题,追赶蝙蝠的目的是什么?

在本篇文章的第一篇中写道

我们需要减少可优化参数的数量--这并不重要

并希望将Gray的代码应用于一个新的 "int "优化参数,这样优化器的GA就不会那么快收敛--Wiki

 
Igor Makanu:

总的来说,它的效果和我希望的一样好。

...如果再算错位子就不好了((())。

如果是5,32位整数很少有意义,几乎没有(只作为循环计数器和大小单位,这也是出于习惯)。

而且所有的东西都适合于64位,没有位的转移。

顺便说一下,即使你有一个4,你仍然应该装入64位的值,例如装入double - 它是有需求的。

 
Maxim Kuznetsov:

而64将适合所有的东西,没有位的转移......。

不可能,经度在测试器中没有被优化,几个月前我问过为什么 - 没有答案

uint - 我认为这也是小故障...我认为在优化过程中不允许使用最大的值

所以只有int,而且它(很可能)在新的构建中不能正确工作。

 
Igor Makanu:

不可能,长线在测试器中没有被优化,我几个月前问过他们--他们没有给我答案。

uint - 我认为这也是小故障...在优化过程中,似乎不允许使用最大值。

所以只有int,而且它(很可能)在新的建筑中无法工作。

你要花一个多月的时间来检修一个有记录的空循环。

你最好创建你自己的格式,前几位是大小,然后是记录。而且你应该把所有的东西都写在字节数组中。

一个字节数组可以很容易地被复制到任何其他的

 
Alexandr Andreev:

需要一个多月的时间来完成一个长距离的空循环。

原来如此,但我长期以来并不追求理想的TS--优化器找到的东西我都写在数据库里,但问题出在围绕一组参数的GA收敛上,所以我决定尝试用科学的方法为GA打气 ))))


Alexandr Andreev:

创建你自己的格式更容易,前几位是大小,然后是记录。并将所有内容写入字节数组中。

我需要测试,但现在我希望,格雷的代码和我对可优化参数分组的操作将有助于解决GA的收敛问题。我们将拭目以待,并不是所有的事情都像我们希望的那样快。

 
Igor Makanu:

不可能,长线在测试器中没有被优化,我几个月前问过他们--他们没有给我答案。

uint - 我认为这也是小故障...在优化过程中,似乎不允许使用最大值

所以只有int,而且它(很可能)在新的构建中不能正确工作。

你是否对优化器设置了这个参数?

一方面,你可以设置double,它有一个比32更多的mantis,但你可能会在配置文件中被double<->string的转换所困扰

 
Maxim Kuznetsov:

你是否像这样设置优化器参数?

我有10多个可优化的参数,我设置了优化限制,一切都运行得很快,但GA可以绕过2个参数,就是这样--优化没有用了。

我必须对参数进行分组并按组运行,或者直接重新启动优化并清除缓存。

我想做一个实验,检查维基对GA的看法是否正确

格雷码在遗传算法理论中被广泛使用[3],用于对由整数表示的遗传特征进行编码。

 
Igor Makanu:

我有10多个优化的参数,我设置了限制,一切工作都很快,但GA可以收集2个左右的参数,不需要再优化了。

我必须对参数进行分组并按组运行,或者直接重新启动优化并清除缓存。

我想做一个实验,检查维基对GA的看法是否正确

格雷码有时被用于数据传输协议,只是因为。事实上,他们是为他们而生的 :-)

GA更像是一个 "流行词"。格雷的代码如何帮助收敛? 只是理论上的...

你还不如直接随机洗牌呢