paises.pl
forzar las carga de los predicados del Cia Fact Book
y construir unos predicados ''adaptadores'' para extraer a partir de los hechos originales (predicados bgfact/3
)
unos nuevos predicados más manejables.
:- ensure_loaded('cia-worldfactbook-data.pl'). landBounderies(Pais, Valores) :- bgfact(Pais,'LandBounderies',Valores). naturalResources(Pais, Valores) :- bgfact(Pais,'NaturalResources',Valores). ... agriculture(Pais, Valores) :- bgfact(Pais,'Agriculture',Valores).
afinidad_politica(Pais1, Pais2, Afinidad)
que cuantifique la ''afinidad'' entre dos países en base a su pertenencia a organizaciones internacionales.
Da valores cercanos a 1 para conjuntos similares y cercanos a 0 para conjuntos diferentes.
Otra media similar sería el coeficiente Dice [wikipedia]
lists
de SWI-prolog [manual]
que incluye los predicados intersection(+Set1, +Set2, -Set3)
, union(+Set1, +Set2, -Set3)
y length(List, Length)
.
:- ensure_loaded('cia-worldfactbook-data.pl'). landBounderies(Pais, Valores) :- bgfact(Pais,'LandBounderies',Valores). naturalResources(Pais, Valores) :- bgfact(Pais,'NaturalResources',Valores). ... agriculture(Pais, Valores) :- bgfact(Pais,'Agriculture',Valores). library(lists). coeficiente_jaccard(Lista1, Lista2, Valor) :- intersection(Lista1, Lista2, Interseccion), length(Interseccion, A), union(Lista1, Lista2, Union), length(Union, B), Valor is float(A) / float(B). afinidad_politica(Pais1, Pais2, Afinidad) :- memberOf(Pais1, Organizaciones1), memberOf(Pais2, Organizaciones2), coeficiente_jaccard(Organizaciones1, Organizaciones2, Afinidad).
Desde el promt de swi-prolog se puede comprobar la ''similaridad'' entre pares de paises.
?- consult('paises.pl'). ?- afinidad_politica('Spain', 'France', X). ?- afinidad_politica('Sudan', 'France', X). ?- afinidad_politica('Germany', 'France', X).
Por ejemplo: ''similaridad'' basada en
NaturalResources
] (con un peso de 0.40)
Agriculture
] (con un peso de 0.30)
Industries
] (con un peso de 0.3)
LandBoundaries
para definir un predicado vecino(Pais1, Pais2)
... vecino(Pais1, Pais2) :- landBounderies(Pais1, Vecinos), member(Pais2, Vecinos).y usar ese predicado para encontrar ''rutas'' entre paises o para encontrar la lista de paises que están a menos de K saltos de uno dado.
ExportCommodities
para identificar paises que son competidores comerciales de uno dado
combinarlo con la lista/predicado ImportCommodities
para identificar posibles paises que podría aliarse comercialmente y complementar
sus exportaciones.