//GRUPPE Ilia- David && Andreas Wolf //Datum 31.12.2005 23:59:59 //Blatt 4 Aufgabe 4.1 (a,b,c,d,!e) //Aufgabe 4.1(b) // // Hier_drüber_schwingen = -(L1*cos(theta_1)+(L2*cos(theta_1+theta2))) // wobei L1 = L2 = 1 #include "acrobot.h" #include #include #include #define NVARS 4 #define NREGELN 6 #define IRRELEVANT -1 #define NSCHRITTE 100 #define NKNOTEN 3 #define RECHTS 2 #define MITTE 1 #define LINKS 0 // =================================================================== // V A R I A B L E N // =================================================================== typedef struct variable{ int nknoten; double start, ende ,delta; } variable; variable varmenge[NVARS]; variable var_u; // =================================================================== // R E G E L N // =================================================================== typedef struct regel{ int praemisse[NVARS]; int konklusion; } regel; regel regelmenge[NREGELN]; // =================================================================== // F U N K T I O N E N // =================================================================== //Berechnet die Zugehoerigkeitsfunktion (berechne_erfuellungsgrad_pro_variable) double zugehoerigkeitsfunktion(int regel, int variable, double wert){ int varindex; varindex=regelmenge[regel].praemisse[variable]; if(varindex==IRRELEVANT) {return 0;} double delta; delta=varmenge[variable].delta; double xi; xi=varmenge[variable].start+delta*varindex; //Abbruchbedingung if(varindex<0 || varindex>varmenge[variable].nknoten){ printf("\n Fehler in Funktion \"berechne_erfuellungsgrad_pro_variable\"!\n"); return 0; } //links: if((wert>=(xi-delta)) && (wert<=xi)){ return ((wert-(xi-delta))/delta); } //rechts: if((wert>xi) && (wert<=(xi+delta))){ return ((xi+delta-wert)/delta); } return 0; } //Liefert das Minimum (UND-Verknüpfung) aller Zugehörigkeitsfunktionen double erfuellung_pro_regel(int regel, double *zustand){ int i; double min=1, temp; for(i=0; i= 1) { printf("Das Ziel wurde in %d erreicht.\n", z); system("PAUSE"); return 0; } z++; u=fuzzy_steuerung(s); step(s, u, ss); printf("s=%.2f %.2f %.2f %.2f >> u=%.2f >> ss=%.2f %.2f %.2f %.2f \n", s[0], s[1], s[2], s[3], u, ss[0], ss[1], ss[2], ss[3]); t += 0.2; fprintf(stream, "%.2f %.2f %.2f %.2f %.2f %.1f\n", s[0], s[1], s[2], s[3], u, t); // Neuer Zustand --> Alter Zustand for (j=0;j