.NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 28.05.04 14:37
Оценка:
Всем привет.

Решил переделать одну свою старую программу. Но вот не знаю стоит ли это писать на C# (чтобы заодно потренироваться). Прога использует генетический алгоритм. Старая С-шная (С++) прога работала где-то несколько минут на 500-ом проце (AMD).

Вопрос в том, какие потенциальные проблемы могут быть со скоростью и вообще стоит ли писать такие алгоритмы на C# (да и вообще под .NET)?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re: .NET и генетические алгоритмы
От: ilnar Россия  
Дата: 28.05.04 14:57
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Всем привет.


J>Решил переделать одну свою старую программу. Но вот не знаю стоит ли это писать на C# (чтобы заодно потренироваться). Прога использует генетический алгоритм. Старая С-шная (С++) прога работала где-то несколько минут на 500-ом проце (AMD).


J>Вопрос в том, какие потенциальные проблемы могут быть со скоростью и вообще стоит ли писать такие алгоритмы на C# (да и вообще под .NET)?


одну реализацию генетического алгоритма на С#, хорошую по предоставляемым параметрам управления, видел на www.codeproject.com — может взять, посмотреть. там есть много вариантов для различных задач.
но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.
Re[2]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 28.05.04 16:32
Оценка:
Здравствуйте, ilnar, Вы писали:

I>Здравствуйте, Jenyay, Вы писали:


J>>Всем привет.


J>>Решил переделать одну свою старую программу. Но вот не знаю стоит ли это писать на C# (чтобы заодно потренироваться). Прога использует генетический алгоритм. Старая С-шная (С++) прога работала где-то несколько минут на 500-ом проце (AMD).


J>>Вопрос в том, какие потенциальные проблемы могут быть со скоростью и вообще стоит ли писать такие алгоритмы на C# (да и вообще под .NET)?


I>одну реализацию генетического алгоритма на С#, хорошую по предоставляемым параметрам управления, видел на www.codeproject.com — может взять, посмотреть. там есть много вариантов для различных задач.

I>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.

Но разработка будет быстрей.
Re[3]: .NET и генетические алгоритмы
От: lextasy Украина www.mira-tech.com.ua
Дата: 28.05.04 16:35
Оценка:
Здравствуйте, henson, Вы писали:

H>Но разработка будет быстрей.


А почему?
Re[4]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 28.05.04 16:52
Оценка:
Здравствуйте, lextasy, Вы писали:

L>Здравствуйте, henson, Вы писали:


H>>Но разработка будет быстрей.


L>А почему?


Нормальная объектная модель + автоматический сбор мусора = экономия времени
Re[2]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 28.05.04 18:02
Оценка:
Здравствуйте, ilnar, Вы писали:

I>одну реализацию генетического алгоритма на С#, хорошую по предоставляемым параметрам управления, видел на www.codeproject.com — может взять, посмотреть. там есть много вариантов для различных задач.


