#include "Rule.h"
#include <stdlib.h>
Rule::Rule(void)
{
grow_in = new bool[6];
grow_wgt = new float*[4];
for ( int w = 0 ; w < 4 ; w++ )
grow_wgt[w] = new float[6];
fit.clumpsize = 0;
fit.perimeter = 0;
fit.value = 0;
}
Rule::~Rule(void)
{
delete[6] grow_in;
for ( int w = 0 ; w < 4 ; w++ )
delete[6] grow_wgt[w];
delete[4] grow_wgt;
}
void Rule::InitBasic()
{
//default grow function is lower-right corner
for ( int w = 0 ; w < 4 ; w++ )
{
for ( int i = 0 ; i < 6 ; i++ )
{
grow_wgt[w][i] = 0;
}
}
grow_wgt[0][0] = 1.0;
}
void Rule::Copy( Rule* r )
{
for ( int w = 0 ; w < 4 ; w++ )
{
for ( int i = 0 ; i < 6 ; i++ )
{
grow_wgt[w][i] = r->grow_wgt[w][i];
}
}
fit = r->fit;
}
void Rule::Mutate()
{
//There are 4x6 grow variables.
int w = rand() % 4;
int i = rand() % 6;
grow_wgt[w][i] += float(( rand() / ( RAND_MAX * 1.0 ) ) * 20 - 10.0);
}
Quad Rule::Grow( bool s, bool u, bool r, bool d, bool l )
{
float out[4];
grow_in[0] = s;
grow_in[1] = u;
grow_in[2] = r;
grow_in[3] = d;
grow_in[4] = l;
grow_in[5] = true;
for ( int w = 0 ; w < 4 ; w++ )
{
out[w] = 0.0;
for ( int i = 0 ; i < 6 ; i++ )
{
if ( grow_in[i] ) out[w] += grow_wgt[w][i];
}
}
Quad result;
result.dl = ( out[0] > 0.0 );
result.dr = ( out[1] > 0.0 );
result.ul = ( out[2] > 0.0 );
result.ur = ( out[3] > 0.0 );
return result;
}
# |
Change |
User |
Description |
Committed |
|
#1
|
4776 |
Sam Stafford |
A simple Qt frontend to the "squaregarden" algorithms. |
|
|
//guest/sam_stafford/garden/src/Rule.cpp |
#1
|
4772 |
Sam Stafford |
Something I've been doodling with. |
|
|