我有一个关于绘制c ++包的问题.在过去的几年里,我使用的是python和matplotlib,现在我正在使用c ++,我想找到类似于matplotlib(http://matplotlib.sourceforge.net/gallery.html)的内容,如2d,3d图,直方图和等等.我只想知道你的建议.
最好的问候,nykon
简单的研究是: 蚁群模拟
我正在创建一个OO结构,它可以看到Anthill的类,Ant的类和整个模拟器的类.
现在我正在集思广益"如何"让蚂蚁"活着"......
我知道有这样的项目刚刚开始,但我正在集思广益,我不是在寻找一种刚刚准备好吃的菜.
我真的需要做一些测试来理解"什么是更好",在Python中,AFAIK Threads使用的内存少于进程.
当你开始模拟时"蚂蚁"必须做的只是:随机方向移动,如果他们找到食物 - >吃/带到蚁丘,如果他们发现另一只蚂蚁从另一个运送食物的蚁丘 - >攻击 - >收集食物 - >做必须做的事......等等......这意味着我必须在蚂蚁和整个环境中"分享"信息.
所以我重写:最好为每个Ant或其他东西创建一个进程/线程?
编辑:由于我的问题"什么是更好的",我提出了我收到的所有聪明的答案,我也对它们发表评论.经过我的测试,我会接受最好的答案.
我必须用Java制作模拟器,它将模拟在高速公路上骑车.高速公路上应该有3条车道,每条车道都有恒定速度的车.在这条高速公路上,有一个代理商,必须穿过而不会撞到任何其他车辆.详细描述可以在本文的2.5节和图5中找到.
这张图片来自提到的纸张,显示了高速公路的外观:

我的目标是只编写模拟器(和GUI),而不是代理逻辑.现在,我想设计一个这个模拟器的架构,这是我需要帮助的地方.
我的想法,代理的API看起来如何:
public abstract class BaseAgent {
public abstract void run()
public abstract void onCrash();
}
Run Code Online (Sandbox Code Playgroud)
高速公路上的特工(汽车)应该是这个班级的后代.在每一步中,模拟器调用函数run()在哪里是代理逻辑.在此函数中,代理可以调用以下函数:
goLeft();
goRight();
getNearestCarInLane(int lane_no);
getMySpeed();
Run Code Online (Sandbox Code Playgroud)
因此,在每一步中,代理人都可以决定他是否留在当前车道,或者他是左转还是右转.这就是代理人可以做的事情.
所以这是代理API,但我不知道,如何设计其余的模拟器.我对模拟器架构的第一次尝试是:
class Agent — descendant of BaseAgent, can ride on highway.
class Highway — stores position of all cars on highway.
class Simulator — creates instance of agent and highway; in every step, call agent’s `run()` and monitors any car crash.
Run Code Online (Sandbox Code Playgroud)
这不是一个好的架构.哪个类应该是方法goLeft(),goRight()和getNearestCarInLane()?因为这些方法必须在BaseAgent课堂内,但必须知道每辆车在高速公路上的位置.所以最后,我有这样的事情:
Simulator …Run Code Online (Sandbox Code Playgroud) 仅供参考:自从我的第一版以来,我对此进行了大量编辑.这种模拟已经从14小时减少到14分钟.
我是编程的新手,但我做了一个模拟试图遵循有机体中的无性复制并量化母体和子体生物之间染色体数量的差异.模拟运行速度非常慢.完成大约需要6个小时.我想知道什么是使模拟运行更快的最佳方法.
这些数字生物有x个染色体.与大多数生物体不同,染色体彼此独立,因此它们具有转移到子体生物体中的相同机会.
在这种情况下,染色体进入子细胞的分布遵循二项分布,概率为0.5.
该函数sim_repo采用具有已知数量染色体的数字生物矩阵,并使它们经历12代复制.它复制这些染色体,然后使用该rbinom函数随机生成一个数字.然后将该数字分配给子单元格.由于在无性繁殖期间没有染色体丢失,另一个子细胞接收剩余的染色体.然后对G代进行重复.然后从矩阵中的每一行采样单个值.
sim_repo = function( x1, G=12, k=1, t=25, h=1000 ) {
# x1 is the list of copy numbers for a somatic chromosome
# G is the number of generations, default is 12
# k is the transfer size, default is 1
# t is the number of transfers, default is 25
# h is the number of times to replicate, default is 1000
dup <- x1 * 2 # …Run Code Online (Sandbox Code Playgroud) 我一直在看QEMU一段时间了,我一直试图找出是否可以用它来模拟我们正在开发的设备.
该器件由ARM Cortex M3供电,QEMU非常适合仿真其软件.
我想知道的是,如果有人过去曾使用QEMU作为模拟器吗?
目的是在将软件推送到现场设备之前,使用QEMU对软件进行黑盒测试.
这将涉及能够监视和修改配置和设置并行输入/输出(PIO)引脚的存储器位置以及外部所有其他外设的存储器位置.
现在,考虑到一些外设是PWM和UART,很明显需要解决同步问题.但是,我想暂时避免这个话题,只坚持简单的PIO.
在QEMU监视器靠拢,但还没有应用.
总结一下:
我需要知道是否有办法在每个CPU时钟周期后中断QEMU并读/写代码存储器中的少量存储单元.
假设我有一组(X,Y)坐标为1000个盒子.
( x1, y1) ( x2, y2) Area
(0.0000,0.0000) (0.3412,0.4175) 0.1424
(0.7445,0.0000) (1.0000,0.6553) 0.1674
(0.7445,0.6553) (1.0000,1.0000) 0.0881
(0.0000,0.6553) (0.7445,1.0000) 0.2566
(0.3412,0.0000) (0.7445,0.4175) 0.1684
(0.3412,0.4175) (0.7445,0.6553) 0.0959
(0.0000,0.4175) (0.3412,0.6553) 0.0812 ....etc
Run Code Online (Sandbox Code Playgroud)
我想用c/c ++计算每个盒子相邻盒子的数量.我该怎么做?
例

在这张图片中,方框7的相邻方框总数为6,方框3为3.如何使用c ++计算它们?
使用新值进行编辑和更新
让我们尝试16个值 -
1 0.0000 0.0000 0.8147 0.1355
2 0.8147 0.0000 1.0000 0.1355
3 0.8147 0.1355 0.9058 0.8350
4 0.0000 0.1355 0.1270 0.9689
5 0.9058 0.1355 0.9134 0.2210
6 0.9058 0.8350 1.0000 1.0000
7 0.8147 0.8350 0.9058 1.0000
8 0.1270 0.1355 0.6324 0.3082
9 0.1270 …Run Code Online (Sandbox Code Playgroud) 我正在为Android移动设备开发可扩展的传感和数据处理框架.它将支持通过Android移动设备访问的各种数据信号(例如,温度,电池,压力,wifi信号强度等).
为了测试传感器,我在Android设备上部署了我编写的Android代码.在这里,限制来了 - 我的Android设备有一组有限的传感器(例如,它没有温度传感器)所以,我无法测试所有类型传感器的所有编写代码(例如,温度,压力,等等.).
在Internet上,我检查了SensorSimulator项目(),但它对我不起作用.我收到以下错误.
05-03 01:40:40.766: E/AndroidRuntime(10139): FATAL EXCEPTION: main
05-03 01:40:40.766: E/AndroidRuntime(10139): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloworldsensorsimulator/com.example.helloworldsensorsimulator.MainActivity}: android.os.NetworkOnMainThreadException
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2146)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.app.ActivityThread.access$700(ActivityThread.java:140)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.os.Looper.loop(Looper.java:177)
05-03 01:40:40.766: E/AndroidRuntime(10139): at android.app.ActivityThread.main(ActivityThread.java:4947)
05-03 01:40:40.766: E/AndroidRuntime(10139): at java.lang.reflect.Method.invokeNative(Native Method)
05-03 01:40:40.766: E/AndroidRuntime(10139): at java.lang.reflect.Method.invoke(Method.java:511)
05-03 01:40:40.766: E/AndroidRuntime(10139): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
05-03 01:40:40.766: E/AndroidRuntime(10139): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
05-03 …Run Code Online (Sandbox Code Playgroud) 我研究了Jerry Tessendorf撰写的"模拟海水"文章,并尝试编制统计波模型,但我没有得到正确的结果,我不明白为什么.
在我的程序中,我只尝试在时间上创建波高域,t = 0而不进行任何进一步的更改.执行我的程序后,我没有得到我所期望的:
这是我的源代码:
clear all; close all; clc;
rng(11); % setting seed for random numbers
meshSize = 64; % field size
windDir = [1, 0]; % ||windDir|| = 1
patchSize = 64;
A = 1e+4;
g = 9.81; % gravitational constant
windSpeed = 1e+2;
x1 = linspace(-10, 10, meshSize+1); x = x1(1:meshSize);
y1 = linspace(-10, 10, meshSize+1); y = y1(1:meshSize);
[X,Y] = meshgrid(x, y);
H0 = zeros(size(X)); % height field at time t …Run Code Online (Sandbox Code Playgroud) 我试图计算由于重力引起的3空间n体问题的加速度(我使用辛欧拉).
我有每个时间步的位置和速度矢量,并使用下面(工作)代码来计算加速度并更新速度和位置.请注意,加速度是3空间中的矢量,而不仅仅是幅度.
我想知道是否有更有效的方法来计算这个与numpy以避免循环.
def accelerations(positions, masses):
'''Params:
- positions: numpy array of size (n,3)
- masses: numpy array of size (n,)
Returns:
- accelerations: numpy of size (n,3), the acceleration vectors in 3-space
'''
n_bodies = len(masses)
accelerations = numpy.zeros([n_bodies,3]) # n_bodies * (x,y,z)
# vectors from mass(i) to mass(j)
D = numpy.zeros([n_bodies,n_bodies,3]) # n_bodies * n_bodies * (x,y,z)
for i, j in itertools.product(range(n_bodies), range(n_bodies)):
D[i][j] = positions[j]-positions[i]
# Acceleration due to gravitational force between each pair of bodies
A …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 C++ 和 SDL2 开发一个非常简单的“落沙”模拟游戏,并且在让水以更逼真的方式流动方面遇到了问题。我基本上有一个单元格网格,我从下到上,从左到右迭代,如果我找到一个水单元格,我只需检查下面,从下到左,下到右,左然后右的空单元格它移动到它找到的第一个(如果两个对角线单元格或两个水平单元格都是空闲的,它会随机选择)。然后我将它移动到的单元格标记为已处理,以便在该循环的其余部分不会再次检查它。
我的问题是粒子如何移动的一种“左偏”;如果我在屏障上方生成一个正方形的水细胞,一旦粒子开始到达屏障,它们基本上都会向左移动而不移动,而右侧的细胞将以正确的方式向下运行。所以不是形成一个漂亮的三角形,均匀地流向两边,整个形状只会向左移动。每当我从左到右迭代时,这种效果就会逆转,所以我知道这与此有关,但到目前为止我一直在努力修复它。我最初认为这是我如何将单元格标记为已处理的问题,但在数小时的测试中我没有发现该系统有明显的错误。有没有人在开发这样的模拟时遇到过任何类似的挑战,或者知道一些我' 我失踪了?任何帮助将不胜感激。
编辑: 好的,所以我取得了一些进展,但是我遇到了另一个似乎与迭代无关的错误,因为现在我保存了旧单元格的副本并从中读取以决定更新,然后更新原始单元格并显示它。这已经使沙子更好地工作,但是水平检查游离细胞的水现在在水平移动时“消失”。我整个上午都在测试它,但还没有找到解决方案,我认为这可能与我复制数组的方式有关,但据我所知,它似乎有效。
新片段:
模拟.cpp
void Simulation::update()
{
copyStates(m_cells, m_oldCells); // so now oldcells is the last new state
for(int y = m_height - 1; y>= 0; y--)
for(int x = 0; x < m_width; x++)
{
Cell* c = getOldCell(x, y); // check in the old state for possible updates
switch(c->m_type)
{
case EMPTY:
break;
case SAND:
if(c->m_visited == false) update_sand(x, y);
break;
case WATER:
if(c->m_visited == false) update_water(x, y);
break;
default:
break; …Run Code Online (Sandbox Code Playgroud) c++ simulation cellular-automata game-physics particle-system
simulation ×10
c++ ×3
java ×2
python ×2
agent ×1
algorithm ×1
android ×1
architecture ×1
cuda ×1
embedded ×1
emulation ×1
for-loop ×1
game-physics ×1
matlab ×1
multiprocess ×1
numpy ×1
open-intents ×1
physics ×1
plot ×1
qemu ×1
r ×1
rectangles ×1
resources ×1
simulate ×1
simulator ×1