Да, я что-то там тоже видел. Но хочется все самому сделать (причем и на C# и на плюсах). Скорее всего буду поглядывать как это сделано у них.

I>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.


Алгоритм будет тот же, а вот реализация другая, т.к. там юзал чужую dll-ку (GeneHunter), а хочется более объектно-ориентированно. Можно было бы сделать классовую (класную ) оболочку, но интересно все самому. Вообще у меня идея (фикс ) сделать общие классы (правда пока идеи на C++ с шаблонами), чтобы потом было бы легко подстраивать под любые объекты.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[5]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 28.05.04 18:05
Оценка:
Здравствуйте, henson, Вы писали:

H>Нормальная объектная модель + автоматический сбор мусора = экономия времени


Вот это тоже важно, т.к. сейчас прога написана на чистых API, а я пока колеблюсь между WTL и .NET.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[3]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 28.05.04 20:04
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, ilnar, Вы писали:


I>>одну реализацию генетического алгоритма на С#, хорошую по предоставляемым параметрам управления, видел на www.codeproject.com — может взять, посмотреть. там есть много вариантов для различных задач.


J>Да, я что-то там тоже видел. Но хочется все самому сделать (причем и на C# и на плюсах). Скорее всего буду поглядывать как это сделано у них.


I>>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.


J>Алгоритм будет тот же, а вот реализация другая, т.к. там юзал чужую dll-ку (GeneHunter), а хочется более объектно-ориентированно. Можно было бы сделать классовую (класную ) оболочку, но интересно все самому. Вообще у меня идея (фикс ) сделать общие классы (правда пока идеи на C++ с шаблонами), чтобы потом было бы легко подстраивать под любые объекты.


А результат сделаете Freeware?
Re[4]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 04:45
Оценка:
Здравствуйте, henson, Вы писали:

H>А результат сделаете Freeware?


Да сюда и выложу. Главное, чтобы время после сессии появилось.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[5]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 06:49
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, henson, Вы писали:


H>>А результат сделаете Freeware?


J>Да сюда и выложу. Главное, чтобы время после сессии появилось.


Кстати есть у меня задачка определения является ли число простым. Но само число огромное, можно ли этот вопрос решить генетическим алгоритмом?
Re[6]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 08:13
Оценка:
Здравствуйте, henson, Вы писали:

H>Кстати есть у меня задачка определения является ли число простым. Но само число огромное, можно ли этот вопрос решить генетическим алгоритмом?


Мне кажется, что нет, т.к. в ген. алгоритме нужна целевая функция, которая показывает, насколько вид близок к идеалу. А здесь такая функция как-то не придумывается. Ты же ен можешь сказать, насколько это число простое. Оно или простое или нет.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[5]: .NET и генетические алгоритмы
От: WolfHound  
Дата: 29.05.04 09:41
Оценка: +1
Здравствуйте, henson, Вы писали:

H>Нормальная объектная модель + автоматический сбор мусора = экономия времени

Очень спорное утверждение.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 11:54
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, henson, Вы писали:


H>>Кстати есть у меня задачка определения является ли число простым. Но само число огромное, можно ли этот вопрос решить генетическим алгоритмом?


J>Мне кажется, что нет, т.к. в ген. алгоритме нужна целевая функция, которая показывает, насколько вид близок к идеалу. А здесь такая функция как-то не придумывается. Ты же ен можешь сказать, насколько это число простое. Оно или простое или нет.


Ну а подобрать допустим коэффициенты полинома через известные простые числа?
Re[6]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 11:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, henson, Вы писали:


H>>Нормальная объектная модель + автоматический сбор мусора = экономия времени

WH>Очень спорное утверждение.

Я сужу по себе. По сравнению с Visual C++&(MFC|ATL) скорость разработки на C# раза в два выше
Re[8]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 12:41
Оценка:
Здравствуйте, henson, Вы писали:

H>Ну а подобрать допустим коэффициенты полинома через известные простые числа?


Какого полинома? Простое число — это когда перемножаются 2 простых числа.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[7]: .NET и генетические алгоритмы
От: WolfHound  
Дата: 29.05.04 13:34
Оценка:
Здравствуйте, henson, Вы писали:

H>Я сужу по себе. По сравнению с Visual C++&(MFC|ATL) скорость разработки на C# раза в два выше

Скорость разработки чего?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: .NET и генетические алгоритмы
От: AndrewJD США  
Дата: 29.05.04 14:02
Оценка:
Здравствуйте, Jenyay, Вы писали:


J>Какого полинома? Простое число — это когда перемножаются 2 простых числа.


Мне кажеться это будет совсем не простое число
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[8]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 14:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, henson, Вы писали:


H>>Я сужу по себе. По сравнению с Visual C++&(MFC|ATL) скорость разработки на C# раза в два выше

WH>Скорость разработки чего?

Как чего? Приложений, тут же речь об этом.
Re[10]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 14:50
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Jenyay, Вы писали:



J>>Какого полинома? Простое число — это когда перемножаются 2 простых числа.

AJD>
AJD>Мне кажеться это будет совсем не простое число

Гыгыгыг, простое — это как раз когда никакими перемножениями невозможно его получить. Т.е. делится на 1 и на само себя, например 3, 7 и т.д.
Re[9]: .NET и генетические алгоритмы
От: WolfHound  
Дата: 29.05.04 15:06
Оценка:
Здравствуйте, henson, Вы писали:

H>Как чего? Приложений, тут же речь об этом.

Каких приложений?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 15:11
Оценка:
Здравствуйте, AndrewJD, Вы писали:

J>>Какого полинома? Простое число — это когда перемножаются 2 простых числа.

AJD>
AJD>Мне кажеться это будет совсем не простое число

Ну да
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[11]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 15:11
Оценка:
Здравствуйте, henson, Вы писали:

H>Гыгыгыг, простое — это как раз когда никакими перемножениями невозможно его получить. Т.е. делится на 1 и на само себя, например 3, 7 и т.д.


... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[10]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 29.05.04 15:11
Оценка:
Здравствуйте, WolfHound, Вы писали:

H>>Как чего? Приложений, тут же речь об этом.

WH>Каких приложений?

Хочется верить, что работающих. Хотя к чему ты клонишь я понял
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[11]: .NET и генетические алгоритмы
От: WolfHound  
Дата: 29.05.04 16:10
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Хочется верить, что работающих. Хотя к чему ты клонишь я понял

К тому что приложение-приложению рознь. И если все сводится например к рисованию форм то тут ВинФормс по сравнению с МФЦ рулит однозначно.
Однако есть приложения где С++ со своими автоматическими деструкторами и шаблонами начинает рулить. А есть приложения которые на .НЕТ вобще не напишешь... ну ни как он в требования тз не вписывается... толстый больно.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 29.05.04 17:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Jenyay, Вы писали:


J>>Хочется верить, что работающих. Хотя к чему ты клонишь я понял

WH>К тому что приложение-приложению рознь. И если все сводится например к рисованию форм то тут ВинФормс по сравнению с МФЦ рулит однозначно.
WH>Однако есть приложения где С++ со своими автоматическими деструкторами и шаблонами начинает рулить. А есть приложения которые на .НЕТ вобще не напишешь... ну ни как он в требования тз не вписывается... толстый больно.

Тут идет обсуждение программы с генетическим алгоритмом. Примерно представляю суть и объем. Сравнил с аналогичным по трудоемкости приложением.
Re[5]: .NET и генетические алгоритмы
От: lextasy Украина www.mira-tech.com.ua
Дата: 30.05.04 09:27
Оценка:
Здравствуйте, henson, Вы писали:

H>>>Но разработка будет быстрей.

L>>А почему?
H>Нормальная объектная модель + автоматический сбор мусора = экономия времени

А вот посмотрим на C++:

1) Мощнейшая объектная модель + STL = C# отдыхает.
2) Грамотное использование класса памяти auto = сборщик мусора .Net тоже отдыхает .
3) Огромное количество великолепных инструментов отладки и профилирования (взять хотя бы продукты компании NuMega) + полностью детерминированная логика выполнения программы (никаких отложенных на неопределенный срок вызовов деструкторов и т.п.) — .Net снова может расслабиться .

