我的算法在处理小数字时精度完美,但在处理较大数字时精度会下降,但并非总是如此

我正在参与一个游戏,需要编程AI并与其他程序员竞争。这个游戏是一场比赛,你的飞船必须按顺序通过一些检查点。

你可以使用以下输入参数来编写算法:

nextCheckpoint (x,y) -> nX,nYlastCheckpoint (x,y) -> lnX,lnYcurrentposition (x,y) -> x,y

代码的输出是方向和推力。

int pod::errorX(){    int R[2];    int X1;    float b;    int DeltaX;    //检查点之间的线的向量    R[0] = nX-lnX;    R[1] = nY-lnY;    //计算飞船与线在X轴上的距离    b =(R[0]*(lnX-x) + R[1]*(lnY-y))/((-pow(R[0],2))-(pow(R[1],2)));    X1 = lnY + b*R[0];    DeltaX = x-X1;    cerr<<"Dx: "<<DeltaX<<endl;    return DeltaX;}

我也有对应的pod::errorY()

最后:

DirectionX = nX-errorX();DirectionY = nY-errorY();

这是我正在做的事情的一些图片:

理论上应该发生的情况

我想这样做是因为大多数时候惯性会使我的飞船绕着检查点旋转,这会消耗很多时间并使我输掉比赛。

好吧,现在让我们面对这个问题,有时它能工作,有时却完全不接近。

当输入较小时,比如:

nX= 2;nY= 2;lnX=0;lnY=0;x=0;y=0;

输出是:

directionX = 3directionY = 1

但当它们较大时:

nX= 6553;nY= 7817;lnX=13044;lnY=1908;x=13921;y=3530;

输出是:

DirectionX=6940;DirectionY=1907;

我不知道发生了什么。可能是由于b是小数吗?有没有我没看到的错误?

也许这段代码更适合测试,因为你不需要游戏:

#include <iostream>#include <string>#include <cmath>using namespace std;int main(){    int lnX = 13044;    int lnY = 7817;    int nX = 13044;    int nY = 1908;    int x = 13921;    int y = 3530;    int R[2]={};    //检查点之间的线的向量    R[0] = nX-lnX;    R[1] = nY-lnY;    //纯代数,用于计算X的偏移    int X1,DeltaX;    long double b;    b =(R[0]*(lnX-x) + R[1]*(lnY-y))/((-pow(R[0],2))-(pow(R[1],2)));    X1 = lnY + b*R[0];    DeltaX = x-X1;    //Y的偏移    int Y1,DeltaY;    Y1 = lnY+b*R[1];    DeltaY = y-Y1;    //方向    int DirectionX;    int DirectionY;    DirectionX = nX-DeltaX;    DirectionY = nY-DeltaY;    cout<<X1<<" "<<Y1<<endl;    cout<<DeltaX<<" "<<DeltaY<<endl;    cout<<b<<" "<<DirectionX<< " "<<DirectionY<<endl;

回答:

这行代码对吗?X1 = lnY + b*R[0];还是应该这样写X1 = lnX + b*R[0];

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注