Implementação do algoritmo da Máquina de Análise Geográfica (GAM) Equipe:Karla Donato Fook...

Post on 17-Apr-2015

104 views 0 download

Transcript of Implementação do algoritmo da Máquina de Análise Geográfica (GAM) Equipe:Karla Donato Fook...

Implementação do algoritmo da Máquina de Análise Geográfica (GAM)

Equipe: Karla Donato Fook

Evaldinolia G. Moreira Pinto

Paradigmas e Ferramentas de Desenvolvimento de Software

Prof. Dr. Gilberto Câmara

Roteiro GAM

Descrição Interface

Padrões implementados Strategy Singleton Iterator

Contextualização GAM x Padrões Diagramas Codificação

Conclusões

GAM – Geographical Analysis Machine

Ferramenta para análise exploratória de dados espaciais aplicada a pontos ou pequenas áreas

Os setores de Saúde Pública e Criminal utilizam a Máquina de Análise Geográfica para indicar áreas com altas incidências de doenças ou crimes de naturezas diversas

Desenvolvida por Stan Openshaw e Ian Turton - University of Leeds, UK

GAM – Geographical Analysis Machine

A partir de dados de interesse, gera um grande número de círculos de vários tamanhos que cobrem completamente uma determinada região

Os círculos se sobrepõem permitindo o efeito de bordas e fornecendo um grau de análise sensitiva

Os dados de cada círculo são armazenados e uma avaliação estatística é feita para saber se a taxa de incidência do dado em cada círculo é alta A análise estatística é realizada através do Teste de

Significância

GAM – Interface

Mean Bootstrap

Monte Carlo Significance

Poisson Probability

GAM – Interface

GAM - Programa Frmgam.ui.h

Interface desenvolvida no QT Designer

TeGam.h Classe gam

TeSignificanceTest.h Classes significanceTest e cDivisor

Padrões Implementados

Strategy

Singleton

Iterator

Strategy

GAM

isSignificant( )...

gridGenerate( )

significanceTest

sigTest( )

bootstrapTest

sigTest( )

monteCarloTestsigTest( )

poissonTest

sigTest( )

Implementa o Teste de Significância no GAM O algoritmo possui comportamento diferente, conforme seleção

do usuário

Strategy// TeSignificanceTest.hclass significanceTest { public:

virtual double sigTest(const double & sumIncidence, const double & incidenceExpected,const vector<int> & idsInterestDataCircle ) = 0;

protected: significanceTest(){}

};class poissonTest : public significanceTest{ public:

poissonTest(){}virtual double sigTest(const double & sumIncidence,

const double & incidenceExpected,const vector<int> &

idsInterestDataCircle);};

Strategyclass monteCarloTest : public significanceTest{ public:

monteCarloTest(){}virtual double sigTest(const double & sumIncidence,

const double & incidenceExpected,const vector<int> & idsInterestDataCircle);

};

class bootstrapTest : public significanceTest{ public:

bootstrapTest(){}virtual double sigTest(const double & sumIncidence,

const double & incidenceExpected, const vector<int> & idsInterestDataCircle);

};

Strategy// TeGam.hclass gam{ public:

gam(significanceTest* = NULL);virtual ~gam();...

protected:significanceTest* sig;bool sCreated;

};

Strategygam::gam(significanceTest* p_sig){

if (p_sig == NULL) {sig = new bootstrapTest;sCreated = true;

}else {

sig = p_sig;sCreated = false;

}}gam::~gam(){

if (sCreated == true) delete sig;}

Strategy// callbool gam::isSignificant( const double & sumIncidence,

const double & incidenceExpected, const vector<int> &

idsInterestDataCircle ){

ASSERT(sig !=NULL);...double prob = sig->sigTest(sumIncidence, incidenceExpected,

idsInterestDataCircle );...

}

Implementa divisor que promove a geração do grid

Singleton

cDivisor

static int getDivisor( )

static int divisor

return divisor

// TeSignificanceTest.hclass cDivisor{ public : static int getDivisor(); protected :

cDivisor(){} virtual ~cDivisor(){} static int divisor; // Static instance };int cDivisor::divisor=100;int cDivisor::getDivisor() { return divisor;}

Singleton

// TeGam.h

void gam::gridGenerate( double & xmin, double & xmax, double &

ymin, double & ymax ){

...int div = cDivisor::getDivisor();...dx = (xmax - xmin) / div;dy = (ymax - ymin) / div;...

}

Singleton

Iterator Utilizado no decorrer do programa para acesso a

elementos pertencentes a diferentes tipos de conteiners

interestData

begin()end()

...

int iddouble incidencedouble popRisk

it

first()second()

currentItem()

Iterator// TeGam.hvoid gam::computeIncidenceRate ( ){

map<int, gridIndex>::iterator it = interestData.begin(); ...while (it != interestData.end()) {

p = it->second;sumIncidence += p.first;sumRiskPop += p.second;++it;

}

}

Iterator// TeSignificanceTest.hdouble monteCarloTest::sigTest(const double & mean, const

double & x, const vector<int> & idsInterestDataCircle )

{typedef vector<int>::const_iterator itVector;

for( itVector itVec = idsInterestDataCircle.begin(); itVec != idsInterestDataCircle.end(); ++itVec)

{...idValue = * itVec;...

}}

Conclusões Padrões de Projeto propiciam um alto nível de

programação, tornando o código mais prático e elegante

A implementação dos padrões proporcionou maior robustez ao código da Máquina de Análise Geográfica

O trabalho sedimentou o que foi abordado na disciplina

A visualização da superfície de densidade encontra-se em fase de implementação

Referências BAILEY, T.; GATRELL, A. “Interactive Spatial Data Analysis”. Longman Scientific and

Technical, London, 1995.

DRUCK, S.; CARVALHO, M. S.; CÂMARA, G.; MONTEIRO, A.V.M. (eds) "Análise Espacial de Dados Geográficos". Brasília, EMBRAPA, 2004.

GAMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. “Design Patterns: Elements of Reusable Object-Oriented Software”. Addison Wesley, 1994.

G. Câmara, A.Monteiro, “Geocomputation Techniques for Spatial Analysis: Is it the Case for Health data Sets?” .  Revista Nacional de Saúde Pública, 2001.

OPENSHAW, S.; TURTON I.; MaCGill, J.; DAVY, J. “Putting Geographical Analysis Machine on the Internet”. University of Leeds, Leeds.

STROUSTRUP, B. “A Linguagem de Programação C++” - 3. ed. Bookman, 2000.

http://www.ccg.leeds.ac.uk/smart/gam/gam1.html

http://www.codeproject.com/cpp/#Design+and+Strategy

Obrigada pela Atenção !!!