По-моему, на C++ эта задача быстрее решается, причем результат будет более качественным. В самом Микрософте такую задачу вряд ли бы под .Net стали решать.
Re[6]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 30.05.04 09:43
Оценка:
Здравствуйте, lextasy, Вы писали:

L>Здравствуйте, henson, Вы писали:


H>>>>Но разработка будет быстрей.

L>>>А почему?
H>>Нормальная объектная модель + автоматический сбор мусора = экономия времени

L>А вот посмотрим на C++:


L>1) Мощнейшая объектная модель + STL = C# отдыхает.

Почему? Если брать сам язык, то там все относительно нормально. Но когда дело касается взаимодействия с системой, то например С++ <-> WinAPI вообще не лезет никуда, одни преобразования туда-обратно, типов целая куча, брррр

L>2) Грамотное использование класса памяти auto = сборщик мусора .Net тоже отдыхает .

Net работает, а программист отдыхает, потому-что там этого вообще не нужно

L>3) Огромное количество великолепных инструментов отладки и профилирования (взять хотя бы продукты компании NuMega) + полностью

детерминированная логика выполнения программы (никаких отложенных на неопределенный срок вызовов деструкторов и т.п.) — .Net снова может расслабиться .
Если говорить о вычислительных задачах, то основные проблемы с памятью, а в Net их практически нет

L>По-моему, на C++ эта задача быстрее решается, причем результат будет более качественным. В самом Микрософте такую задачу вряд ли бы под .Net стали решать.

Если Вы лет 5 программировали под C++ и лучше его знаете, чем другие языки, то для Вас проще использовать C++. Если начинать с нуля, то по-моему IMHO лучше C#
Re[7]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 30.05.04 11:33
Оценка:
Здравствуйте, henson, Вы писали:

L>>3) Огромное количество великолепных инструментов отладки и профилирования (взять хотя бы продукты компании NuMega) + полностью

H>детерминированная логика выполнения программы (никаких отложенных на неопределенный срок вызовов деструкторов и т.п.) — .Net снова может расслабиться .
H>Если говорить о вычислительных задачах, то основные проблемы с памятью, а в Net их практически нет

Кстати, а в C# можно как-нибудь работать с типом double на уровне битов?

L>>По-моему, на C++ эта задача быстрее решается, причем результат будет более качественным. В самом Микрософте такую задачу вряд ли бы под .Net стали решать.

H>Если Вы лет 5 программировали под C++ и лучше его знаете, чем другие языки, то для Вас проще использовать C++. Если начинать с нуля, то по-моему IMHO лучше C#

Я все всемя на плюсах писал, но вот интересно и на C# попробовать. На нем ничего крупного не делал.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[8]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 30.05.04 14:06
Оценка:
J>Кстати, а в C# можно как-нибудь работать с типом double на уровне битов?

Оказывается нельзя.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[9]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.05.04 15:29
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>>Кстати, а в C# можно как-нибудь работать с типом double на уровне битов?


J>Оказывается нельзя.

Это почему??? Да и вариантные структуры никто не отменял (FieldOffset)
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[10]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 30.05.04 16:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Jenyay, Вы писали:


J>>>Кстати, а в C# можно как-нибудь работать с типом double на уровне битов?


J>>Оказывается нельзя.

S> Это почему???

Потому что в книге Inside .NET IL Assembler.chm (если кому, нужна могу выслать. Она 1,5 мега весит) написано, что

Bitwise Operations
Bitwise operations have no parameters and are defined for integer types only; floating-point, pointer, and object reference operands are not allowed. As a result, the related operand type compatibility list, shown in Table 10-4, is pretty simple.

Table 10-4 Acceptable Operand Types and Their Result Types in Bitwise Operations Operand Type
Operand Type
Result Type

int32
int32
int32

int32
native int
native int

int64
int64
int64


Three of the bitwise operations are binary, taking two operands from the stack and placing one result on the stack; and one is unary, taking one operand from the stack and placing one result on the stack:

and (0x5F) Bitwise AND (binary).

or (0x60) Bitwise OR (binary).

xor (0x61) Bitwise exclusive OR (binary).

not (0x66) Bitwise inversion (unary). This operation, rather than neg, is recommended for integer sign inversion because neg has a problem with the maximum negative numbers:


Shift Operations
Shift operations have no parameters and are defined for integer operands only. The shift operations are binary: they take from the stack the shift count and the value being shifted, in that order, and put the shifted value on the stack. The result always has the same type as the operand being shifted, which can be of any integer type. The type of the shift count cannot be int64 and is limited to int32 or native int.

shl (0x62) Shift left.

shr (0x63) Shift right.

shr.un (0x64) Shift right, treating the shifted value as unsigned.


S>Да и вариантные структуры никто не отменял (FieldOffset)


Интересно. То есть этот аттрибут (FieldOffsetAttribute) делает так, что элемент класса начинается не по положенному ему месту а по указанному?

Впринципе, мне это надо для скрещивания хромосом. Хотел просто чтобы у ребенка было бы часть бит (допустим первая) от 1-го родителя, а часть от 2-го. Нв С++ я бы сделал ассемблерными вставками. Может есть лучшее решение? Не хотелось бы использовать числа с фиксированной точкой. Есть еще идея отдельно скрещивать отдельно целые части (таким образом) как целые числа и дробные, умноженные перед этим на большое число (35000), чтобы тоже получилось целое число. Хотя таким образом до double не дотянуть, а до float можно.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[3]: .NET и генетические алгоритмы
От: ilnar Россия  
Дата: 31.05.04 06:05
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, ilnar, Вы писали:


I>>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.


J>Алгоритм будет тот же, а вот реализация другая, т.к. там юзал чужую dll-ку (GeneHunter), а хочется более объектно-ориентированно. Можно было бы сделать классовую (класную ) оболочку, но интересно все самому. Вообще у меня идея (фикс ) сделать общие классы (правда пока идеи на C++ с шаблонами), чтобы потом было бы легко подстраивать под любые объекты.


тут ты не первый и не последний. уже много всяких таких классов, для которых остается написать операции ген.алгоритма и фитнес функцию
Re[11]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 31.05.04 06:14
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Jenyay, Вы писали:


J>>>>Кстати, а в C# можно как-нибудь работать с типом double на уровне битов?


J>>>Оказывается нельзя.

S>> Это почему???

J>Потому что в книге Inside .NET IL Assembler.chm (если кому, нужна могу выслать. Она 1,5 мега весит) написано, что

J>

J>Bitwise Operations
J>Bitwise operations have no parameters and are defined for integer types only; floating-point, pointer, and object reference operands are not allowed. As a result, the related operand type compatibility list, shown in Table 10-4, is pretty simple.

J>Table 10-4 Acceptable Operand Types and Their Result Types in Bitwise Operations Operand Type
J> Operand Type
J> Result Type

J>int32
J> int32
J> int32

J>int32
J> native int
J> native int

J>int64
J> int64
J> int64


J>Three of the bitwise operations are binary, taking two operands from the stack and placing one result on the stack; and one is unary, taking one operand from the stack and placing one result on the stack:

J>and (0x5F) Bitwise AND (binary).

J>or (0x60) Bitwise OR (binary).

J>xor (0x61) Bitwise exclusive OR (binary).

J>not (0x66) Bitwise inversion (unary). This operation, rather than neg, is recommended for integer sign inversion because neg has a problem with the maximum negative numbers:


