Дискретные симуляторы событий для С++
В настоящее время я ищу дискретный симулятор событий, написанный для С++. Я не нашел много в Интернете, написанном специально в стиле OO; есть некоторые, но устаревшие. Некоторые другие, такие как Opnet, Omnet и ns3, слишком сложны для того, что мне нужно делать. И кроме того, мне нужно моделировать агенты-алгоритмы, способные имитировать системы тысяч узлов.
Кто-нибудь знает что-нибудь подходящее для моих нужд?
Ответы
Ответ 1
У других есть хорошие прямые ответы, но я собираюсь предложить альтернативу. Если я правильно понимаю, вам нужна система на С++ или такая, где вы можете публиковать события, которые запускаются в будущем, а код запускается, когда эти события срабатывают.
У меня был проект для этого, и я начал писать такую систему событий на С++, а затем быстро понял, что у меня есть лучшее решение.
Рассматривали ли вы возможность писать свою программу в поведенческом Verilog? Может показаться странным писать программное обеспечение на языке описания аппаратного обеспечения, но симулятор Verilog - это система, основанная на событиях, а поведенческая Verilog - очень удобный способ выражения событий, времени, триггеров и т.д. Существует бесплатный симулятор Verilog ( который я использовал) называется Icarus Verilog. Если вы не используете Ubuntu или какой-либо дистрибутив Linux с Icarus уже в пакете, создание из исходного кода является простым.
Ответ 2
Я бы порекомендовал еще раз взглянуть на OmNet++. На первый взгляд это может показаться довольно сложным, но если вы посмотрите на него более подробно, вы обнаружите, что большая часть сложности заключается в сетевом дополнении (INET Framework). Если вы не собираетесь проводить подробное сетевое моделирование, вам не нужен INET.
Использование ядра OmNet++ не представляет особой сложности и может быть проще, чем другие подобные инструменты.
Вы можете захотеть взглянуть на вступление.
Одной из вещей, которые делают OmNet++ привлекательным для меня, является его масштабируемость. Возможно запускать большие симуляции на рабочем столе. Кроме того, такую же симуляцию можно масштабировать до кластера без переписывания кода.
Ответ 3
Вы должны рассмотреть SystemC, хотя я бы также рекомендовал второй взгляд на OmNet ++.
Ответ 4
Существует CSIM из Mesquite Software, который поддерживает разработку моделей на C, С++ и Java. Однако он платный-коммерческий, AFAIK.
Ответ 5
Мы используем SIMLIB в моей школе. Это очень быстрый, понятный, объектно-ориентированный, дискретный и непрерывный симулятор. Он может выглядеть устаревшим, но он по-прежнему поддерживается.
Ответ 6
Взгляните на библиотеку GBL. Он написан на современном С++ и даже поддерживает функции С++ 0x, такие как перемещение семантики и лямбда-функций. Он предлагает несколько механизмов моделирования: синхронные и асинхронные обработчики событий, превентивные потоки и волокна. Вы можете создавать чисто поведенческие, циклические точные и модели реального времени или любую их смесь.