Java >> Java tutorial >  >> Java

Savler baglæns kædeeksempel

I denne artikel vil vi se en lille introduktion og eksempel på, hvad der er baglæns kæde, og hvordan man implementerer det med jboss savler.

Dette eksempel bruger følgende teknologier og rammer:

  1. Maven 3.3.9
  2. Jboss Studio 10.3
  3. Drools Engine 7.0
  4. JDK 1.8.0_71




1. Introduktion

Baglæns kæde, er et koncept, der gør det muligt i en grafstruktur (afledningstræ) at komme igennem hver knude eller finde de mulige stier mellem 2 knudepunkter ved at bruge rekursion og reagere på skiftende værdier. Sidstnævnte skyldes, at savlen er en reaktiv regelmotor. Savler understøtter 2 typer operationer push (reaktiv drift) og pull (dataforespørgsel). Så dybest set er den baglæns kæde, hvordan hver node er forbundet med sin forælder og drage fordel af det til at finde relationer mellem dem. Vi vil opnå dette i dette eksempel ved at bruge savler og rekursionsforespørgsler, der gør det muligt at søge på afledningstræstruktur.

1.1 Eksempelgraf

Baglæns kædegraf

Denne graf er for at illustrere de data, som vi vil bruge i dette eksempel til at anvende baglæns kæde og bestemme, at nøglen er i konvolutten.

2. Konfigurer nødvendige værktøjer

Før vi fortsætter, er det nødvendigt at installere jboss-udviklerstudiet for at bygge savlen-projektet, der implementerer baglæns kæden ved hjælp af rekursionsbasen på 1.1-sektionsgrafen. For at downloade disse værktøjer gå til jboss devstudio site og installer dem.

Næste Tilføj drools plugin til IDE, åbn jboss IDE og vælg den nederste fane kaldet softwareopdatering, som den er vist nedenfor.

Jboss plugin side

Brug søgefeltet til at finde drools-plugin'et og installere det.

Jboss savler plugin

2.1 Oprettelse af The Maven Project

Efter installationen af ​​drools-plugin'et kan vi oprette et nyt drool-projekt for at implementere eksemplet.

Gå til, fil -> ny -> anden menu og søg i dialogboksen efter drools project.

Savler projektoprettelse

Vælg den anden mulighed, opret drools-projekt og udfyld nogle eksempler.

Savler projekttype

Tilføj et projektnavn, og vælg maven-støtten.

Savle projektoprettelse

2.2 Maven-projektets struktur

Efter projektoprettelsesguiden skulle vi have noget som dette:

Maven projektstruktur

Projektet leveres med en standardpakke kaldet com.sample. Dette har 3 eksempelklasser til en hurtig start og en konfigurationsfil ved navn kmodule.xml inde i src/main/resources/META-INF mappe, der gør det muligt at kortlægge vores mapper, der indeholder drools rule-filerne (.drl extension) for at oprette en savlsession og udføre regelkoden.

3. Implementering af eksempel på baglæns kæde

Nu har vi allerede vores drools dev-miljø konfigureret til at starte baglæns kædeimplementeringen. De trin, vi vil følge, er:

  • Oprettelse af modelklasse (placeringsklasse)
  • Oprettelse af Drools-reglerfil (.drl-udvidelsesfil. Implementering af afledningsforespørgsler)
  • Drools regelfiltilknytning
  • Validering af testklasse for resultater

3.1 Oprettelse af modelklasse

På jboss studio maven-projektet skal du højreklikke på com.sample pakke og opret en ny com.sample.model og inde i den pakke opret en ny klasse med navnet Location. Denne klasse vil være en model til at repræsentere placeringen på grafen.

Location.java

package com.sample.model;

import org.kie.api.definition.type.Position;

public class Location {
	
	@Position(0) //to indicate position of each attribute, that allows to the engine identifie the params order to use on the query function
	private String thing;
	@Position(1)
	private String location;
	
	public Location(){}
	
	public Location(String thing, String location) {
		super();
		this.thing = thing;
		this.location = location;
	}
	
	public String getThing() {
		return thing;
	}
	
	public void setThing(String thing) {
		this.thing = thing;
	}
	
	public String getLocation() {
		return location;
	}
	
	public void setLocation(String location) {
		this.location = location;
	}
}

3.2 Savler regler Filoprettelse

På jboss studio maven-projektet skal du højreklikke på src/main/resources mappe og opret en ny mappe efter kaldet backward_chaining. Højreklik på den forrige mappe og opret en ny regelfil ved navn BackwardChaining. Tjek herunder hvordan det skal se ud.

Oprettelse af reglerfil

BackwardChaining.drl

package com.sample

import com.sample.model.Location;



//declare any global variables here


query isContainedIn( String x, String y ) 
    Location( x, y; ) // we received the initial values from the rule "go1" and start to search inside the data stored on the engine 
    or 
    ( Location( z, y; ) and isContainedIn( x, z; ) ) //recursive call to the function that allows to search in a derivation tree structure
end

// rule to print inserted values 
rule "go" salience 10

  when
    $s : String( )
  then
    System.out.println( $s );
end

// rule that invokes the recursive query function to search in our office desk graph and when the condition is true prints "key is in the envelop"
rule "go1"

  when
    String( this == "go1" )
    isContainedIn("key", "envelop"; )
  then
    System.out.println( "key is in the envelop" );
end

3.3 Oprettelse af testklasse

På jboss studio maven-projektet skal du højreklikke på com.sample pakke og opret en ny klasse ved navn BackwardChainingTest. Denne klasse vil stå for oprettelse af motorsessionen. Udfyld motoren med grafdata og påberåb reglerne.

BackwardChainingTest.java

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.sample.model.Location;

public class BackwardChainingTest {
	public static void main(String[] args) {
		try {
			KieServices ks = KieServices.Factory.get();
			KieContainer kContainer = ks.getKieClasspathContainer();
			KieSession kSession = kContainer.newKieSession("ksession-backward-chaining");
                         //drools session base on the xml configuration (kmodule.xml)
			
                        //graph population
			kSession.insert(new Location("desk", "office"));
			kSession.insert(new Location("flashlight", "desk"));
			kSession.insert(new Location("envelop", "desk"));
			kSession.insert(new Location("key", "envelop"));
			
			kSession.insert("go1"); //invoke the rule that calls the query implentation of backward chaining
			kSession.fireAllRules(); //invoke all the rules
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}

}

Outputtet fra det forrige program er:

"go1
key is in the envelop"

Denne funktion tilføjet til savlen motor "Backward chaining" er måldrevet. Det betyder, at regelsystemet har en betingelse, der forsøger at opfylde. Hvis dette ikke er muligt, søg efter andre mulige værdier og fortsæt denne operation, indtil betingelsen er opfyldt.

4. Konklusioner

I dette eksempel så vi, hvordan man skaber baglæns kædeimplementeringen og bruger den på et projekteksempel ved hjælp af jboss dev studio. Vi forstod også, hvordan dataene er gemt inde i savlen, og hvordan man analyserer dette ved at bruge grafer for at få et mere klart overblik.

Hvis du vil læse mere om denne funktion, skal du gå til:Backward Chaining

5. Download Eclipse Project

Dette var et Drools baglæns kædeeksempel med Eclipse

Java tag