O erro pode estar na linha 15 do Cromossomo.as:
A linha abaixo é um loop for, mas o array _gene está sendo usado sem o [i].
_gene = _gene + Math.round(Math.random()).toString();
OU
Seu problema provavelmente acontece porque no flash, os valores são sempre
passados por referência...
Experimenta usar variavel_destino = ObjectUtil.copy(variavel_a_ser_copiada).
(o nome é algo parecido com copy, se o acime estiver errado.)
2008/4/14 Beck Novaes <[EMAIL PROTECTED]>:
>
> Hm... dei uma olhada no seu código mas achei um tanto complicado. Você
> suspeita que está ocorrendo um "vinculo entre os campos do array com
> os mesmos valores" não é? Será que você poderia abstrair do seu
> negócio específico com Genes e Cromossomos e se voltar apenas para os
> Arrays, campos e valores para que possamos validar ou não a sua
> hipótese? Ou seja, teria como você preparar um exemplo funcionando com
> o problema o mais simples possível para darmos uma olhada?
>
> []'s
> Beck Novaes
>
> On 14 abr, 21:44, Alexandre Souza <[EMAIL PROTECTED]> wrote:
> > Abaixo está o código completo (mas ineficiente :c).
> > Eu criei uma nova versão, não orientado a objetos desta vez (Amazeno
> > no array o string diretamente). E mesmo assim, ocorre esse "vinculo"
> > entre os campos do array com os mesmos valores. Estou achando que é
> > algo mais grave do que eu pensei. Compilei usando o Flex builder 2 e
> > 3, mas o resultado é o mesmo
> >
> > //Cromossomo.as
> > package
> > {
> > public class Cromossomo
> > {
> > private var tamCromossomo:uint = 1;
> > private var gene:Array = ["0"];
> > private var i:Number = 0;
> >
> > public function Cromossomo(tam:uint):void{
> > tamCromossomo = tam;
> > for (i=0; i<tam; i++){
> > gene[i]= "0";
> > }
> > for (i=0; i<tam; i++){
> > _gene = _gene +
> Math.round(Math.random()).toString();
> > }
> > //trace(gene);
> > }
> >
> > public function getGene(inicio:uint,fim:uint):String{
> > var juncao:String = gene.join();
> > //Uso de expressões regulares para retirada da
> vírgula
> > var pattern:RegExp = /,/gi;
> > var resultado:String = juncao.replace(pattern,
> "");
> > return resultado.substring(inicio,fim);
> > return _gene;
> > }
> >
> > public function setGene(novoString:String):void{
> > this._gene = novoString;
> > }
> >
> > public function mutaGene(teste:String):void{
> > do{
> > var
> posicao:uint=Math.round(Math.random()*tamCromossomo-1);
> > var mutado:String;
> >
> > if (_gene.charAt(posicao) == "0"){
> > mutado = "1";
> > } else {
> > mutado = "0";
> > }
> > } while (posicao == 4294967295);
> >
> > _gene = _gene.substring(0,posicao-1) + mutado +
> > _gene.substring(posicao+1,tamCromossomo-1);
> > }
> > }
> >
> > }
> >
> > //Populacao.as (O trecho inicial)
> > package
> > {
> > public class Populacao
> > {
> > import mx.controls.Alert;
> > import mx.core.Application;
> >
> > private var individuos:Array;
> > private var censo:uint;
> > private var selecao:String;
> > private var taxaMutacao:Number;
> > private var tipoCross:String;
> > private var tamGene:uint;
> > private var valorSoma:Number;
> > private var valorMult:Number;
> > private var limiteSuperior1:uint = 0;
> > private var limiteSuperior2:uint = 1;
> > private var finalizado:Boolean = false;
> > private var Resultado:Array = new Array(); //+
> > (etapa,gene,avaliacao)
> > private var limite:uint;
> > private var tipoProblema:uint;
> > private var etapa:uint;
> >
> > public function
> >
> Populacao(numero:uint,tam:uint,soma:Number,mult:Number,problema:uint):void{
> > censo = numero;
> > individuos = new Array(numero);
> > tamGene = tam;
> > valorSoma = soma;
> > valorMult = mult;
> > tipoProblema = problema;
> > Genesis(problema);
> > }
> >
> > private function Genesis(problema:uint):void{
> > var i:int;
> > var avaliacao:Number;
> > for (i=0; i<censo; i++){
> > var crom:Cromossomo = new
> Cromossomo(tamGene);
> > trace("Gene nº "+i.toString());
> > switch (problema){
> > case 1 : avaliacao =
> avalia1(crom.getGene(0,tamGene));
> > break;
> > case 2 : avaliacao =
> avalia2(crom.getGene(0,tamGene));
> > break;
> > case 3 : avaliacao =
> avalia3(crom.getGene(0,tamGene));
> > break;
> > }
> > individuos[i] = [crom,avaliacao];
> > if (avaliacao == Infinity){
> > etapa = 0;
> > Resultado[etapa] =
> [etapa,crom.getGene(0,tamGene),avaliacao];
> > finalizado = true;
> > }
> > }
> > //MostrarPop(individuos);
> > }
> >
> > .......
> >
> > }
> >
>
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---