Java para aplicações de otimização acadêmica

Oi pessoal,
estou querendo desenvolver um aplicação para testar algumas metaheurísticas no problema de localização.

Para quem não conhece, o problema de localização se resume em tendo um conjunto de Clientes e Depósitos, ligar cada cliente a um depósito de forma que o custo seja o menor possível e que as capacidades de atendimento de cada armazém não sejam extrapoladas.
Não é necessário que sejam utilizados todos os depósitos, mas cada um tem custo fixo caso seja utilizado.

[list] Primeiro, gostaria de saber se a linguagem Java é aconselhada para esta atividade.[/list]
[list]Segundo, como poderia dividir as classes? [/list]
[list]Terceiro, como devo fazer para relacionar os clientes e o depósitos? Atualmente, a minha solução para este problema seria uma matriz de Clientes x Depósitos, onde cada elemento da matriz conteria um objeto que indica se o cliente está naquele depósito, qual a quantidade de demanda atendida e o custo desta relação.
[/list]

Alguns outros dados:
Depósito:

  • Identificador,
  • Custo Fixo,
  • Capacidade,
  • Quais Clientes estão alocados nele,
  • Quantidade ainda Disponível de Capacidade
    Cliente:
  • Identificador,
  • Demanda total,
  • Em quais Depósitos ele está alocado (um cliente pode ter sua demanda atendida por vários Armazéns),
  • Quantidade de Demanda ainda não atendida pelos armazéns

Desde já agradeço a atenção de vocês.