рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВ:
рдлрдЬреА рдмрдЪрд╛рд╡ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдмрд╣реБ-рдорд╛рдкрджрдВрдб рд╡рд┐рдХрд▓реНрдкред рднрд╛рдЧ 1/3: рд╕рд┐рджреНрдзрд╛рдВрддрдПрдХ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рдПрдХ рдирд┐рдпрдо (рдирд┐рдпрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЧрдд рдлрд╝рдЬрд╝реА рд▓реЙрдЬрд┐рдХрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛) рдФрд░ рдХреБрдЫ рдФрдкрдЪрд╛рд░рд┐рдХ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ (рд╢реБрд░реВ рдореЗрдВ рджреЛ рддрддреНрд╡реЛрдВ рдХреЗ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдо рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ (рджреЛрд╣рд░реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ) рдХреЛ рдХреМрд╢рд▓ рдЖрд╡рд░рдг рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдирд┐рдпрдо рдлрд╕реЗрдб рдХреНрд▓рд╛рд╕ рдХреЛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирд╕реЗ рдлрдЬреА рд╕рдмреНрд╕реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдЯреАрдХрддрд╛ (рд╕реНрдЯреИрдЯрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдмрд╕реЗрдЯ рд╕рд┐рд╕реНрдЯрдо (рдХреИрд▓реНрдХрдбреА рд╡рд┐рдзрд┐) рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЗрдХрд╛рдИ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрдЬреА рдЙрдкрд╕рдореБрдЪреНрдЪрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди (рдХреИрд▓реНрд╕реАрд╕реА рд╡рд┐рдзрд┐) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕реНрддрд░ рд╕реЗрдЯ рдХреЗ рдбреЗрдЯрд╛ рдХреА рдХрд╛рд░реНрдбрд┐рдиреИрд▓рд┐рдЯреА рдФрд░ рдЙрдирдХреЗ рдмрд┐рдВрджреБ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ (рдХреИрд▓реНрд╕реАрдПрд╕ рд╡рд┐рдзрд┐); рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ, рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЫрдВрдЯрд╛рдИ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреНрдпреВрдо рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдЕрдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрдбрд╝рд╛ рдореВрд▓реНрдп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк (рдЧреЗрдЯрдмреЛрди рд╡рд┐рдзрд┐) рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
1. рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐редрдореИрдЯреНрд░рд┐рдХреНрд╕ рдбреА рдХреЗ рдЖрдпрд╛рдо, рдЬреЛ рдЧрдгрдирд╛ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
package Variables; public class Variables { private static int SIZE_OF_D = 11; private static double STEP_OF_D = (double)1/(SIZE_OF_D-1); public static int SIZE_OF_D(); public static double STEP_OF_D(); }
рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрдЧ рдЬреЛ рдореБрд╢реНрдХрд┐рд▓ рдЫрдБрдЯрд╛рдИ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ:
package Support; public class Num { public double x; public double u; public Num(double x, double u);
рдХрд╛рд░реНрдп - рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ, рдмрд╕ рдПрдХ рд╡рд┐рдзрд┐ рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдпреБрдХреНрдд рдЗрдВрдЯрд░рдлреЗрд╕ред
package Support; public abstract class Function { public String ID; public abstract double getY(double x); }
рдХреМрд╢рд▓ рд╡рд░реНрдЧ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ:
package Support; public class Skill { public double[] skill; public Skill(double[] skill); }
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
package Support; public class Matrix { private double matrix[][]; public int ROWS; public int COLUMNS; public Matrix(int rows, int columns);
рдирд┐рдпрдо - рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг:
package Support; public class Rule{ public Skill[] u; private Function function; public double[] m; public Rule(Skill[] u, Function function) throws Exception{ this.u = u; this.function = function; m = findMin(u); } public double[] findMin(Skill[] arr) throws Exception { int size=arr[0].skill.length; for (int i=0;i<arr.length;i++) if (arr[i].skill.length != size) throw new Exception("Incorrect skill"); double[] min = new double[size]; for (int i=0;i<min.length;i++) min[i] = Integer.MAX_VALUE; for (int i=0;i<arr.length;i++) for (int j=0;j<size;j++) if (arr[i].skill[j]< min[j]) min[j] = arr[i].skill[j]; return min; } public double getF(double x){ return function.getY(x); } }
рд╕рдмрд╕реЗрдЯрдб - рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдореЗрдЯреНрд░рд┐рд╕ рдбреА (i) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
package Support; import Variables.Variables; public class SubsetD { private final boolean DEBUG = false; public double[][] d_arr; public SubsetD(Rule rule) throws Exception{ d_arr = makeD(rule); } public double[][] makeD(Rule rule) throws Exception{ d_arr = new double[rule.m.length][Variables.SIZE_OF_D()]; for (int i=0;i<rule.m.length;i++) for (int j=0;j<Variables.SIZE_OF_D();j++){ d_arr[i][j]=findMin(1-rule.m[i]+rule.getF(j*Variables.STEP_OF_D())); if (DEBUG) System.out.print("m["+i+"]="+rule.m[i]+"\tj*Variables.STEP_OF_D()="+j*Variables.STEP_OF_D()+"\tY="+rule.getF(j*Variables.STEP_OF_D())+"\n"); } return d_arr; } private double findMin(double x){ if (x>1) return 1; return x; } }
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдореБрдЦреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрдирдкреБрдЯ рд╣реИ:
package Support; public abstract class Input { protected Rule[] rl = null; protected Function[] func = null; public int PARAMS_CNT = -1; public int FUNC_CNT = -1; public abstract Rule[] makeRules(double[][] arr) throws Exception;
2. рдореБрдЦреМрдЯрд╛рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдореБрдХреБрдЯ рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
package FLO_Engine; import Variables.Variables; import Support.Matrix; import Support.Rule; import Support.SubsetD; import Support.Num; public class Facade { boolean DEBUG_D = false; boolean DEBUG_C = false; boolean DEBUG_LM = false; Facade(boolean debug_d, boolean debug_c, boolean debug_lm){} public Matrix calcD(Rule[] rules) throws Exception{
рдкреВрд░реНрд╡рдЧрд╛рдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рддреАрд╕рд░реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдФрд░ рд▓реЗрдЦрдХ рдХреА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдЧреБрдИ рдФрд░ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦрд╛, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдирд┐рдпрдореЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕реАрд╡реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ рдХреЛ рднреА рдЕрд▓рдЧ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ) - рдпрд╣ рдСрдлрдЯреЙрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рддреАрд╕рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд╛рдкреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред рдХреЗ рд╕реВрддреНрд░ рд╢рд╛рдорд┐рд▓
рдлрдЬреА рдмрдЪрд╛рд╡ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдмрд╣реБ-рдорд╛рдкрджрдВрдб рд╡рд┐рдХрд▓реНрдкред рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рднрд╛рдЧ 3/3: рдЙрджрд╛рд╣рд░рдг