Вопросы по ООП в MQL5 - страница 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:

Нескромный вопрос, с какой целью гоняемся за битами?

писал в первом сообщении из этой пьесы

нужно уменьшить количество оптимизируемых параметров - не критично

и хочу применить к новому "интовому" оптимизируемому парметру код Грея, чтобыГА оптимизатора не так быстро сходилось - Вики

 
Igor Makanu:

в общем так работает как хотелось

... плохо, если опять не правильно посчитал биты (((

Если 5-ка, то 32-х битные инты редко имеют смысл, почти никогда (только как счётчики циклов и единицы размеров, да и то по привычке)

А в 64 всё  поместится без битовых сдвигов ..

Кстати даже если 4-ка, то паковать всё-же стоит в 64-х битные величины, например в double - он востребованный 

 
Maxim Kuznetsov:

А в 64 всё  поместится без битовых сдвигов ..

не получится, лонги не оптимизируются в тестере, пару месяцев назад спрашивал почему - ответа не дали

uint - тож по моему чем то был глючный... кажется максимальное значение не давал использовать при оптимизации

поэтому только int и это (скорее всего) не будет не корректно работать в новых билдах

 
Igor Makanu:

не получится, лонги не оптимизируются в тестере, пару месяцев назад спрашивал почему - ответа не дали

uint - тож по моему чем то был глючный... кажется максимальное значение не давал использовать при оптимизации

поэтому только int и это (скорее всего) не будет не корректно работать в новых билдах

перебрать пустой цикл с лонгом - это не один месяц

вам проще тогда свой формат единый создать где первые не сколько битов - это размер, потом запись. И писать все подряд в масив байтовый. 

Байтовый массив легко копируется в любой другой

 
Alexandr Andreev:

перебрать пустой цикл с лонгом - это не один месяц

так и есть, но я давно не гонюсь за поиском идеальной ТС - что находит оптимизатор пишу в БД, но проблема в сходимости ГА вокруг группы параметров, вот решил попробовать с научным подходом  ГА взбодрить )))


Alexandr Andreev:

вам проще тогда свой формат единый создать где первые не сколько битов - это размер, потом запись. И писать все подряд в масив байтовый. 

тестить нужно, но пока надеюсь, что код Грея и мои манипуляции с группировкой оптимизируемых параметров в int позволят решить проблему сходимости ГА... там видно будет, не все так быстро как хотелось бы

 
Igor Makanu:

не получится, лонги не оптимизируются в тестере, пару месяцев назад спрашивал почему - ответа не дали

uint - тож по моему чем то был глючный... кажется максимальное значение не давал использовать при оптимизации

поэтому только int и это (скорее всего) не будет не корректно работать в новых билдах

ты параметр оптимизатору что-ли ставишь такой ?

с одной стороны - можно задать double, у него мантиса побольше 32, но можно упереться в преобразования double<->string в профиле

 
Maxim Kuznetsov:

ты параметр оптимизатору что-ли ставишь такой ?

нет

оптимизируемых параметров больше 10, пределы оптимизации выставляю - все работает шустро, но ГА может вокруг 2-х параметров нашать сходиться и все - толку нет дальше оптимизировать

приходится или группировать параметры и прогонять по группам или просто перезапускать оптимизацию и чистить кеши

в общем эксперимент хочу, а вдруг Вики про ГА правду пишет

Коды Грея широко применяются в теории генетических алгоритмов [3] для кодирования генетических признаков, представленных целыми числами.

 
Igor Makanu:

нет

оптимизируемых параметров больше 10, пределы оптимизации выставляю - все работает шустро, но ГА может вокруг 2-х параметров нашать сходиться и все - толку нет дальше оптимизировать

приходится или группировать параметры и прогонять по группам или просто перезапускать оптимизацию и чистить кеши

в общем эксперимент хочу, а вдруг Вики про ГА правду пишет

коды Грея иногда применяются в протоколах передачи данных, просто потому что. Собственно для них и сделаны были :-)

про ГА скорее "для красного словца". Ну вот как код Грея может помочь сходимости ? вот просто теоретически...

с тем-же успехом можно случайно-перемешивать

Причина обращения: