package problemamochila;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.Vector;
public class Mochila {
private double carga;
private Vector<Objeto> objetos_disponiveis;
private ArrayList<Vector<Objeto>> populacao;
public Mochila(double carga, Vector<Objeto> objetos_disponiveis) {
setCarga(carga);
populacao = new ArrayList<Vector<Objeto>>();
this.objetos_disponiveis = objetos_disponiveis; // Pego de um arquivo os objetos com suas informações e salvo nesse Vector, no main, e jogo pro dessa classe.
}
public Mochila() {
}
public void Zera() {
for (int i = 0; i < objetos_disponiveis.size(); i++) {
objetos_disponiveis.get(i).setUsado(0); // Pra deixar todos como não usados.
}
}
public double somaCarga() {
double sum = 0;
for (int i = 0; i < objetos_disponiveis.size(); i++) {
if (objetos_disponiveis.get(i).getUsado() == 1) {
sum = sum + objetos_disponiveis.get(i).getPeso();
}
}
return sum;
}
public void metodoRandomico() {
while (populacao.size() < 10) {
int cont = 0;
Random r = new Random();
Zera();
while (true) {
i = r.nextInt(objetos_disponiveis.size());
if (getCarga() >= somaCarga() + objetos_disponiveis.get(i).getPeso()) {
objetos_disponiveis.get(i).setUsado(1);
cont = 0;
} else {
cont++;
if (cont > 10) {
break;
}
}
}
populacao.add(objetos_disponiveis);
System.out.print("\nsizeX: " + populacao.size() + "|"); // Aqui e na linha debaixo é só pra imprimir as soluções diferentes geradas.
print2();
}
for (int i = 0; i < populacao.size(); i++) { //Aqui imprime o Array preenchido, mas só sai com o último Vector inserido.
System.out.print("\nsizeZ: " + i + "|");
for (int j = 0; j < populacao.get(i).size(); j++) {
System.out.print(" " + populacao.get(i).get(j).getUsado());
}
}
}
public void print2() {
for (int j = 0; j < objetos_disponiveis.size(); j++) {
System.out.print(" " + objetos_disponiveis.get(j).getUsado());
}
}
public int getTamanhoPopulação() {
return populacao.size();
}
public void printObjetosEscolhidos() {
for (int i = 0; i < objetos_disponiveis.size(); i++) {
if (objetos_disponiveis.get(i).getUsado() == 1) {
objetos_disponiveis.get(i).print();
}
}
}
public double getBeneficio(int indice) {
double beneficio_total = 0;
for (int j = 0; j < populacao.get(indice).size(); j++) {
if (populacao.get(indice).get(j).getUsado() == 1) {
beneficio_total = beneficio_total + populacao.get(indice).get(j).getBeneficio();
}
}
return beneficio_total;
}
public Vector<Objeto> getObjeto(int indice) {
return populacao.get(indice);
}
public void printVetorSolucao() {
for (int i = 0; i < populacao.size(); i++) {
System.out.print("\nsize: " + i + "|");
for (int j = 0; j < populacao.get(i).size(); j++) {
System.out.print(" " + populacao.get(i).get(j).getUsado());
}
}
}
public void setCarga(double carga) {
this.carga = carga;
}
public double getCarga() {
return carga;
}
public void print() {
System.out.println("\nCarga Total: " + somaCarga() + "\nVetor solução: ");
printVetorSolucao();
}
}
Alguém me salva?