在一个在线经理游戏(如Hattrick)中,我想模拟两个团队之间的匹配.
一支球队由11名球员组成.每位球员的实力值都在1到100之间.我为每支球队采取防守球员的这些力量值并计算平均值.这是球队的防守质量.然后我抓住了进攻球员的优势,我获得了进攻质量.
对于每次攻击,我执行以下操作:
$offFactor = ($attackerTeam_offensive-$defenderTeam_defensive)/max($attackerTeam_offensive, $defenderTeam_defensive);
$defFactor = ($defenderTeam_defensive-$attackerTeam_offensive)/max($defenderTeam_defensive, $attackerTeam_offensive);
Run Code Online (Sandbox Code Playgroud)
目前,我不知道为什么我将它除以两个值中较高的值.但是这个公式应该为你提供一个后来需要的进攻和防守质量的因素.
然后我为每个可能发生的事件嵌套了条件语句.例如:进攻球队是否获得得分机会?
if ((mt_rand((-10+$offAdditionalFactor-$defAdditionalFactor), 10)/10)+$offFactor >= 0)
{ ... // the attack succeeds
Run Code Online (Sandbox Code Playgroud)
例如,这些额外因素可能是战术价值.
你认为这是计算游戏的好方法吗?我的用户说他们对模拟的质量不满意.我怎样才能改进它们?你有不同的方法可以提供更好的结果吗?或者您认为我的方法是好的,我只需要调整条件语句中的值并进行一些实验?
我希望你能帮助我.提前致谢!
我正在尝试模拟一个实时网络,其中节点是消费者和不同费率的生产者.我如何使用Python快速实现此示例?我想象我会为每个节点编写一个简单的程序,但我不确定如何将它们相互连接.
是否有基于.NET(WinForm或WPF)的控件允许简单的可视化编程(赋值,布尔表达式和数学表达式)?像Microsoft VPL这样的东西,只能嵌入和支持.

问题出在标题上,但首先请看一下这段代码:
function number(a) {
return {
add: function(b) {
result = a + b;
return this;
}, substract(b) {
result = a - b;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
以上代码是链规则的简单示例.我重新调整了一个对象,所以我可以连续执行:
number(2).add(5).add(3 * 12).substract(Math.random());
Run Code Online (Sandbox Code Playgroud)
我的问题是,我必须重新调用一个对象以保持函数可链接.我想模仿链规则,但要返回具体的价值.例如,number(2).add(3)将返回5.
任何建议都非常感谢.
谢谢大家先进.[X]
我正在尝试模拟一个真实的按键事件.出于这个原因,我正在使用SendInput()方法,但为了获得更好的结果,我需要指定keyDOWN和KeyUP事件之间的延迟!下面的这些数字显示DOWN和UP事件之间经过的时间(以毫秒为单位)(这些是真实的/有效的):
96 95 112 111 119 104 143 96 95 104 120 112 111 88 104 119 111 103 142 143 128 144 112 111 112 120 128 111 135 118 147 96 135 103 64 64 87 79 112 88 111 111 112 111 104 87 95
我们可以简化输出:
延迟64 - 88 ms - > 20%的时间
延迟89 - 135 ms - > 60%的时间
延迟136 - 150 ms - > 20%的时间
如何根据上面的概率触发事件?这是我正在使用的代码:
private void button2_Click(object sender, EventArgs e)
{
textBox2.Focus(); …Run Code Online (Sandbox Code Playgroud) 我即将编写一个非晶格扩散限制聚合(DLA)模拟,我想知道是否使用C或C++.
出于设计原因,C++会很好,但我想知道C会表现得更好.当然我了解算法性能并选择了最好的算法.所以我不是在谈论将O(n ^ 2)改为O(log n)或类似的.我试图减少我的常数.
如果您不了解DLA,它基本上归结为具有一系列双精度(大小在10 ^ 3和10 ^ 6之间)并且在循环中选择随机双精度来比较(大于/小于)阵列的大部分.
因此,对此重要的性能差异是数据访问和调用功能:
我是否正确地得出结论,判断这一点的最终方法是查看汇编代码(例如比较移动/加载,跳转和调用的数量)?这当然是编译器相关的(例如,您可以将糟糕的C编译器与优秀的C++编译器进行比较).我正在使用Gnu编译器(gcc和g ++).
我发现通过gcc和g ++生成的程序集在跳转次数(无),移动/加载以及对以下两个程序的调用方面几乎相同:
C程序
#include <stdlib.h>
typedef struct
{
double x;
} particle;
double square(double a)
{
return a*a;
}
int main()
{
particle* particles = malloc(10*sizeof(particle));
double res;
particles[0].x = 60.42;
res = square(particles[0].x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++程序
class particle
{
public:
double x;
public:
double square()
{
return x*x;
}
};
int main()
{
particle* particles = new particle[10];
double res;
particles[0].x = …Run Code Online (Sandbox Code Playgroud) 我在使用Windows 7旗舰版(英特尔酷睿i5-2400 3GHz处理器,8.00GB内存)的PC上运行R版本2.14.0.如果需要其他规格,请告诉我.
我试图模拟相关的beta分布式数据.我使用的方法是本文所写内容的扩展:
http://onlinelibrary.wiley.com/doi/10.1002/asmb.901/pdf
mvrnorm()MASS中的函数).pnorm()probit变换应用于这些数据,以便我的新数据向量存在于(0,1).并且根据之前的陈述仍然相关.qbeta()具有某些shape1和shape2参数的函数,以获得具有特定均值和色散属性的相关β数据.我知道存在生成相关beta数据的其他方法.我感兴趣的是为什么qbeta()导致这种方法失败的某些"种子".以下是我收到的错误消息.
Warning message:
In qbeta(probit_y0, shape1 = a0, shape2 = b0) :
full precision may not have been achieved in 'qbeta'
Run Code Online (Sandbox Code Playgroud)
这是什么意思?怎么可以避免?当它确实发生在更大模拟的上下文中时,确保此问题不会终止整个源(使用source())模拟代码的最佳方法是什么?
我为1:1000的整数种子运行了以下代码.种子= 899是唯一给我带来问题的价值.虽然如果它在这里有问题,它也不可避免地会对其他种子造成问题.
library(MASS)
set.seed(899)
n0 <- 25
n1 <- 25
a0 <- 0.25
b0 <- 4.75
a1 <- 0.25
b1 <- 4.75
varcov_mat <- matrix(rep(0.25,n0*n0),ncol=n0)
diag(varcov_mat) <- 1
y0 <- mvrnorm(1,mu=rep(0,n0),Sigma=varcov_mat)
y1 <- mvrnorm(1,mu=rep(0,n1),Sigma=varcov_mat)
probit_y0 <- pnorm(y0)
probit_y1 <- pnorm(y1)
beta_y0 <- …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试理解箭头和FRP,我遇到了一个问题,我似乎无法将其映射到FRP,即如何建立道路网络模型.
我以为我可以将道路网络建模为箭头,其中每个箭头代表一个路段.它接受位置和时间的汽车流并产生相同的类型,尽管具有不同的位置和时间.
到现在为止还挺好.但是这个模型没有考虑到,这些细分可能会被卡住.虽然每个部分都可以很好地响应繁忙的交通并且越来越多地延迟汽车,但是它获得的拥挤越多,就没有回水效应,即堵塞不会向后传播到其他路段.
我怀疑我在这里应用了太多的OO思考,而不是专注于需要计算的东西,但我不能在脑子里把它弄好.
我在Processing中模拟粒子系统.基于丹尼尔希夫曼的"本质的代码"一书,我做了一个弹簧,然后我开始尝试使用滑块做一个基于滑块的长度更长或更短的滑块.
现在,我试图制作一个滑块滑动,两个粒子移动到两个粒子的相同方向.我使用PVector添加,找到新位置并绘制节点,但是当我有多个成员且一个受其他成员影响时它不起作用.我需要使用一个force来执行此操作:请参阅applyForce()函数.
void update(float distance) {
PVector force = PVector.sub(b.location, a.location);
float d = force.mag();
float x = d - distance;
//direction of the force
force.normalize();
force.mult(-1 * k* x/mass);
//apply to one node
b.applyForce(force);
force.mult(-1);
//apply opposite to the other node
a.applyForce(force);
}
//Newton's law: F = M * A
void applyForce(PVector force) {
PVector f = force.get();
f.div(mass);
acceleration.add(f);
}
Run Code Online (Sandbox Code Playgroud)
检查下图:
(a)是我想要的,(b)它现在是怎么做的.
在第一个例子中,长度相同,成员滑动(两个粒子).
在第二个中,长度更大并且不会滑动
如果您知道如何施加滑动构件的力,请告诉我.
谢谢
我已经设法在VHDL中实现模拟超时.如果进程运行时间更长,则MaxRuntime会被"杀死".
不幸的是,这不相反.如果我的模拟在MaxRuntime之前完成,那么一切都在等待MaxRuntime上的最后一个等待语句.
我发现,这是可能的结合wait on,wait for并wait until声明为一体.
我目前的代码片段.一个完整的例子很长......
package sim is
shared variable IsFinalized : BOOLEAN := FALSE;
procedure initialize(MaxRuntime : TIME := TIME'high);
procedure finalize;
end package;
package body sim is
procedure initialize(MaxRuntime : TIME := TIME'high) is
begin
-- do init stuff
if (MaxRuntime = TIME'high) then
wait on IsFinalized for MaxRuntime;
finalize;
end if;
end procedure;
procedure finalize;
begin
if (not IsFinalized) then
IsFinalized := TRUE;
-- do finalize stuff:
-- -> …Run Code Online (Sandbox Code Playgroud) simulation ×10
c# ×2
probability ×2
.net ×1
arrows ×1
c ×1
c++ ×1
chain ×1
conceptual ×1
frp ×1
haskell ×1
javascript ×1
numeric ×1
performance ×1
processing ×1
python ×1
r ×1
random ×1
return-value ×1
spring ×1
vhdl ×1