Alguem poderia me ajudar a fazer uma simples Implementacao do Algoritmo Hill Climbing em Java?

Ja tenho uma Classe Estados e a classe principal que chamo de Hill_Climbing. Meu problema seria na implementacao propriamente do algoritmo de hill Climing, pois a Minha classe (Algoritmo) onde faco a implementacao, apenas compara o estado atual e o primeiro vizinho. 

Alguem poderia me ajudar por favor?

Esta aqui minha classe Estado:

import java.util.ArrayList; import java.util.List;

public class Estado {

private String nome; private List<Estado> vizinhos; private int valor; private int getValor;  //construtor public Estado(String nome, int valor) {     this.nome = nome;     this.valor = valor;     this.vizinhos = new ArrayList<>(); }  //geters e seters public String getNome() {     return nome; }  public void setNome(String nome) {     this.nome = nome; }  public List<Estado> getVizinhos() {     return vizinhos; }  //  public void setVizinhos(List<Estado> vizinhos) { //      this.vizinhos = vizinhos; //  } public void addVizinhos(Estado vizinhos) {     this.vizinhos.add(vizinhos);     System.out.println("adicionou vizinho " +vizinhos.nome); }  public int getValor() {     return valor; }  public void setValor(int valor) {     this.valor = valor; }  //metodo que retorna o maior vizinho  public Estado maiorVizinho() {     int tmp;//armazena o valor armazenado no indice tal     int indice_maior = 0;//armazena indice com maior valor     int maior_valor = 0;      //System.out.println("Arraay:" + vizinhos.size());     for (int i = 0; i < vizinhos.size(); i++) {         tmp = vizinhos.get(i).getValor;          if (tmp > maior_valor) {             maior_valor = tmp;             indice_maior = i;         }     }     return vizinhos.get(indice_maior); } 

}

Minha Classe Principal(Hill_Climbing):

public class Hill_Climbing {    public static void main(String[] args) {      Estado estado_a = new Estado("A", 5);     Estado estado_b= new Estado("B", 8);     Estado estado_c = new Estado("C", 19);     Estado estado_d = new Estado("D", 7);     Estado estado_e = new Estado("E", 6);      //adicionar estados vizinhos do estado a     estado_a.addVizinhos(estado_b);     estado_a.addVizinhos(estado_c);      //adicionar estados vizinhos do estado c     estado_c.addVizinhos(estado_d);     estado_c.addVizinhos(estado_e);       Algoritmo hill_climbing = new Algoritmo();     Estado resultado = hill_climbing.hill(estado_a);      System.out.println("Resultado da execucao " + resultado.getNome() +  resultado.getValor());  } 

}

E a Classe Algoritmo onde acho que esta o problema:

public class Algoritmo {

public Estado hill(Estado estado_atual) {      Estado vizinho = estado_atual.maiorVizinho();         while (vizinho.getValor() < estado_atual.getValor() )  {           return estado_atual;     }      return estado_atual = vizinho;  } 

}