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