J>Shift Operations
J>Shift operations have no parameters and are defined for integer operands only. The shift operations are binary: they take from the stack the shift count and the value being shifted, in that order, and put the shifted value on the stack. The result always has the same type as the operand being shifted, which can be of any integer type. The type of the shift count cannot be int64 and is limited to int32 or native int.

J>shl (0x62) Shift left.

J>shr (0x63) Shift right.

J>shr.un (0x64) Shift right, treating the shifted value as unsigned.


S>>Да и вариантные структуры никто не отменял (FieldOffset)


J>Интересно. То есть этот аттрибут (FieldOffsetAttribute) делает так, что элемент класса начинается не по положенному ему месту а по указанному?


J>Впринципе, мне это надо для скрещивания хромосом. Хотел просто чтобы у ребенка было бы часть бит (допустим первая) от 1-го родителя, а часть от 2-го. Нв С++ я бы сделал ассемблерными вставками. Может есть лучшее решение? Не хотелось бы использовать числа с фиксированной точкой. Есть еще идея отдельно скрещивать отдельно целые части (таким образом) как целые числа и дробные, умноженные перед этим на большое число (35000), чтобы тоже получилось целое число. Хотя таким образом до double не дотянуть, а до float можно.



А почему целые не хотите использовать? Геном этот может иметь произвольную и довольно большую длину, зачем себя ограничивать?
Re[4]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 31.05.04 06:15
Оценка:
Здравствуйте, ilnar, Вы писали:

I>Здравствуйте, Jenyay, Вы писали:


J>>Здравствуйте, ilnar, Вы писали:


I>>>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.


J>>Алгоритм будет тот же, а вот реализация другая, т.к. там юзал чужую dll-ку (GeneHunter), а хочется более объектно-ориентированно. Можно было бы сделать классовую (класную ) оболочку, но интересно все самому. Вообще у меня идея (фикс ) сделать общие классы (правда пока идеи на C++ с шаблонами), чтобы потом было бы легко подстраивать под любые объекты.


I>тут ты не первый и не последний. уже много всяких таких классов, для которых остается написать операции ген.алгоритма и фитнес функцию


Ну а Framework кто-нибудь может написать, чтобы целевую функцию только добавлять
Re[5]: .NET и генетические алгоритмы
От: ilnar Россия  
Дата: 31.05.04 06:34
Оценка:
Здравствуйте, henson, Вы писали:

H>Здравствуйте, ilnar, Вы писали:


I>>Здравствуйте, Jenyay, Вы писали:


J>>>Здравствуйте, ilnar, Вы писали:


I>>>>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.


J>>>Алгоритм будет тот же, а вот реализация другая, т.к. там юзал чужую dll-ку (GeneHunter), а хочется более объектно-ориентированно. Можно было бы сделать классовую (класную ) оболочку, но интересно все самому. Вообще у меня идея (фикс ) сделать общие классы (правда пока идеи на C++ с шаблонами), чтобы потом было бы легко подстраивать под любые объекты.


I>>тут ты не первый и не последний. уже много всяких таких классов, для которых остается написать операции ген.алгоритма и фитнес функцию


H>Ну а Framework кто-нибудь может написать, чтобы целевую функцию только добавлять


целевая функция не всегда одно единственное, что надо задавать.
удобно бывает задать выид хранения особи (не просто 0 1, как обычно предлагат) и специфические операции скрещивания и мутации для них.
я, например, для задачи развозки сделал специфическое представление особи в виде отдельных маршрутов и сделал для них скрещивание и мутацию
Re[6]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 31.05.04 06:45
Оценка:
Здравствуйте, ilnar, Вы писали:

I>целевая функция не всегда одно единственное, что надо задавать.

I>удобно бывает задать выид хранения особи (не просто 0 1, как обычно предлагат) и специфические операции скрещивания и мутации для них.
I>я, например, для задачи развозки сделал специфическое представление особи в виде отдельных маршрутов и сделал для них скрещивание и мутацию

Хотелось бы следать так, чтобы юзер не только задавал функцию, но и сами виды, которые отвечают за скрещивание (но стандартное скрещивание все-таки надо сделать, чтобы потом не писать). А готовое только популяция, в которую добавляют виды. Впринципе, я себе на бумаге набросал, как хочу сделать, могу сюда написать.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[4]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 31.05.04 06:45
Оценка:
Здравствуйте, ilnar, Вы писали:

I>тут ты не первый и не последний. уже много всяких таких классов, для которых остается написать операции ген.алгоритма и фитнес функцию


Да я не спорю. Сам видел. Просто интересно самому.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[12]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 31.05.04 06:45
Оценка:
Здравствуйте, henson, Вы писали:

