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
-~----------~----~----~----~------~----~------~--~---