📄 learnview.cpp
字号:
R_k=-Pi;
}
else if (dis2<=14&&trd_numB>=0&&trd_numB<=8)//||dis2>=25&&trd_num>=9&&trd_num<=15)
{
R_k=R_k+Pi/12;
}
else if (dis2<=14&&trd_numB>=9&&trd_numB<=15)//||dis2>=25&&trd_num>=0&&trd_num<=8)
{
R_k=R_k-Pi/12;
}
}
ColorSignB=0;
ColorSignG=0;
ColorSignR=0;
/* double Qall=0.0;
int rnd;
srand(GetTickCount());
rnd=1+rand()%1000;
///Boltzmann分布////////////
for(int ie=0;ie<6;ie++)
{
Qall=Qall+exp(Qsa[trd_num][ie]/2.0);
}
if(rnd<=Blzm(Qall,Qsa[trd_num][0]))
{
qq=0;
}
else if ( ( rnd>Blzm(Qall,Qsa[trd_num][0]) )&&( rnd<=((Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])) ) ) )
{
qq=1;
}
else if(
( rnd>(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1]))
)
&&
(
rnd<=(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2]))
)
)
{
qq=2;
}
else if(
( rnd>(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2]))
)
&&
(
rnd<=(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2])+Blzm(Qall,Qsa[trd_num][3]))
)
)
{
qq=3;
}
else if(
( rnd>(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2])+Blzm(Qall,Qsa[trd_num][3]))
)
&&
(
rnd<=(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2])+Blzm(Qall,Qsa[trd_num][3])+Blzm(Qall,Qsa[trd_num][4]))
)
)
{
qq=4;
}
else if(
( rnd>(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2])+Blzm(Qall,Qsa[trd_num][3])+Blzm(Qall,Qsa[trd_num][4]))
)
&&
(
rnd<=(Blzm(Qall,Qsa[trd_num][0])+Blzm(Qall,Qsa[trd_num][1])+Blzm(Qall,Qsa[trd_num][2])+Blzm(Qall,Qsa[trd_num][3])+Blzm(Qall,Qsa[trd_num][4])+Blzm(Qall,Qsa[trd_num][5]))
)
)
{
qq=5;
}
*/
/////平均概率分配 ***************************************************
/*
for(int ii=0;ii<6;ii++)
{
Qall=Qall+Qsa[trd_num][ii];
}
srand(GetTickCount());
if ((1+rand()%1000)<floor(Qsa[trd_num][0]*1000/Qall))
{
qq=0;
}
else if (((1+rand()%1000)>floor(Qsa[trd_num][0]*1000/Qall))
&&(1+rand()%1000)<floor((Qsa[trd_num][0]+Qsa[trd_num][1])*1000/Qall))
{
qq=1;
}
else if (((1+rand()%1000)>floor((Qsa[trd_num][0]+Qsa[trd_num][1])*1000/Qall))
&&(1+rand()%1000)<floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2])*1000/Qall))
{
qq=2;
R_k=R_k-Pi/18.0;
}
else if (((1+rand()%1000)>floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2])*1000/Qall))
&&(1+rand()%1000)<floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2]+Qsa[trd_num][3])*1000/Qall))
{
qq=3;
}
else if (((1+rand()%1000)>floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2]+Qsa[trd_num][3])*1000/Qall))
&&(1+rand()%1000)
<floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2]+Qsa[trd_num][3]+Qsa[trd_num][4])*1000/Qall))
{
qq=4;
}
else if ((1+rand()%1000)>floor((Qsa[trd_num][0]+Qsa[trd_num][1]+Qsa[trd_num][2]+Qsa[trd_num][3]+Qsa[trd_num][4])*1000/Qall))
{
qq=5;
}
// else R_k=R_k;
*/
/*
Qall=Qsa[trd_num][0];
qq=0;
for(int i1=0;i1<6;i1++)
{
if(Qall<Qsa[trd_num][i1])
{
qq=i1;
}
}
*/
/*
qq=A_num;
switch(qq)
{
case 0:
R_k=R_k+Pi/2-R_s;
break;
case 1:
R_k=R_k-Pi/6.0;
break;
case 2:
R_k=R_k-Pi/15.0;
break;
case 3:
R_k=R_k+Pi/3.0;
break;
case 4:
R_k=R_k+Pi/6.0;
break;
case 5:
R_k=R_k+Pi/15.0;
break;
default:
break;
}*/
/*
switch(qq)
{
case 0:
R_k=R_k-Pi/3.0;
break;
case 1:
R_k=R_k-Pi/6.0;
break;
case 2:
R_k=R_k-Pi/15.0;
break;
case 3:
R_k=R_k+Pi/3.0;
break;
case 4:
R_k=R_k+Pi/6.0;
break;
case 5:
R_k=R_k+Pi/15.0;
break;
default:
break;
}*/
}
double CLearnView::reward(double rwd)
{
CClientDC dc(this);
COLORREF trd00,trd01,trd02,trd03,trd04,trd05,trd06,trd07,trd08,
trd09,trd10,trd11,trd12,trd13,trd14,trd15,trd16;
double dis=0.0,dmin=8.0,dmax=15.0;
//检测向左运动的绿色障碍物
trd_numG=16;
for(dis=0.0;dis<20.0;dis=dis+0.5)
{
/////////取得传感器的值/////////
trd00=dc.GetPixel((int)(x+dis*cos(R_k+0.0*Pi/12.0)),(int)(y+dis*sin(R_k+0.0*Pi/12.0)));
trd01=dc.GetPixel((int)(x+dis*cos(R_k-1.0*Pi/12.0)),(int)(y+dis*sin(R_k-1.0*Pi/12.0)));
trd02=dc.GetPixel((int)(x+dis*cos(R_k+1.0*Pi/12.0)),(int)(y+dis*sin(R_k+1.0*Pi/12.0)));
trd03=dc.GetPixel((int)(x+dis*cos(R_k-2.0*Pi/12.0)),(int)(y+dis*sin(R_k-2.0*Pi/12.0)));
trd04=dc.GetPixel((int)(x+dis*cos(R_k+2.0*Pi/12.0)),(int)(y+dis*sin(R_k+2.0*Pi/12.0)));
trd05=dc.GetPixel((int)(x+dis*cos(R_k-3.0*Pi/12.0)),(int)(y+dis*sin(R_k-3.0*Pi/12.0)));
trd06=dc.GetPixel((int)(x+dis*cos(R_k+3.0*Pi/12.0)),(int)(y+dis*sin(R_k+3.0*Pi/12.0)));
trd07=dc.GetPixel((int)(x+dis*cos(R_k-4.0*Pi/12.0)),(int)(y+dis*sin(R_k-4.0*Pi/12.0)));
trd08=dc.GetPixel((int)(x+dis*cos(R_k+4.0*Pi/12.0)),(int)(y+dis*sin(R_k+4.0*Pi/12.0)));
trd09=dc.GetPixel((int)(x+dis*cos(R_k-5.0*Pi/12.0)),(int)(y+dis*sin(R_k-5.0*Pi/12.0)));
trd10=dc.GetPixel((int)(x+dis*cos(R_k+5.0*Pi/12.0)),(int)(y+dis*sin(R_k+5.0*Pi/12.0)));
trd11=dc.GetPixel((int)(x+dis*cos(R_k-6.0*Pi/12.0)),(int)(y+dis*sin(R_k-6.0*Pi/12.0)));
trd12=dc.GetPixel((int)(x+dis*cos(R_k+6.0*Pi/12.0)),(int)(y+dis*sin(R_k+6.0*Pi/12.0)));
trd13=dc.GetPixel((int)(x+dis*cos(R_k-7.0*Pi/12.0)),(int)(y+dis*sin(R_k-7.0*Pi/12.0)));
trd14=dc.GetPixel((int)(x+dis*cos(R_k+7.0*Pi/12.0)),(int)(y+dis*sin(R_k+7.0*Pi/12.0)));
trd15=dc.GetPixel((int)(x+dis*cos(R_k-8.0*Pi/12.0)),(int)(y+dis*sin(R_k-8.0*Pi/12.0)));
trd16=dc.GetPixel((int)(x+dis*cos(R_k+8.0*Pi/12.0)),(int)(y+dis*sin(R_k+8.0*Pi/12.0)));
////////判断是否有障碍物////////////////////////////////////////////////////////////////
if (((int)trd00==GreenColor))//&&((int)trd01==Bit_color)) //(0,1)
{
ColorSignG=1; trd_numG=0;
dis2=dis;
// R_s=0.0*Pi/12.0;
break;
}
if (((int)trd01==GreenColor))//&&((int)trd03==Bit_color))//(1,3)
{
ColorSignG=1; trd_numG=1;
dis2=dis;
// R_s=-1.0*Pi/12.0;
break;
}
if (((int)trd02==GreenColor))//&&((int)trd04==Bit_color))
{
ColorSignG=1;trd_numG=9;
dis2=dis;
// R_s=1.0*Pi/12.0;
break;
}
if (((int)trd03==GreenColor))//&&((int)trd05==Bit_color))
{
ColorSignG=1; trd_numG=2;
dis2=dis;
// R_s=-2.0*Pi/12.0;
break;
}
if (((int)trd04==GreenColor))//&&((int)trd06==Bit_color))
{
ColorSignG=1; trd_numG=10;
dis2=dis;
// R_s=2.0*Pi/12.0;
break;
}
if (((int)trd05==GreenColor))//&&((int)trd07==Bit_color))
{
ColorSignG=1; trd_numG=3;
dis2=dis;
// R_s=-3.0*Pi/12.0;
break;
}
if (((int)trd06==GreenColor))//&&((int)trd08==Bit_color))
{
ColorSignG=1; trd_numG=11;
dis2=dis;
// R_s=3.0*Pi/12.0;
break;
}
if (((int)trd07==GreenColor))//&&((int)trd09==Bit_color))
{
ColorSignG=1; trd_numG=4;
dis2=dis;
// R_s=-4.0*Pi/12.0;
break;
}
if (((int)trd08==GreenColor))//&&((int)trd10==Bit_color))
{
ColorSignG=1; trd_numG=12;
dis2=dis;
// R_s=4.0*Pi/12.0;
break;
}
if (((int)trd09==GreenColor))//&&((int)trd11==Bit_color))
{
ColorSignG=1; trd_numG=5;
dis2=dis;
// R_s=-5.0*Pi/12.0;
break;
}
if (((int)trd10==GreenColor))//&&((int)trd12==Bit_color))
{
ColorSignG=1; trd_numG=13;
dis2=dis;
// R_s=5.0*Pi/12.0;
break;
}
if (((int)trd11==GreenColor))//&&((int)trd13==Bit_color))
{
ColorSignG=1; trd_numG=6;
dis2=dis;
// R_s=-6.0*Pi/12.0;
break;
}
if (((int)trd12==GreenColor))//&&((int)trd14==Bit_color))
{
ColorSignG=1; trd_numG=14;
dis2=dis;
// R_s=6.0*Pi/12.0;
break;
}
if (((int)trd13==GreenColor))//&&((int)trd15==Bit_color))
{
ColorSignG=1; trd_numG=7;
dis2=dis;
// R_s=-7.0*Pi/12.0;
break;
}
/*
if (ColorSignB==1||ColorSignR==1||ColorSignG==1)
{
break;
}*/
}
//检测向右运动的红色障碍物
trd_numR=16;
for(dis=0.0;dis<20.0;dis=dis+0.5)
{
/////////取得传感器的值/////////
trd00=dc.GetPixel((int)(x+dis*cos(R_k+0.0*Pi/12.0)),(int)(y+dis*sin(R_k+0.0*Pi/12.0)));
trd01=dc.GetPixel((int)(x+dis*cos(R_k-1.0*Pi/12.0)),(int)(y+dis*sin(R_k-1.0*Pi/12.0)));
trd02=dc.GetPixel((int)(x+dis*cos(R_k+1.0*Pi/12.0)),(int)(y+dis*sin(R_k+1.0*Pi/12.0)));
trd03=dc.GetPixel((int)(x+dis*cos(R_k-2.0*Pi/12.0)),(int)(y+dis*sin(R_k-2.0*Pi/12.0)));
trd04=dc.GetPixel((int)(x+dis*cos(R_k+2.0*Pi/12.0)),(int)(y+dis*sin(R_k+2.0*Pi/12.0)));
trd05=dc.GetPixel((int)(x+dis*cos(R_k-3.0*Pi/12.0)),(int)(y+dis*sin(R_k-3.0*Pi/12.0)));
trd06=dc.GetPixel((int)(x+dis*cos(R_k+3.0*Pi/12.0)),(int)(y+dis*sin(R_k+3.0*Pi/12.0)));
trd07=dc.GetPixel((int)(x+dis*cos(R_k-4.0*Pi/12.0)),(int)(y+dis*sin(R_k-4.0*Pi/12.0)));
trd08=dc.GetPixel((int)(x+dis*cos(R_k+4.0*Pi/12.0)),(int)(y+dis*sin(R_k+4.0*Pi/12.0)));
trd09=dc.GetPixel((int)(x+dis*cos(R_k-5.0*Pi/12.0)),(int)(y+dis*sin(R_k-5.0*Pi/12.0)));
trd10=dc.GetPixel((int)(x+dis*cos(R_k+5.0*Pi/12.0)),(int)(y+dis*sin(R_k+5.0*Pi/12.0)));
trd11=dc.GetPixel((int)(x+dis*cos(R_k-6.0*Pi/12.0)),(int)(y+dis*sin(R_k-6.0*Pi/12.0)));
trd12=dc.GetPixel((int)(x+dis*cos(R_k+6.0*Pi/12.0)),(int)(y+dis*sin(R_k+6.0*Pi/12.0)));
trd13=dc.GetPixel((int)(x+dis*cos(R_k-7.0*Pi/12.0)),(int)(y+dis*sin(R_k-7.0*Pi/12.0)));
trd14=dc.GetPixel((int)(x+dis*cos(R_k+7.0*Pi/12.0)),(int)(y+dis*sin(R_k+7.0*Pi/12.0)));
trd15=dc.GetPixel((int)(x+dis*cos(R_k-8.0*Pi/12.0)),(int)(y+dis*sin(R_k-8.0*Pi/12.0)));
trd16=dc.GetPixel((int)(x+dis*cos(R_k+8.0*Pi/12.0)),(int)(y+dis*sin(R_k+8.0*Pi/12.0)));
////////判断是否有障碍物////////////////////////////////////////////////////////////////
if (((int)trd00==RedColor))//&&((int)trd01==Bit_color)) //(0,1)
{
ColorSignR=1; trd_numR=0;
// dis2=dis;
// R_s=0.0*Pi/12.0;
break;
}
else if (((int)trd01==RedColor))//&&((int)trd03==Bit_color))//(1,3)
{
ColorSignR=1; trd_numR=1;
dis2=dis;
// R_s=-1.0*Pi/12.0;
break;
}
else if (((int)trd02==RedColor))//&&((int)trd04==Bit_color))
{
ColorSignR=1;trd_numR=9;
dis2=dis;
// R_s=1.0*Pi/12.0;
break;
}
else if (((int)trd03==RedColor))//&&((int)trd05==Bit_color))
{
ColorSignR=1; trd_numR=2;
dis2=dis;
// R_s=-2.0*Pi/12.0;
break;
}
else
if (((int)trd04==RedColor))//&&((int)trd06==Bit_color))
{
ColorSignR=1; trd_numR=10;
dis2=dis;
// R_s=2.0*Pi/12.0;
break;
}
else
if (((int)trd05==RedColor))//&&((int)trd07==Bit_color))
{
ColorSignR=1; trd_numR=3;
dis2=dis;
// R_s=-3.0*Pi/12.0;
break;
}
else
if (((int)trd06==RedColor))//&&((int)trd08==Bit_color))
{
ColorSignR=1; trd_numR=11;
dis2=dis;
// R_s=3.0*Pi/12.0;
break;
}
if (((int)trd07==RedColor))//&&((int)trd09==Bit_color))
{
ColorSignR=1; trd_numR=4;
dis2=dis;
// R_s=-4.0*Pi/12.0;
break;
}
else
if (((int)trd08==RedColor))//&&((int)trd10==Bit_color))
{
ColorSignR=1; trd_numR=12;
dis2=dis;
// R_s=4.0*Pi/12.0;
break;
}
if (((int)trd09==RedColor))//&&((int)trd11==Bit_color))
{
ColorSignR=1; trd_numR=5;
dis2=dis;
// R_s=-5.0*Pi/12.0;
break;
}
else
if (((int)trd10==RedColor))//&&((int)trd12==Bit_color))
{
ColorSignR=1; trd_numR=13;
dis2=dis;
// R_s=5.0*Pi/12.0;
break;
}
else
if (((int)trd11==RedColor))//&&((int)trd13==Bit_color))
{
ColorSignR=1; trd_numR=6;
dis2=dis;
// R_s=-6.0*Pi/12.0;
break;
}
else
if (((int)trd12==RedColor))//&&((int)trd14==Bit_color))
{
ColorSignR=1; trd_numR=14;
dis2=dis;
// R_s=6.0*Pi/12.0;
break;
}
else
if (((int)trd13==RedColor))//&&((int)trd15==Bit_color))
{
ColorSignR=1; trd_numR=7;
dis2=dis;
// R_s=-7.0*Pi/12.0;
break;
}
/*
if (ColorSignB==1||ColorSignR==1||ColorSignG==1)
{
break;
}*/
}
//检测地图中障碍物
trd_numB=16;//如果没有检测到障碍物
for(dis=0.0;dis<20.0;dis=dis+0.5)
{
/////////取得传感器的值/////////
trd00=dc.GetPixel((int)(x+dis*cos(R_k+0.0*Pi/12.0)),(int)(y+dis*sin(R_k+0.0*Pi/12.0)));
trd01=dc.GetPixel((int)(x+dis*cos(R_k-1.0*Pi/12.0)),(int)(y+dis*sin(R_k-1.0*Pi/12.0)));
trd02=dc.GetPixel((int)(x+dis*cos(R_k+1.0*Pi/12.0)),(int)(y+dis*sin(R_k+1.0*Pi/12.0)));
trd03=dc.GetPixel((int)(x+dis*cos(R_k-2.0*Pi/12.0)),(int)(y+dis*sin(R_k-2.0*Pi/12.0)));
trd04=dc.GetPixel((int)(x+dis*cos(R_k+2.0*Pi/12.0)),(int)(y+dis*sin(R_k+2.0*Pi/12.0)));
trd05=dc.GetPixel((int)(x+dis*cos(R_k-3.0*Pi/12.0)),(int)(y+dis*sin(R_k-3.0*Pi/12.0)));
trd06=dc.GetPixel((int)(x+dis*cos(R_k+3.0*Pi/12.0)),(int)(y+dis*sin(R_k+3.0*Pi/12.0)));
trd07=dc.GetPixel((int)(x+dis*cos(R_k-4.0*Pi/12.0)),(int)(y+dis*sin(R_k-4.0*Pi/12.0)));
trd08=dc.GetPixel((int)(x+dis*cos(R_k+4.0*Pi/12.0)),(int)(y+dis*sin(R_k+4.0*Pi/12.0)));
trd09=dc.GetPixel((int)(x+dis*cos(R_k-5.0*Pi/12.0)),(int)(y+dis*sin(R_k-5.0*Pi/12.0)));
trd10=dc.GetPixel((int)(x+dis*cos(R_k+5.0*Pi/12.0)),(int)(y+dis*sin(R_k+5.0*Pi/12.0)));
trd11=dc.GetPixel((int)(x+dis*cos(R_k-6.0*Pi/12.0)),(int)(y+dis*sin(R_k-6.0*Pi/12.0)));
trd12=dc.GetPixel((int)(x+dis*cos(R_k+6.0*Pi/12.0)),(int)(y+dis*sin(R_k+6.0*Pi/12.0)));
trd13=dc.GetPixel((int)(x+dis*cos(R_k-7.0*Pi/12.0)),(int)(y+dis*sin(R_k-7.0*Pi/12.0)));
trd14=dc.GetPixel((int)(x+dis*cos(R_k+7.0*Pi/12.0)),(int)(y+dis*sin(R_k+7.0*Pi/12.0)));
trd15=dc.GetPixel((int)(x+dis*cos(R_k-8.0*Pi/12.0)),(int)(y+dis*sin(R_k-8.0*Pi/12.0)));
trd16=dc.GetPixel((int)(x+dis*cos(R_k+8.0*Pi/12.0)),(int)(y+dis*sin(R_k+8.0*Pi/12.0)));
////////判断是否有障碍物////////////////////////////////////////////////////////////////
if ((int)trd00==Bit_color)//&&((int)trd01==Bit_color)) //(0,1)
{
ColorSignB=1; trd_numB=0;
dis2=dis;
R_s=0.0*Pi/12.0;
break;
}
if (((int)trd01==Bit_color))//&&((int)trd03==Bit_color))//(1,3)
{
ColorSignB=1; trd_numB=1;
dis2=dis;
R_s=-1.0*Pi/12.0;
break;
}
if (((int)trd02==Bit_color))//&&((int)trd04==Bit_color))
{
ColorSignB=1; trd_numB=9;
dis2=dis;
R_s=1.0*Pi/12.0;
break;
}
if (((int)trd03==Bit_color))//&&((int)trd05==Bit_color))
{
ColorSignB=1; trd_numB=2;
dis2=dis;
R_s=-2.0*Pi/12.0;
break;
}
if (((int)trd04==Bit_color))//&&((int)trd06==Bit_color))
{
ColorSignB=1; trd_numB=10;
dis2=dis;
R_s=2.0*Pi/12.0;
break;
}
if (((int)trd05==Bit_color))//&&((int)trd07==Bit_color))
{
ColorSignB=1;trd_numB=3;
dis2=dis;
R_s=-3.0*Pi/12.0;
break;
}
if (((int)trd06==Bit_color))//&&((int)trd08==Bit_color))
{
ColorSignB=1;trd_numB=11;
dis2=dis;
R_s=3.0*Pi/12.0;
break;
}
if (((int)trd07==Bit_color))//&&((int)trd09==Bit_color))
{
ColorSignB=1;trd_numB=4;
dis2=dis;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -