[News ] Centres d’intérêts : La Recherche opérationnelle, le simplexe, la programmation linéaire . Mise a jour parfois

icone_news

Introduction


Suite à l’entrée en fin de ma formation Eicnam Cti (Reste 2 Ues et le mémoire, glups), je compte vraiment me recentrer sur la recherche opérationnelle (simplexe, solveurs), puis, si possible la déduction naturelle qui sont vraiment des univers et des outils impressionnants, mais, peu abordables pour qui ne pratique pas sans cesse.

La recherche opérationnelle est une science profonde et aux implications extrêmes et multiples. Je dirais qu’elle est tout simplement obligatoire.

La R.O, c’est les mathématiques dans leur aspect le plus séduisant , s’assurer de minimiser ses pertes et de maximiser ces gains, peut importe le projet, c’est juste MAGIQUE, des mathématiques, certes mais magiques (Surtout quand c’est traité par les solveurs .. ouf, et bien sur, du coup, l’erreur n’est pas permise).

Prenons un exemple simple, une personne désirant faire livrer 1000 exemplaires d’un objet génial dans 3 dépots différents en France à partir de 3 usines différentes en France avec des couts de trajet différents, mais qui n’utilise pas la recherche opérationnelle peut perdre énormément d’argent si il ne valide pas au préalable son projet en le modélisant dans un programme linéaire puis en exécutant le simplexe dessus avec pour fonction objectif de minimiser ses couts de transport.

Une des clefs de compréhension basique sur laquelle je compte étant la mise en vecteur des valeurs lors de l’analyse syntaxique du problème, puis la transposition au PL. L’autre clef étant de convertir les unités de temps à la même unité avant leur inclusion dans le PL (Il peut y a voir des jours, des heures des minutes, mais dans le PL, ce ne sont que des minutes par exemple) , de même pour les poids ou les flux. Rien que ces considérations à l’aspect futile me sont désormais d’un bon secours dans mon avancée dans cet univers. Bien sur, je reste dans le linéaire, et ne suis pas près d’en sortir pour l’instant pendant quelques années vu mon niveau .

Gestion des trajets et des stocks -> Réduction des couts
Gestion de mélanges de nourriture pour animaux -> Réduction des couts
Gestion d’emplois du temps complexes
Temps d’utilisation Machine -> Optimisation des gains , Maximisation du CA
Choix de matières premières -> Optimisation du CA

RCP 101 et RCP 110 : Mes livres pour enfin commencer à tenter de faire de l’optimisation concrete :

Simulation, Modélisation et décision de Vuibert : Aout 218
Je suis à la page 28 et c’est écrit d’une manière assez simple, donc ca va .

Programmation linéaire avec Excel 55 Problèmes d’optimisation pas à pas de EYROLLES: Mai 2018: Trop tooop , j’avance déjà et publierais un post sur toutes mes méthodes bientôt . Avec ce livre on peut commencer à traiter des problèmes concrets d’optimisation ; sans trop se soucier de la théorie, ce qui est mon but dans un premier temps (C’est trop hard, avec le quadratique etc …), n’étant pas capable encore de gérer les aspect théoriques de la question hormis les plus simples . Le but étant d’avoir pas mal de tableaux Excel prêts pour les cas globaux et savoir les exploiter avec le solveur. On peut déjà ainsi minimiser ou maximiser pas mal de cas .

Mai 2018 : Springer Numeric optimisation de 1989 : un anglais facile à comprendre et le peu que j’ai lu c’est super structure et gradué dans l’apprentissage . J’hallucine carrément a fond comme c’est bien écris : on comprends bien c’est dénué de toute information ou théorie inutile!. J’ai aussi tout le reste de livres springer sur le simplexe . Ça me rappelle la clarté des livres Cisco mais encore en mieux puissance 100 , Il me semble que ca provient droit des usa ou peut être de UK .EDIT 2 :
J’ai juste dit n’importe quoi , en effet, c’était valable pour le premier chapitre, mais, en réalité, les autres chapitres sont extrêmement complexes voir inabordables, avec des mathématiques ultra avancés, finalement, pour l’instant, du coup je me rabats sur les livres springer d’introduction à la R.O parus vers 2010 , mon but étant d’être opérationnel avec des méthodes éprouvées et utiles sur des problèmes bateaux , pas de blablater sur un blog.

Programmation linéaire (5 euros): Eric Jacquet :Trop sympa avec des exos Excel, accessible, et il parle des solveurs.

La programmation linéaire (6 euros): Bruno H Solnik : Accessible avec de bons rappels de maths, un exemple trop sympa de vendeur de chaussettes qui doit optimiser ses gains.

Précis de recherche opérationnel ‘Version des années 1965-1970 ‘ : Un flot d’informations trop fourni à mon goût. Une graduation de l’apprentissage du plus simple au plus complexe non présente à mon gout. J’ai désormais la version des années 2010 et elle est vraiment beaucoup mieux aux premiers abords, et finalement, plus accessible que les livres springer.

La programmation linéaire appliquée à l’entreprise : DUNOD 1970 : Aux premiers abords  syntaxe sympa pour l’introduction : J’ai l’impression lors d’une première lecture , que le niveau dans les années 70 était plus haut que maintenant aux premiers abords. Il s’agissait d’une autre époque ou les idées étaient fondées et très profondes et complexes, basées sur de lourdes réflexions. Ni Internet, ni Excel n’existait, le niveau était extrême , et à l’époque la production était importante en France.

Il semble que je doive acheter https://www.eyrolles.com/Informatique/Livre/recherche-operationnelle-tome-1-9782729875091 mais c’est vraiment hyper cher !

Bref, dans tout cela , ce qui est le plus fascinant, c’est ‘ l’optimisation sous contraintes’ ainsi que la fonction à optimiser traduit l’objectif suivi par l’entreprise.’

 

Je compte faire RCP 110 mais pas de suite, vu qu’elle n’est pas obligatoire de suite, mais dans tous les cas je me dirige vers cela, et mon niveau actuel n’est pas assez bon le but étant de devenir opérationnel immédiatement sur les problèmes courants (horaires, objets à vendre, mélanges, flux par exemple), même si j’ai obtenu les UES, normal je faisais plein d’autres choses en même temps, de plus une fois l’UE obtenue, il faut continuer à la pratiquer pendant des années, selon moi , par contre je vais évoluer, et si je ne fais que ça pendant des années, ça va forcément avancer ) ?. Dans l’idée, il faudrait éventuellement ne plus faire que de la recherche opérationnelle, et presque plus de développement .
La démarche n’est pas du tout d’abandonner une UE que l’on a obtenu, mais il faut au contraire conserver ses classeurs et les relire si possible souvent.

Ce qui est drôle, c’est qu’à la suite de l’obtention du diplôme, j’aimerais prendre toutes les UES facultatives du cursus je pense, en fonction du temps .

L’autre partie qui m’intéresse dans ma formation est l’ingénierie commerciale .
A par ça, le site http://www.jybaudot.fr/a_general/indexstats.html est vraiment cool.

NFP 108 est vraiment fournie, assez difficile(Les prédicats), et très différente selon les régions, la version du Cnam Paris est vraiment complète sur les prédicats et excellente et ouvre la voie à des déductions inespérées, pour qui maitrise… La version de Bretagne est axée à fond sur les automates .Les professeurs NFP108 de Paris sont des sortes de génies. Lorsque l’on voit un logiciel comme COQ , on comprends que l’on puisse passer son temps à exercer sur pareil logiciel afin de prouver des problèmes possédant des tas d’aspects différents.

Publicités

[AngularJs + Php MYSQL ] Une table Html infinite scroll simple, sur base de donnée

angularjsphp_1_

Introduction


Avec Angularjs 1.6 , on ne télécharge pas tout un modèle de données lorsqu’il est très grand. Par exemple, pour, afficher toute une table de log de 150 MO, évidemment, on ne charge pas toute la table d’un seul coup dans la mémoire vive, ce serait bien trop couteux. Dans d’autres cas, dans le cadre d’une vue spéciale dans une application, on peut envisager de télécharger tout le modèle de données ( Par exemple, 500 utilisateurs)

L’idée de l’infinite Scroll sur base de donnée


L’idée étant d’afficher les 20 premiers enregistrements de la table, puis ensuite, lorsque l’on atteints le bas de la page, charger les 20 suivants, puis ainsi de suite, de cette manière, l’utilisateur a la sensation d’être en temps réel.

Le problème


Lire la suite

[AngularJs] un autocomplete asynchrone sur base de données avec Js-Custom-Select

Introduction :


Avec AngularJs, on est vite tenté de charger tout un modèle de données en mémoire vive, même pour l’afficher dans un select dropdown, c’est tellement facile … Par exemple comme ici :https://desgeeksetdeslettres.com/programmation-java/auto-completion-avec-angularjs

Pourtant, c’est forcément couteux dès que l’on a des centaines d’objets, d’ou l’idée de réserver la partie recherche au BACK END dès que les résultats dépassent la centaine de cas, en gros .

Qu’entends–t-on par modèle de données ? Par exemple : Toutes les villes de France (Des milliers), tous les utilisateurs de facebook (Des millions). Alors évidemment, on ne va pas tout charger dans le Front End et donc faire du asynchrone.

Pour parler basiquement, il faut qu’ à chaque fois que l’on tape une touche dans un champs INPUT, une requête SQL recherche les occurences dans la base de données, et remontent les resultats au format tableau d’objets JSON  (ARRAY [{},{},{},etc ….]). Ces résultats s’affichent alors dans notre select dropdown, afin de pouvoir faire notre choix.

C’est ce que permet de faire https://github.com/axel-zarate/js-custom-select.

Photo exemple de l’autocomplete sur base de données :

moumoute

Le code :

Je passe sur l’installation de js-custom-select qui est bien expliquée dans le github…


Dans la vue HTML, je mets mon SELECT :

<div custom-select="personne.lastName  for personne in searchAsync($searchTerm)" custom-select-options="{ 'async': true }" ng-model="custom2">
    <div class="pull-left" style="width: 40px">
        <img ng-src="{{ personne.image || 'img_app/gender_neutral_user1600_g.png' }}" style="width: 30px" /></div>
    <div class="pull-left">
        <strong>{{ personne.firstName}}</strong>

        <span>{{ personne.lastName}}</span></div>
    <div class="clearfix"></div>
</div>

On voit que on va afficher les objets personnes qui vont satisfaire le critère $searchTerm. En fait, dès qu’on va écrire dans le select, angularJs va exécuter searchAsync($searchTerm) , $searchTerm étant ce que l’on vient d’écrire. La recherche va se faire sur le lastName (le nom, en anglais)

Dans mon controleur MVC angularJS , j’ai cette fonction :

var wsUrl = 'web_services/mes_web_services.php';

$scope.searchAsync = function(term) {

  if (!term) {
    return false;
  }

  var putResponse;
  var promise = $http.post(wsUrl, {
    readPersonnes: JSON.stringify({
      'lastName': term
    })
  }).then(function(data, status, headers, config) {
    putResponse = data.data;
    console.log(putResponse); // this gets called after the server responds ( defined )
    return putResponse;

  })
  console.log(putResponse); // this gets called before the server responds ( undefined )
  return promise;

};

On voit qu’une requête HTTP est exécutée vers la base de données lors de chaque changement de la variable ‘term’ dans le select.

Et enfin, mon code BACK END en PHP MYSQLI, qui retourne à chaque fois la ou les réponses au format Array d’objets JSON habituel :

if(!empty($_POST["readPersonnes"])){
       $json = $_POST["readPersonnes"];
	$data = json_decode($json); 
  	echo json_encode($db->readPersonnes($data));
} 
  
  
// Read Personnes
public function readPersonnes($data)
{
	$sql = " SELECT p.* WHERE 1=1 ";
	

	if ($data->lastName) {
	   
		$sql .= " AND p.lastName LIKE '" .$data->lastName. "%'";
	}

	$responseArray = array();
	
	if ($result = $this->conn->query($sql)) {
		while ($obj = $result->fetch_object()) {
			array_push($responseArray, $obj);
		}
		mysqli_free_result($result); // Free result set
	}
	
	mysqli_close($this->conn);
	return $responseArray;
}

Explication : Si le back end detecte la présence de $data->lastName , alors, il filtre avec LIKE « nomDeLaPersone % » sur le nom, le % veut dire qu’il cherche avec toutes les lettres possibles derrière la variable.
Si l’on ne recherche rien, alors aucun modèle de données n’est chargé, grace à

if (!term) {
return false;
}

NOTE : Ici je fait un select *, mais bien sur, je peux restreindre plus afin de soulager encore le traitement, je peux faire un p.lastName, p.id par exemple dans le select à la place de p.*
Pourquoi le WHERE 1 = 1 ? Et bien c’est pour pouvoir créer des requêtes SQL à la volée qu’on doit écrire cela.

Conclusion :

Avec cette méthode, on obtient des applications pas du tout couteuses, qui ne chargent pas des tas de modèles de données lorsqu’il y a plus de 5 champs autocomplete simultanés porant sur des modèles de données différents (Par exemple : Personnes, Villes, Départements …) dans une vue par exemple.

En d’autres terme, dès que l’on peut soulager le front end, on le fait , avec cette méthode, on peut rechercher sur des millions d’occurences sans dommage pour la mémoire vive .

Il ne nous reste plus qu’à afficher un petit LOADER avec ng-show pour rassurer l’utilisateur … Qui comprends bien qu’une requête SQL est en cours même sans être informaticien.

Note : Avec Jquery, c’est plus facile …