H>А почему целые не хотите использовать? Геном этот может иметь произвольную и довольно большую длину, зачем себя ограничивать?


То есть? Каким способом? Просто число, которое считается само по себе должно быть не целым.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[13]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 31.05.04 08:14
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, henson, Вы писали:


H>>А почему целые не хотите использовать? Геном этот может иметь произвольную и довольно большую длину, зачем себя ограничивать?


J>То есть? Каким способом? Просто число, которое считается само по себе должно быть не целым.


Если Вы говорите о битовых операциях, то я предположил, что речь о геноме, который по определенным правилом скрещивается с другим(и). Перед этим каждый геном прогоняется на оценочной функции. Могут быть и более сложные модели. Но в любом случае геном — это либо 1/0, либо коэффициент (целый или вещественный). Какую модель Вы хотите заложить? Для вещественных коэффициент возможно нет смысла делать операции с битами, а лучше перейти к какой то функции, x(1)i+1=(x(1)i+x(2)i)/2 в конце концов
Re[11]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.05.04 10:47
Оценка: 10 (1)
Здравствуйте, Jenyay, Вы писали:


S>>Да и вариантные структуры никто не отменял (FieldOffset)


J>Интересно. То есть этот аттрибут (FieldOffsetAttribute) делает так, что элемент класса начинается не по положенному ему месту а по указанному?

Да.
J>Впринципе, мне это надо для скрещивания хромосом. Хотел просто чтобы у ребенка было бы часть бит (допустим первая) от 1-го родителя, а часть от 2-го. Нв С++ я бы сделал ассемблерными вставками. Может есть лучшее решение? Не хотелось бы использовать числа с фиксированной точкой. Есть еще идея отдельно скрещивать отдельно целые части (таким образом) как целые числа и дробные, умноженные перед этим на большое число (35000), чтобы тоже получилось целое число. Хотя таким образом до double не дотянуть, а до float можно.
Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа

public struct DoubleOrUInt64
{
[FieldOffset(0)]
UInt64 IntValue;

[FieldOffset(0)]
double DoubleValue;

}

В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)

Правда жалко, что Extended забыли.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[14]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 31.05.04 15:57
Оценка:
Здравствуйте, henson, Вы писали:

H>Если Вы говорите о битовых операциях, то я предположил, что речь о геноме, который по определенным правилом скрещивается с другим(и).


Да, я тоже это имел ввиду для одного гена. Только скрещивать думал с помощью битовых операций. Геном — это набор генов?

H>Перед этим каждый геном прогоняется на оценочной функции.


Лучше после, но это не важно.

H>Могут быть и более сложные модели. Но в любом случае геном — это либо 1/0, либо коэффициент (целый или вещественный). Какую модель Вы хотите заложить?


Вещественный.

H>Для вещественных коэффициент возможно нет смысла делать операции с битами, а лучше перейти к какой то функции, x(1)i+1=(x(1)i+x(2)i)/2 в конце концов


А какие это функции? Всмысле что они должны делать и как выглядеть? Мне как-то про это не попадалось. Может, ссылка есть на то, чтобы почитать?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[12]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 31.05.04 15:57
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа


S> public struct DoubleOrUInt64

S> {
S> [FieldOffset(0)]
S> UInt64 IntValue;

S> [FieldOffset(0)]

S> double DoubleValue;

S> }


S> В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)


S> Правда жалко, что Extended забыли.


Круто. А при этом остальные части класса остаются управляемыми?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[13]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 31.05.04 19:26
Оценка: 15 (1)
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>> Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа


S>> public struct DoubleOrUInt64

S>> {
S>> [FieldOffset(0)]
S>> UInt64 IntValue;

S>> [FieldOffset(0)]

S>> double DoubleValue;

S>> }


S>> В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)


S>> Правда жалко, что Extended забыли.


J>Круто. А при этом остальные части класса остаются управляемыми?


Посмотрите еще класс System.BitConverter с методом DoubleToInt64Bits и обратным, может пригодиться.
Re[12]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 31.05.04 19:31
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Jenyay, Вы писали:



S>>>Да и вариантные структуры никто не отменял (FieldOffset)


J>>Интересно. То есть этот аттрибут (FieldOffsetAttribute) делает так, что элемент класса начинается не по положенному ему месту а по указанному?

S> Да.
J>>Впринципе, мне это надо для скрещивания хромосом. Хотел просто чтобы у ребенка было бы часть бит (допустим первая) от 1-го родителя, а часть от 2-го. Нв С++ я бы сделал ассемблерными вставками. Может есть лучшее решение? Не хотелось бы использовать числа с фиксированной точкой. Есть еще идея отдельно скрещивать отдельно целые части (таким образом) как целые числа и дробные, умноженные перед этим на большое число (35000), чтобы тоже получилось целое число. Хотя таким образом до double не дотянуть, а до float можно.
S> Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа


S> public struct DoubleOrUInt64

S> {
S> [FieldOffset(0)]
S> UInt64 IntValue;

S> [FieldOffset(0)]

S> double DoubleValue;

S> }


S> В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)


S> Правда жалко, что Extended забыли.


По-моему перед структурой надо указать
[StructLayout(LayoutKind.Explicit)]
чтоб была unmanaged memory
Re[14]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 01.06.04 06:46
Оценка:
Здравствуйте, henson, Вы писали:

H>Посмотрите еще класс System.BitConverter с методом DoubleToInt64Bits и обратным, может пригодиться.


Похоже, то, что надо. Сколько же интересного в этот .NET напихали
Кстати, и на С++ с помощью union тоже можно будет скрещивать float как int побайтно без ассемблера. Я как-то и забыл про него (union).
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[13]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.06.04 09:40
Оценка:
Здравствуйте, henson, Вы писали:


S>> Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа


S>> public struct DoubleOrUInt64

S>> {
S>> [FieldOffset(0)]
S>> UInt64 IntValue;

S>> [FieldOffset(0)]

S>> double DoubleValue;

S>> }


S>> В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)


S>> Правда жалко, что Extended забыли.


H>По-моему перед структурой надо указать

H>[StructLayout(LayoutKind.Explicit)]
H>чтоб была unmanaged memory

Для структур это выравнивание по умолчанию.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[13]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.06.04 09:40
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>> Насколько я помню double в Net 64 бита ( http://www.rsdn.ru/Forum/Message.aspx?mid=375145&amp;only=1
Автор: WolfHound
Дата: 05.09.03
) и структура типа


S>> public struct DoubleOrUInt64

S>> {
S>> [FieldOffset(0)]
S>> UInt64 IntValue;

S>> [FieldOffset(0)]

S>> double DoubleValue;

S>> }


S>> В Net можно работать можно применять побитовые операции и с Int64 (но мне больше нравится UInt64)


S>> Правда жалко, что Extended забыли.


J>Круто. А при этом остальные части класса остаются управляемыми?

Да. Небольшой пример из BynaryReader

 internal static decimal ToDecimal(byte[] buffer)
{
 int num1 = (((buffer[0] | (buffer[1] << 8)) | (buffer[2] << 16)) | (buffer[3] << 24));
int num2 = (((buffer[4] | (buffer[5] << 8)) | (buffer[6] << 16)) | (buffer[7] << 24));
int num3 = (((buffer[8] | (buffer[9] << 8)) | (buffer[10] << 16)) | (buffer[11] << 24));
int num4 = (((buffer[12] | (buffer[13] << 8)) | (buffer[14] << 16)) | (buffer[15] << 24));
return new decimal(num1, num2, num3, num4);
 
}


private Decimal(int lo, int mid, int hi, int flags)
{
 this.lo = lo;
this.mid = mid;
this.hi = hi;
this.flags = flags;
 
}


[CLSCompliant(false)]
public static ulong ToUInt64(decimal d)
{
 ulong num1;
if ((d.flags & 16711680) != 0)
{
 d = decimal.Truncate(d);
 
}
if (d.hi == 0)
{
 num1 = (((ulong) d.lo) | (((ulong) d.mid) << 32));
if ((d.flags >= 0) || (num1 == ((long) 0)))
{
 return num1;
 
}
 
}
throw new OverflowException(Environment.GetResourceString("Overflow_UInt64"));
 
}





public virtual double ReadDouble()
{
 this.FillBuffer(8);
uint num1 = (((this.m_buffer[0] | (this.m_buffer[1] << 8)) | (this.m_buffer[2] << 16)) | (this.m_buffer[3] << 24));
uint num2 = (((this.m_buffer[4] | (this.m_buffer[5] << 8)) | (this.m_buffer[6] << 16)) | (this.m_buffer[7] << 24));
ulong num3 = ((((ulong) num2) << 32) | ((ulong) num1));
return num3;
 
}




public static long ToInt64(double value)
{
 long num1;
double num2;
long num3;
double num4;
if (value >= 0f)
{
 if (value >= 9.2233720368547758E+18f)
{
 goto Label_0082;
 
}
num1 = ((long) value);
num2 = (value - ((double) num1));
if ((num2 <= 0.5f) && ((num2 != 0.5f) || ((num1 & ((long) 1)) == ((long) 0))))
{
 return num1;
 
}
num1 += ((long) 1);
return num1;
 
}
if (value > -9.2233720368547758E+18f)
{
 num3 = ((long) value);
num4 = (value - ((double) num3));
if ((num4 >= -0.5f) && ((num4 != -0.5f) || ((num3 & ((long) 1)) == ((long) 0))))
{
 return num3;
 
}
num3 -= ((long) 1);
return num3;
 
}
 
Label_0082:
 throw new OverflowException(Environment.GetResourceString("Overflow_Int64"));
 
}



