diff --git a/Cluster/PowerMaster/build/built-jar.properties b/Cluster/PowerMaster/build/built-jar.properties index ea0a5ac..f9648f6 100644 --- a/Cluster/PowerMaster/build/built-jar.properties +++ b/Cluster/PowerMaster/build/built-jar.properties @@ -1,4 +1,4 @@ -#Thu, 12 Apr 2012 18:00:35 +0100 +#Wed, 18 Apr 2012 11:32:43 +0100 -C\:\\Users\\Bruno\\Documents\\NetBeansProjects\\PowerMaster= +C\:\\Users\\Miranda\\Desktop\\PowerMaster= diff --git a/Cluster/PowerMaster/build/classes/.netbeans_update_resources b/Cluster/PowerMaster/build/classes/.netbeans_update_resources new file mode 100644 index 0000000..e69de29 diff --git a/Cluster/PowerMaster/build/classes/Module/Administration/AdministrationClient.class b/Cluster/PowerMaster/build/classes/Module/Administration/AdministrationClient.class index 364b6a6..f1a23d9 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Administration/AdministrationClient.class and b/Cluster/PowerMaster/build/classes/Module/Administration/AdministrationClient.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Administration/CommandThread.class b/Cluster/PowerMaster/build/classes/Module/Administration/CommandThread.class index 170d5d6..97cdd74 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Administration/CommandThread.class and b/Cluster/PowerMaster/build/classes/Module/Administration/CommandThread.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Administration/GraphicThread.class b/Cluster/PowerMaster/build/classes/Module/Administration/GraphicThread.class index bcb52c9..9283ba2 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Administration/GraphicThread.class and b/Cluster/PowerMaster/build/classes/Module/Administration/GraphicThread.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Loader/KnapSack.class b/Cluster/PowerMaster/build/classes/Module/Loader/KnapSack.class new file mode 100644 index 0000000..9c351dd Binary files /dev/null and b/Cluster/PowerMaster/build/classes/Module/Loader/KnapSack.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Loader/Loader.class b/Cluster/PowerMaster/build/classes/Module/Loader/Loader.class index 18c4463..ecbb66e 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Loader/Loader.class and b/Cluster/PowerMaster/build/classes/Module/Loader/Loader.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Loader/OnesMax.class b/Cluster/PowerMaster/build/classes/Module/Loader/OnesMax.class index cebb470..fb2c64f 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Loader/OnesMax.class and b/Cluster/PowerMaster/build/classes/Module/Loader/OnesMax.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/Loader/Problem.class b/Cluster/PowerMaster/build/classes/Module/Loader/Problem.class index de8bcfd..0393595 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/Loader/Problem.class and b/Cluster/PowerMaster/build/classes/Module/Loader/Problem.class differ diff --git a/Cluster/PowerMaster/build/classes/Module/WebHTTP/webServerSocket.class b/Cluster/PowerMaster/build/classes/Module/WebHTTP/webServerSocket.class index 0b4cd6c..a7816f0 100644 Binary files a/Cluster/PowerMaster/build/classes/Module/WebHTTP/webServerSocket.class and b/Cluster/PowerMaster/build/classes/Module/WebHTTP/webServerSocket.class differ diff --git a/Cluster/PowerMaster/build/classes/NodeJS/NodeEmiter.class b/Cluster/PowerMaster/build/classes/NodeJS/NodeEmiter.class index bc1af68..f9014c5 100644 Binary files a/Cluster/PowerMaster/build/classes/NodeJS/NodeEmiter.class and b/Cluster/PowerMaster/build/classes/NodeJS/NodeEmiter.class differ diff --git a/Cluster/PowerMaster/build/classes/TMP/Item.class b/Cluster/PowerMaster/build/classes/TMP/Item.class new file mode 100644 index 0000000..56b8427 Binary files /dev/null and b/Cluster/PowerMaster/build/classes/TMP/Item.class differ diff --git a/Cluster/PowerMaster/build/classes/TMP/Mochila.class b/Cluster/PowerMaster/build/classes/TMP/Mochila.class new file mode 100644 index 0000000..8756cf6 Binary files /dev/null and b/Cluster/PowerMaster/build/classes/TMP/Mochila.class differ diff --git a/Cluster/PowerMaster/build/classes/powermaster/GeneticEvents.class b/Cluster/PowerMaster/build/classes/powermaster/GeneticEvents.class index 6f604cf..e394b7f 100644 Binary files a/Cluster/PowerMaster/build/classes/powermaster/GeneticEvents.class and b/Cluster/PowerMaster/build/classes/powermaster/GeneticEvents.class differ diff --git a/Cluster/PowerMaster/build/classes/powermaster/PowerMaster.class b/Cluster/PowerMaster/build/classes/powermaster/PowerMaster.class index 033861d..401bb46 100644 Binary files a/Cluster/PowerMaster/build/classes/powermaster/PowerMaster.class and b/Cluster/PowerMaster/build/classes/powermaster/PowerMaster.class differ diff --git a/Cluster/PowerMaster/build/classes/powermaster/VerificaParametros.class b/Cluster/PowerMaster/build/classes/powermaster/VerificaParametros.class new file mode 100644 index 0000000..c9710d1 Binary files /dev/null and b/Cluster/PowerMaster/build/classes/powermaster/VerificaParametros.class differ diff --git a/Cluster/PowerMaster/dist/PowerMaster.jar b/Cluster/PowerMaster/dist/PowerMaster.jar index 348d873..9cfcecc 100644 Binary files a/Cluster/PowerMaster/dist/PowerMaster.jar and b/Cluster/PowerMaster/dist/PowerMaster.jar differ diff --git a/Cluster/PowerMaster/nbproject/build-impl.xml b/Cluster/PowerMaster/nbproject/build-impl.xml index 5c6e21a..f0ae68f 100644 --- a/Cluster/PowerMaster/nbproject/build-impl.xml +++ b/Cluster/PowerMaster/nbproject/build-impl.xml @@ -20,10 +20,10 @@ is divided into following sections: --> - + - + @@ -198,6 +198,7 @@ is divided into following sections: + @@ -384,6 +385,7 @@ is divided into following sections: + @@ -514,7 +516,7 @@ is divided into following sections: - + @@ -839,6 +841,14 @@ is divided into following sections: --> + + + + + + + + @@ -850,6 +860,7 @@ is divided into following sections: + diff --git a/Cluster/PowerMaster/nbproject/genfiles.properties b/Cluster/PowerMaster/nbproject/genfiles.properties index 8274b41..f583eac 100644 --- a/Cluster/PowerMaster/nbproject/genfiles.properties +++ b/Cluster/PowerMaster/nbproject/genfiles.properties @@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.44.1.45 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=b694bb79 -nbproject/build-impl.xml.script.CRC32=aaeadb6d -nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 +nbproject/build-impl.xml.script.CRC32=e70e4baf +nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46 diff --git a/Cluster/PowerMaster/nbproject/private/private.properties b/Cluster/PowerMaster/nbproject/private/private.properties index 803326c..be20e48 100644 --- a/Cluster/PowerMaster/nbproject/private/private.properties +++ b/Cluster/PowerMaster/nbproject/private/private.properties @@ -3,4 +3,4 @@ do.depend=false do.jar=true javac.debug=true javadoc.preview=true -user.properties.file=C:\\Users\\Bruno\\.netbeans\\7.0\\build.properties +user.properties.file=C:\\Users\\KopDicht\\.netbeans\\7.1\\build.properties diff --git a/Cluster/PowerMaster/src/Module/Loader/KnapSack.java b/Cluster/PowerMaster/src/Module/Loader/KnapSack.java new file mode 100644 index 0000000..ed3d63e --- /dev/null +++ b/Cluster/PowerMaster/src/Module/Loader/KnapSack.java @@ -0,0 +1,220 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package Module.Loader; + +import TMP.Item; +import TMP.Mochila; +import genetics.Solver; +import java.util.ArrayList; + +/** + * + * @author Bruno Oliveira nº 11127 IPT-ESTT + */ +public class KnapSack extends Problem { + + public static final String ProblemName = "KnapSack"; + /** + * Tamanho da população + */ + private int popSize; + public static final String PARAM_POPULATION_SIZE = "pop"; + /** + * Tamanho do alelo + */ + private int alelloSize; + public static final String PARAM_ALELLO_SIZE = "alello"; + /** + * Número maximo de Iterações + */ + private int Iterations; + public static final String PARAM_ITERATIONS = "iterations"; + /** + * Condição de paragem. Melhor fitness individuo + */ + private int bestFitness; + public static final String PARAM_BEST_FITNESS = "best"; + /** + * Capacidade maxima que a mochila pode contem + */ + private int maxWeight; + public static final String PARAM_MAX_WEIGHT="weight"; + /** + * Valor maximo de peso que cada item pode ter + */ + private int maxItemWeight; + public static final String PARAM_MAX_ITEM_WEIGHT="max_item_weight"; + /** + * Valor maximo de valor que cada item pode ter + */ + private int maxItemValue; + public static final String PARAM_MAX_ITEM_VALUE="max_item_value"; + /** + * Número de items que existem no problema + */ + private int numItems; + public static final String PARAM_NUM_ITEMS="numItems"; + /** + * Número de parametros que são necessário para que o problema OneMax seja corrido + */ + private static int PARAM_REQUIRED = 5;//Número de parametros obrigatórios + private int PARAM_ADDED = 0;//Número de parametros adicionados obrigatórios + private static int PARAM_COUNT = 8;//Número de parametros existentes no problema + /** + * Referência para todas as linhas existentes no documento + */ + private String data[]; + /** + * Variável que indica o estado do loader + */ + private boolean loadStatus; + /** + * Estrutura de dados do problema + */ + private Mochila mochila; + /** + * Construtor do problema OnesMax + * @param data Informação do problema a ser carregado + */ + public KnapSack(String data[]) { + super(KnapSack.ProblemName, PARAM_COUNT); + this.data = data; + this.loadStatus = Load(); + } + + private boolean Load() { + System.out.println("----Params Data-----"); + //Ler a segunda linha que contem todos os parametros de arranque + String[] parmsData = data[1].split(";"); + //Percorrer todos os parametros + for (int i = 0; i < parmsData.length; i++) { + //Separar o identificado do valor (=) + String[] param = parmsData[i].split("="); + //Verificação de parametros + //parametro 1 (Obrigatório) + if (param[0].equals(KnapSack.PARAM_ITERATIONS) && !this.containsParam(KnapSack.PARAM_ITERATIONS)) { + //carregar o parametro para um dicionario de parametros + this.Iterations = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_ITERATIONS, this.Iterations); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(KnapSack.PARAM_ITERATIONS+"+:"+this.PARAM_ITERATIONS); + continue; + } + //parametro 2 + if (param[0].equals(KnapSack.PARAM_POPULATION_SIZE) && !this.containsParam(KnapSack.PARAM_POPULATION_SIZE)) { + this.popSize = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_POPULATION_SIZE, this.popSize); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(KnapSack.PARAM_POPULATION_SIZE+"+:"+this.popSize); + continue; + } + //parametro 3 + if (param[0].equals(KnapSack.PARAM_ALELLO_SIZE) && !this.containsParam(KnapSack.PARAM_ALELLO_SIZE)) { + this.alelloSize = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_ALELLO_SIZE, this.alelloSize); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(KnapSack.PARAM_ALELLO_SIZE+"+:"+this.alelloSize); + continue; + } + //parametro 4 + if (param[0].equals(KnapSack.PARAM_BEST_FITNESS) && !this.containsParam(KnapSack.PARAM_BEST_FITNESS)) { + this.bestFitness = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_BEST_FITNESS, this.bestFitness); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(KnapSack.PARAM_BEST_FITNESS+"+:"+this.bestFitness); + continue; + } + //parametro 5 + if (param[0].equals(KnapSack.PARAM_MAX_WEIGHT) && !this.containsParam(KnapSack.PARAM_MAX_WEIGHT)) { + this.maxWeight = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_MAX_WEIGHT, this.maxWeight); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(KnapSack.PARAM_MAX_WEIGHT+"+:"+this.maxWeight); + continue; + } + //parametro 6 + if (param[0].equals(KnapSack.PARAM_MAX_ITEM_WEIGHT) && !this.containsParam(KnapSack.PARAM_MAX_ITEM_WEIGHT)) { + this.maxItemWeight = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_MAX_ITEM_WEIGHT, this.maxItemWeight); + System.out.println(KnapSack.PARAM_MAX_ITEM_WEIGHT+":"+this.maxItemWeight); + continue; + } + //parametro 7 + if (param[0].equals(KnapSack.PARAM_MAX_ITEM_VALUE) && !this.containsParam(KnapSack.PARAM_MAX_ITEM_VALUE)) { + this.maxItemValue = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_MAX_ITEM_VALUE, this.maxItemValue); + System.out.println(KnapSack.PARAM_MAX_ITEM_VALUE+":"+this.maxItemValue); + continue; + } + //parametro 8 + if (param[0].equals(KnapSack.PARAM_NUM_ITEMS) && !this.containsParam(KnapSack.PARAM_NUM_ITEMS)) { + this.numItems = Integer.parseInt(param[1]); + this.addParam(KnapSack.PARAM_NUM_ITEMS, this.numItems); + System.out.println(KnapSack.PARAM_NUM_ITEMS+":"+this.numItems); + continue; + } + } + //Verificar se todos os parametros foram carregados + if (this.PARAM_ADDED >= KnapSack.PARAM_REQUIRED) { + + //Verificar se na linha 2 do documento existe a tag de inicio de dados + if(this.data[2].equals("")){ + //mochila = new Mochila(this.maxWeight); + int line=3; + //ArrayList values = new ArrayList(); + System.out.println("-----DataStart-----"); + //Enquanto for diferente que a tag de terminação de ficheiro vai adicionado + while(!this.data[line].trim().equals("")){ + //Ler o novo item + String[] item = this.data[line].split(";"); + //adicionar o novo item + System.out.println(Integer.parseInt(item[0])+"-"+Integer.parseInt(item[1])); + //values.add(new Item(Integer.parseInt(item[0]), Integer.parseInt(item[1]))); + //passar para a proxima linha + line++; + } + System.out.println("------DataEnd------"); + return true; + } + return false; + } + return false; + } + + /** + * Método que retorna o NOVO solver com os parametros carregados por o ficheiro. + * @return + */ + @Override + public Solver getNewSolver() { + //return new Solver(popSize, alelloSize, new genetics.OnesMax(), Iterations, bestFitness, new GeneticEvents(PowerMaster.INTERVAL_PART)); + return null; + } + + public boolean getStatus() { + return this.loadStatus; + } + + public int getIterations() { + return Iterations; + } + + public int getAlelloSize() { + return alelloSize; + } + + public int getBestFitness() { + return bestFitness; + } + + public int getPopSize() { + return popSize; + } +} diff --git a/Cluster/PowerMaster/src/Module/Loader/Loader.java b/Cluster/PowerMaster/src/Module/Loader/Loader.java index 047c8a8..5d0fc91 100644 --- a/Cluster/PowerMaster/src/Module/Loader/Loader.java +++ b/Cluster/PowerMaster/src/Module/Loader/Loader.java @@ -4,21 +4,26 @@ */ package Module.Loader; +import powermaster.VerificaParametros; + /** * * @author Bruno Oliveira nº 11127 IPT-ESTT */ public class Loader { - + static String[] linhas; + public static Problem Load(String dataIn) { //remover todos os caracteres estranhos dataIn = dataIn.replace("\r", ""); //Obter todas as linhas do documento - String[] linhas = dataIn.split("\n"); + linhas = dataIn.split("\n"); //Leitura da primeira linha para verificar qual o tipo de problema String[] primeiraLinha = linhas[0].split(";"); //Verificação do tipo de problema (Linha 1) - if (primeiraLinha[0].equals("OneMax")) { + + if (primeiraLinha[0].equals(OnesMax.ProblemName) && VerificaParametros.VerInt(primeiraLinha)) { + System.out.println("##### New Ones Max Problem #####"); //Problema do tipo OnesMax OnesMax oneMax = new OnesMax(linhas); //Verificar se o objecto foi carregado com sucesso com a informação passada @@ -26,9 +31,31 @@ public static Problem Load(String dataIn) { //Atribnuição de Identificadores globais oneMax.setProblemID(Integer.parseInt(primeiraLinha[1])); oneMax.setClientID(Integer.parseInt(primeiraLinha[2])); + System.out.println("##### OnesMax Problem Ok #####"); return (Problem)oneMax; } + System.out.println("##### OnesMax NOT LOADED #####"); } + if (primeiraLinha[0].equals(KnapSack.ProblemName) && VerificaParametros.VerInt(primeiraLinha)) { + System.out.println("##### New KnapSack Problem #####"); + //Problema do tipo OnesMax + KnapSack knapSack = new KnapSack(linhas); + //Verificar se o objecto foi carregado com sucesso com a informação passada + if(knapSack.getStatus()){ + //Atribnuição de Identificadores globais + knapSack.setProblemID(Integer.parseInt(primeiraLinha[1])); + knapSack.setClientID(Integer.parseInt(primeiraLinha[2])); + System.out.println("##### KnapSack Problem Ok #####"); + return (Problem)knapSack; + } + System.out.println("##### KnapSack NOT LOADED #####"); + } + return null; } + + + + + } \ No newline at end of file diff --git a/Cluster/PowerMaster/src/Module/Loader/OnesMax.java b/Cluster/PowerMaster/src/Module/Loader/OnesMax.java index 61eb341..b73fe41 100644 --- a/Cluster/PowerMaster/src/Module/Loader/OnesMax.java +++ b/Cluster/PowerMaster/src/Module/Loader/OnesMax.java @@ -7,6 +7,7 @@ import genetics.Solver; import powermaster.GeneticEvents; import powermaster.PowerMaster; +import powermaster.VerificaParametros; /** * @@ -38,7 +39,9 @@ public class OnesMax extends Problem { /** * Número de parametros que são necessário para que o problema OneMax seja corrido */ - private static int PARAM_COUNT = 4; + private static int PARAM_REQUIRED = 4;//Número de parametros obrigatórios + private int PARAM_ADDED = 0;//Número de parametros adicionados obrigatórios + private static int PARAM_COUNT = 4;//Número de parametros existentes no problema /** * Referência para todas as linhas existentes no documento */ @@ -53,7 +56,7 @@ public class OnesMax extends Problem { * @param data Informação do problema a ser carregado */ public OnesMax(String data[]) { - super(OnesMax.ProblemName, PARAM_COUNT); + super(OnesMax.ProblemName, PARAM_REQUIRED); this.data = data; this.loadStatus = Load(); } @@ -67,36 +70,57 @@ private boolean Load() { String[] param = parmsData[i].split("="); //Verificação de parametros //parametro 1 - if (param[0].equals(OnesMax.PARAM_ITERATIONS)) { + Boolean verInt=Problem.VerInt(param); + + if(verInt){ + if (param[0].equals(OnesMax.PARAM_ITERATIONS) && !this.containsParam(OnesMax.PARAM_ITERATIONS)) { //carregar o parametro para um dicionario de parametros this.Iterations = Integer.parseInt(param[1]); this.addParam(OnesMax.PARAM_ITERATIONS, this.Iterations); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(OnesMax.PARAM_ITERATIONS+"+:"+this.PARAM_ITERATIONS); continue; } //parametro 2 - if (param[0].equals(OnesMax.PARAM_POPULATION_SIZE)) { + if (param[0].equals(OnesMax.PARAM_POPULATION_SIZE) && !this.containsParam(OnesMax.PARAM_POPULATION_SIZE)) { this.popSize = Integer.parseInt(param[1]); this.addParam(OnesMax.PARAM_POPULATION_SIZE, this.popSize); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(OnesMax.PARAM_POPULATION_SIZE+"+:"+this.popSize); continue; } //parametro 3 - if (param[0].equals(OnesMax.PARAM_ALELLO_SIZE)) { + if (param[0].equals(OnesMax.PARAM_ALELLO_SIZE) && !this.containsParam(OnesMax.PARAM_ALELLO_SIZE)) { this.alelloSize = Integer.parseInt(param[1]); this.addParam(OnesMax.PARAM_ALELLO_SIZE, this.alelloSize); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(OnesMax.PARAM_ALELLO_SIZE+"+:"+this.alelloSize); continue; } //parametro 4 - if (param[0].equals(OnesMax.PARAM_BEST_FITNESS)) { + if (param[0].equals(OnesMax.PARAM_BEST_FITNESS) && !this.containsParam(OnesMax.PARAM_BEST_FITNESS)) { this.bestFitness = Integer.parseInt(param[1]); this.addParam(OnesMax.PARAM_BEST_FITNESS, this.bestFitness); + //registar parametros obrigatório + this.PARAM_ADDED++; + System.out.println(OnesMax.PARAM_ALELLO_SIZE+"+:"+this.bestFitness); continue; } + }else{ + return false; + } } + //Verificar se todos os parametros foram carregados - if (this.get_ACTUAL_NUM_PARAMS() == OnesMax.PARAM_COUNT) { + if (this.PARAM_ADDED == OnesMax.PARAM_REQUIRED) { //Ler dados (restantes Linhas) //Neste caso não existe a necessidade de carregar parametros + System.out.println("#### NO DATA ####"); + //Ler linha 2 para ver se começa com //LER TODOS os valores por LINHA (com um while) //Colocar todos os valores lidos numa estrutura de dados (Unica para cada problema) diff --git a/Cluster/PowerMaster/src/Module/Loader/Problem.java b/Cluster/PowerMaster/src/Module/Loader/Problem.java index d1f7675..a1e46f2 100644 --- a/Cluster/PowerMaster/src/Module/Loader/Problem.java +++ b/Cluster/PowerMaster/src/Module/Loader/Problem.java @@ -19,7 +19,8 @@ public abstract class Problem { */ private final int NUM_PARAMS; /** - * Variável que indica o número de parametros existentes actualmente no problema + * Variável que indica o número de parametros existentes actualmente no + * problema */ private int ACTUAL_NUM_PARAMS; /** @@ -48,12 +49,14 @@ public Problem(String ProblemName, int NUM_PARAMS) { /** * Método que permite obter uma nova instacia do objecto solver - * @return + * + * @return */ public abstract Solver getNewSolver(); /** * Método para adicionar parametros ao objecto Problem + * * @param param Identificado do parametro (String) * @param data Data do parametro (Objecto) */ @@ -64,9 +67,20 @@ public void addParam(String param, Object data) { } } + /** + * Método que verifica se existe um parametro na estrutura + * + * @param param Chave que identifica o parametro a ser verificado + * @return True - Existe / False - Não existe + */ + public boolean containsParam(String param) { + return this.Parms.containsKey(param); + } + /** * Método que retorna o número de parametros adicionados ao problema - * @return + * + * @return */ public int get_ACTUAL_NUM_PARAMS() { return ACTUAL_NUM_PARAMS; @@ -74,13 +88,31 @@ public int get_ACTUAL_NUM_PARAMS() { /** * Método que permite procurar um parametro por a sua chave + * * @param key Chave de pesquisa - * @return Retorno do obejcto encontrado, caso não seja encontrado este método retorna null + * @return Retorno do obejcto encontrado, caso não seja encontrado este + * método retorna null */ public Object getParms(String key) { return Parms.get(key); } + public static Boolean VerInt(String[] linha) { + Boolean res = false; + for (int i = 1; i < linha.length; i++) { + try { + Integer.parseInt(linha[i]); + } catch (Exception e) { + System.out.println("Caracter encontrado: " + linha[i] + " erro: " + e); + res = false; + return res; + } + res = true; + } + + return res; + } + public int getProblemID() { return ProblemID; } diff --git a/Cluster/PowerMaster/src/TMP/Item.java b/Cluster/PowerMaster/src/TMP/Item.java new file mode 100644 index 0000000..a48469a --- /dev/null +++ b/Cluster/PowerMaster/src/TMP/Item.java @@ -0,0 +1,83 @@ +package TMP; + +import genetics.Population; +import java.util.Random; + +/* ------------------------------------------------------------------------- + * ------------------------------------------------------------------------- + * I n s t i t u t o P o l i t e c n i c o d e T o m a r + * E s c o l a S u p e r i o r d e T e c n o l o g i a + * + * @author Ruben Felix + * ------------------------------------------------------------------------- + * Número de Aluno: 13691 + * E-mail: Ruben.Felix@gmail.com + * ------------------------------------------------------------------------- + * ------------------------------------------------------------------------- + */ + +/** + * Classe que guardará a informação referente a cada item da mochila. + * @author Ruben Felix + */ +public class Item { + + private int valor; + private int peso; + private Random random; + + /** + * Construtor por defeito da classe. São passados por parametro o peso máximo da mochila + * e o valor máximo de um item para que o item gerado aleatóriamente não ultrapasse esses + * valores. + * @param pesoMax - Peso máximo da mochila + * @param valorMax - Valor máximo que um item da mochila poderá ter + */ + public Item(int pesoMax, int valorMax){ + this.peso = Population.RANDOM_GENERATOR.nextInt(pesoMax);; + this.valor = Population.RANDOM_GENERATOR.nextInt(valorMax);; + } + + /** + * Construtor da classe onde não não precisos parametros para a instanciar + */ + public Item(){} + + /** + * Método que devolve o valor do item + * @return the valor - Valor do item + */ + public int getValor() { + return valor; + } + + /** + * Método que permite definir o valor do item + * @param valor - Valor do item a ser definido + */ + public void setValor(int valor) { + this.valor = valor; + } + + /** + * Método que devolve o peso do item + * @return the peso - Peso do item + */ + public int getPeso() { + return peso; + } + + /** + * Método que define o peso do item + * @param peso - Peso a ser definido para o item + */ + public void setPeso(int peso) { + this.peso = peso; + } + + @Override + public boolean equals(Object o){ + if((this.peso == ((Item)o).getPeso()) && (this.valor == ((Item)o).getValor())) return true; + else return false; + } +} diff --git a/Cluster/PowerMaster/src/TMP/Mochila.java b/Cluster/PowerMaster/src/TMP/Mochila.java new file mode 100644 index 0000000..11f9919 --- /dev/null +++ b/Cluster/PowerMaster/src/TMP/Mochila.java @@ -0,0 +1,147 @@ +package TMP; + +import genetics.Population; +import java.util.ArrayList; + +/* ------------------------------------------------------------------------- + * ------------------------------------------------------------------------- + * I n s t i t u t o P o l i t e c n i c o d e T o m a r + * E s c o l a S u p e r i o r d e T e c n o l o g i a + * + * @author Ruben Felix + * ------------------------------------------------------------------------- + * Número de Aluno: 13691 + * E-mail: Ruben.Felix@gmail.com + * ------------------------------------------------------------------------- + * ------------------------------------------------------------------------- + */ + +/** + * Classe que irá receber os parametrôs relativos ao saco para o problema da mochila. + * Recebe o peso máximo da mochila e poderá receber os items que a mesma poderá conter (peso e valor de cada um) + * ou então calcula os mesmos aleatóriamente. + * @author Ruben Felix + */ +public class Mochila { + //ArrayList que terá todos os items que a mochila poderá transportar + private ArrayList items; + //Peso máximo que a mochila poderá transportar + private int pesoMaximo; + //Peso máximo que cada item poderá conter + private int maxPesoItem; + //Valor máximo que cada item poderá ter + private int maxValorItem; + //Numero de items criados para a mochila + private int numItems; + //Variavel que fará o controlo das penalizações para os individuos no cálculo do seu fitness + private boolean penalizacao = true; + + /** + * Construtor da classe onde apenas é passado por parametro o peso máximo da mochila. + * Os items que a mesma poderá transportar bem como os seus pesos e valores serão calculados aleatóriamente + * @param pesoMochila - Peso máximo que a mochila poderá transportar + */ + public Mochila(int pesoMochila){ + this.pesoMaximo = pesoMochila; + //O máximo de peso por item nunca passará o valor máximo da capacidade da mochila + this.maxPesoItem = Population.RANDOM_GENERATOR.nextInt(pesoMochila - 1); + this.maxValorItem = Population.RANDOM_GENERATOR.nextInt(); + //Número de items criados aleatório + this.numItems = Population.RANDOM_GENERATOR.nextInt(); + items = new ArrayList(numItems); + criaItems(); + } + /** + * Construtor da classe onde são passado por parametros o peso máximo da mochila, o máximo de peso que cada item poderá conter, + * o valor máximo que cada item poderá ter e o número de items que serão criados e que a mochila poderá transportar. + * @param pesoMochila - Peso máximo de transporte da mochila + * @param maxPeso - Peso máximo que cada item poderá ter + * @param maxValor - Máximo valor que cada item poderá ter + * @param numItems - Número de items a serem criados para a mochila + */ + public Mochila(int pesoMochila, int maxPeso, int maxValor, int numItems){ + items = new ArrayList(numItems); + this.pesoMaximo = pesoMochila; + this.maxPesoItem = maxPeso; + this.maxValorItem = maxValor; + this.numItems = numItems; + criaItems(); + } + /** + * Construtor da classe onde são passados por parametros o peso máximo que a mochila poderá transportar e os arrys de inteiros correspondentes + * ao peso e valor de cada item. Os items serão criados de acordo com o peso e valor passados nos arrays. + * @param pesoMochila - Peso máximo que a mochila poderá transportar + * @param Peso - Array de inteiros referentes ao peso de cada item + * @param Valor - Array de inteiros referentes ao valor de cada item + */ + public Mochila(int pesoMochila, int[] Peso, int[] Valor){ + items = new ArrayList(Peso.length); + this.numItems = Peso.length; + this.pesoMaximo = pesoMochila; + for (int i = 0; i < numItems; i++) { + Item itemMochila = new Item(); + itemMochila.setPeso(Peso[i]); + itemMochila.setValor(Valor[i]); + items.add(itemMochila); + } + } + /** + * Método que cria os items aleatórios para a mochila, passando por parametro para cada + * item o valor máximo que o mesmo poderá ter, bem como o valor máximo do mesmo + */ + private void criaItems(){ + for (int i = 0; i < getNumItems(); i++) { + Item itemMochila = new Item(maxPesoItem, maxValorItem); + getItems().add(itemMochila); + } + } + + /** + * Método que devolve os items que a mochila poderá conter + * @return items - Items que a mochila poderá conter + */ + public ArrayList getItems() { + return items; + } + + /** + * Método que permite definir os items que a mochila poderá transportar + * @param items - Items a serem definidos para a mochila + */ + public void setItems(ArrayList items) { + this.items = items; + } + + /** + * Método que devolve o peso máximo que a mochila poderá transportar + * @return pesoMaximo - Peso máximo que pode ser transportado + */ + public int getPesoMaximo() { + return pesoMaximo; + } + + /** + * Método que devolve o número de items diferentes que a mochila contem + * @return the numItems - Número de items diferentes + */ + public int getNumItems() { + return numItems; + } + + /** + * Método que permite saber se a penalização está ou não activa no cálculo do fitness + * @return the penalizacao - true se a penalização estiver activa, false caso contrário + */ + public boolean isPenalizacao() { + return penalizacao; + } + + /** + * Método que permite definir se a penalização está ou não activa aquando do cálculo do fitness dos individuos + * @param penalizacao - true para activar, false para desactivar + */ + public void setPenalizacao(boolean penalizacao) { + this.penalizacao = penalizacao; + } + +} diff --git a/Cluster/PowerMaster/src/powermaster/PowerMaster.java b/Cluster/PowerMaster/src/powermaster/PowerMaster.java index d38c383..a263bd6 100644 --- a/Cluster/PowerMaster/src/powermaster/PowerMaster.java +++ b/Cluster/PowerMaster/src/powermaster/PowerMaster.java @@ -54,17 +54,19 @@ public static void main(String[] args) { //Exemplo de um loader para OnesMax - /*Problem p = null; + Problem p = null; try { - String resultado = WebFileDownloader.Download(new URL("File:C:\\Users\\Bruno\\Desktop\\load2.txt")); + //String resultado = WebFileDownloader.Download(new URL("File:C:\\Users\\Bruno\\Desktop\\load2.txt")); + String resultado = WebFileDownloader.Download(new URL("http://code.dei.estt.ipt.pt:81/loader/load4.txt")); + p = Loader.Load(resultado); } catch (IOException ex) { Logger.getLogger(PowerMaster.class.getName()).log(Level.SEVERE, null, ex); } - System.out.println(p.getParms(OnesMax.PARAM_ITERATIONS)); - Solver s = p.getNewSolver();*/ +// System.out.println(p.getParms(OnesMax.PARAM_ITERATIONS)); +// Solver s = p.getNewSolver(); } } diff --git a/Cluster/PowerMaster/src/powermaster/VerificaParametros.java b/Cluster/PowerMaster/src/powermaster/VerificaParametros.java new file mode 100644 index 0000000..321a890 --- /dev/null +++ b/Cluster/PowerMaster/src/powermaster/VerificaParametros.java @@ -0,0 +1,33 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package powermaster; + +/** + * + * @author Miranda + */ +public class VerificaParametros { + + public VerificaParametros() { + } + + + //VERIFICA SE OS PARAMETROS SAO NUMEROS INTEIROS + public static Boolean VerInt(String[] linha) { + Boolean res = false; + for (int i = 1; i < linha.length; i++) { + try { + Integer.parseInt(linha[i]); + } catch (Exception e) { + System.out.println("Caracter encontrado: " + linha[i] + " erro: " + e); + res = false; + return res; + } + res = true; + } + + return res; + } +} diff --git a/Docs/Base de Dados - Power Computing/Reqs_BD_16-4-2012.pdf b/Docs/Base de Dados - Power Computing/Reqs_BD_16-4-2012.pdf new file mode 100644 index 0000000..26ee7f2 Binary files /dev/null and b/Docs/Base de Dados - Power Computing/Reqs_BD_16-4-2012.pdf differ