Délégation de services domotique
mariya2016
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
mariya2016 Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
mariya2016 Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai une application à faire qui concerne la délégation de services domotique.
j'ai une fonction qui calcule la similarité entre deux équipement( dans notre cas), elle est comme suit:
Where:
- X and Y are two profiles belonging to P;
- a is the set of common characteristics of X and Y;
- b is the set of characteristics existing in X and not existing in Y;
- c is the set of characteristics existing in Y and not existing in X;
- ASim is the atomic similarity between each characteristic of X and Y. ASim is defined as follows:
ASim: R+ x R+- [0,1]:
ASim(Xi,Yi)= 1 if (Xi=Yi)
0 if ((Xi different from Yi) and (type=qualitative)
Min(Xi,Yi)/Max(Xi,Yi) if ((Xi different from Yi) and (type=quantitive)
....
SVP est ce que quelqu'un peut me dire comment je peux programmer cette fonction en java, et comment je peux récupérer a ,b et c.
Merci
j'ai une application à faire qui concerne la délégation de services domotique.
j'ai une fonction qui calcule la similarité entre deux équipement( dans notre cas), elle est comme suit:

Where:
- X and Y are two profiles belonging to P;
- a is the set of common characteristics of X and Y;
- b is the set of characteristics existing in X and not existing in Y;
- c is the set of characteristics existing in Y and not existing in X;
- ASim is the atomic similarity between each characteristic of X and Y. ASim is defined as follows:
ASim: R+ x R+- [0,1]:
ASim(Xi,Yi)= 1 if (Xi=Yi)
0 if ((Xi different from Yi) and (type=qualitative)
Min(Xi,Yi)/Max(Xi,Yi) if ((Xi different from Yi) and (type=quantitive)
....
SVP est ce que quelqu'un peut me dire comment je peux programmer cette fonction en java, et comment je peux récupérer a ,b et c.
Merci
A voir également:
- Délégation de services domotique
- Désactiver services inutiles windows 11 - Guide
- Service de diffusion de données - Forum TNT / Satellite / Réception
- Le fichier à télécharger est la nouvelle note de service de votre entreprise. importez ce fichier dans le bon dossier sur l'espace pix cloud. donnez à ce fichier les mêmes droits d'accès que les autres notes de service. ✓ - Forum Windows
- Quel service d’internet permet à son navigateur de trouver l’adresse ip qui correspond à bipm.org ? - Forum Réseaux sociaux
- Domotique orange - Accueil - Guide objets connectés
3 réponses
Bonjour,
Le plus dur là dedans ce n'est pas trop le calcul en soit (c'est juste une moyenne pondérée), mais plutôt comment tu vas attribuer des valeurs derrière chacun des paramètres a, b, c... qui sont plus durs à déterminer.
Remarque : que représente la pondération w ?
Le plus dur là dedans ce n'est pas trop le calcul en soit (c'est juste une moyenne pondérée), mais plutôt comment tu vas attribuer des valeurs derrière chacun des paramètres a, b, c... qui sont plus durs à déterminer.
Remarque : que représente la pondération w ?
mariya2016
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
W c'est le poid , Wi c'est le poid de chaque caractéristique d'un équipement(la somme de ces poids = 1)
De manière purement algorithmique tu peux faire comme ceci :
Le plus dur maintenant c'est de mettre en équations w, x et y...
La confiance n'exclut pas le contrôle
private static double sum(int n, Function<Integer, Double> x) { double s = 0; for (int i = 1; i <= n; i++) s += x.apply(i); return s; } public static <X, Y> double qSim(int a, int b, int c, Function<Integer, Double> w, Function<Integer, X> x, Function<Integer, Y> y) { double p = a * sum(a + b + c, i -> w.apply(i) * aSim(x.apply(i), y.apply(i))); double q = a * sum(a, i -> w.apply(i)) + b * sum(b, i -> w.apply(a + i)) + c * sum(c, i -> w.apply(a + b + i)); return p / q; } public static <X, Y> double aSim(X x, Y y) { return 0; // TODO }
Le plus dur maintenant c'est de mettre en équations w, x et y...
La confiance n'exclut pas le contrôle
Je ne connais pas ta formule donc je ne sais pas à quoi elle sert exactement, mais je dirais que le but c'est de chercher a,b,c tels que Qsim est maximal ?
Dans ce cas tu peux y aller en force brute :
Dans ce cas tu peux y aller en force brute :
int aMax = 1, bMax = 1, cMax = 1; double simMax = Double.NEGATIVE_INFINITY; for (int a = 1; a <= n - 2; a++) for (int b = 1; b <= n - a -1; b++) for (int c = 1; a <= n - a - b; c++) { double sim = qSim(a, b, c, w, x, y); if (sim > simMax) { simMax = sim; aMax = a; bMax = b; cMax = c; } } System.out.println("a="+aMax+", b="+bMax+", c="+cMax+" -> qSim="+simMax);
Bonsoir à tous, j'ai pas encore trouvé une solution à ce problème.
J'ai essayé un petit code pour trouvé a,b et c mais ça ne marche pas, les nombres ne s'incrémentent pas, je pense que le problème est dans la boucle (je veux dire dans "result.next()").
j'ai pas su régler le problème :( , est ce que quelqu'un pourras m'aider svp!
voici mon code:
et voici ma table 'equipementtemperature':

donc dans exemple(en comparant 'chauf' et 'climG') le résultat finale doit être:
a=4 (le nombre de caractéristiques en commun_on ne compte pas le nom de l'equipement,marque,piece,etat_);
b=3 (le nombre de caractéristiques que 'climG' a et 'chauf' n'a pas _ le slash / veut dire la caractéristique est abente_);
c=0 (le nombre de caractéristiques que 'chauf' a et 'climG' n'a pas).
Merci pour votre aide.
J'ai essayé un petit code pour trouvé a,b et c mais ça ne marche pas, les nombres ne s'incrémentent pas, je pense que le problème est dans la boucle (je veux dire dans "result.next()").
j'ai pas su régler le problème :( , est ce que quelqu'un pourras m'aider svp!
voici mon code:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class similair { static int a=0; static int b=0; static int c=0; public static void main(String[] args) { try{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection("jdbc:oracle:thin:system/orcl1@localhost:1521:XE","admin","admin"); Statement st=con.createStatement(); String sqlT1="select * from EQUIPEMENTTEMPERATURE where NOMEQUIPEMENT='chauf' "; String sqlT2="select * from EQUIPEMENTTEMPERATURE where NOMEQUIPEMENT='climG' "; ResultSet rsT1=st.executeQuery(sqlT1); ResultSet rsT2=st.executeQuery(sqlT2); ResultSetMetaData rsmd = rsT1.getMetaData(); int columnsNumber = rsmd.getColumnCount(); ResultSetMetaData rsmd2 = rsT2.getMetaData(); int columnsNumber2 = rsmd2.getColumnCount(); while (rsT1.next()&& rsT2.next()) { for(int i = 0 ; i <= columnsNumber && i <= columnsNumber2; i++){ int j=i+3; if((rsT1.getString(j)!="/") &(rsT2.getString(j) !="/")) a++; else if((rsT1.getString(j)=="/")& (rsT2.getString(j) !="/")) b++; else if ((rsT1.getString(j)!="/") & (rsT2.getString(j) =="/")) c++; } } System.out.println(a +" "+ b +" "+c); con.close(); } catch(Exception e) { e.printStackTrace(); } } }
et voici ma table 'equipementtemperature':

donc dans exemple(en comparant 'chauf' et 'climG') le résultat finale doit être:
a=4 (le nombre de caractéristiques en commun_on ne compte pas le nom de l'equipement,marque,piece,etat_);
b=3 (le nombre de caractéristiques que 'climG' a et 'chauf' n'a pas _ le slash / veut dire la caractéristique est abente_);
c=0 (le nombre de caractéristiques que 'chauf' a et 'climG' n'a pas).
Merci pour votre aide.