Стоит обратить внимание еще на класс Buffer и его методы
[MethodImpl(MethodImplOptions.InternalCall)]
public static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count);

и
public static int ByteLength(Array array);
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[5]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.06.04 09:52
Оценка:
Здравствуйте, henson, Вы писали:

H>Нормальная объектная модель + автоматический сбор мусора = экономия времени

GC это палка о двух концах. За надежность и упрощение кодирование нужно платить гибкостью (применение указателей ограничено и только в унсейы режиме причем не всегда можно получить выингрыш) и write barier.
GC хорош при небольшом количестве живых объектов, там где их много можно поиметь различные неприятности. Хотя M$ не дремлет и совершенствует ее.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[15]: .NET и генетические алгоритмы
От: henson Россия http://www.njt-rails.com
Дата: 01.06.04 22:25
Оценка:
H>>Для вещественных коэффициент возможно нет смысла делать операции с битами, а лучше перейти к какой то функции, x(1)i+1=(x(1)i+x(2)i)/2 в конце концов

J>А какие это функции? Всмысле что они должны делать и как выглядеть? Мне как-то про это не попадалось. Может, ссылка есть на то, чтобы почитать?


Я не помню уже где видел, вот основы http://www.systemtechnik.tu-ilmenau.de/~pohlheim/GA_Toolbox/algmutat.html
Re[15]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.06.04 12:12
Оценка:
Здравствуйте, Jenyay, Вы писали:



J>Похоже, то, что надо. Сколько же интересного в этот .NET напихали

J>Кстати, и на С++ с помощью union тоже можно будет скрещивать float как int побайтно без ассемблера. Я как-то и забыл про него (union).
Зачем так сложно??? Указатели в нативных языках вполне пригодны.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[16]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 02.06.04 12:59
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Зачем так сложно??? Указатели в нативных языках вполне пригодны.


Я сначала хотел преобразовывать через void*, но потом показалось, что через union будет покрасивее. Или я ошибаюсь?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[6]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 02.06.04 12:59
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> GC хорош при небольшом количестве живых объектов, там где их много можно поиметь различные неприятности. Хотя M$ не дремлет и совершенствует ее.


А какие, например?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[17]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.06.04 13:12
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>> Зачем так сложно??? Указатели в нативных языках вполне пригодны.


J>Я сначала хотел преобразовывать через void*, но потом показалось, что через union будет покрасивее. Или я ошибаюсь?

Конечно покрасивее. Спору нет.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[7]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.06.04 13:29
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>> GC хорош при небольшом количестве живых объектов, там где их много можно поиметь различные неприятности. Хотя M$ не дремлет и совершенствует ее.


J>А какие, например?


http://www.rsdn.ru/forum/Message.aspx?mid=630508&amp;only=1
Автор: Serginio1
Дата: 06.05.04

http://www.rsdn.ru/forum/Message.aspx?mid=646279&amp;only=1
Автор: Serginio1
Дата: 19.05.04
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[8]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 02.06.04 13:38
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>http://www.rsdn.ru/forum/Message.aspx?mid=630508&amp;only=1
Автор: Serginio1
Дата: 06.05.04

S>http://www.rsdn.ru/forum/Message.aspx?mid=646279&amp;only=1
Автор: Serginio1
Дата: 19.05.04


Печально
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[18]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 02.06.04 13:38
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Конечно покрасивее. Спору нет.


А зачем тогда через указатели?
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[19]: .NET и генетические алгоритмы
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.06.04 13:42
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, Serginio1, Вы писали:


S>> Конечно покрасивее. Спору нет.


J>А зачем тогда через указатели?

Из за лени
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[20]: .NET и генетические алгоритмы
От: Jenyay http://jenyay.net
Дата: 02.06.04 16:08
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Из за лени


... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[2]: .NET и генетические алгоритмы
От: Аноним  
Дата: 07.06.04 13:38
Оценка:
Здравствуйте, ilnar, Вы писали:

I>одну реализацию генетического алгоритма на С#, хорошую по предоставляемым параметрам управления, видел на www.codeproject.com — может взять, посмотреть. там есть много вариантов для различных задач.

I>но конечно шарп не будет лучше си при том же алгоритме и схеме реализации.

Эт почему же?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.