рдлрдЬреА рдмрдЪрд╛рд╡ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдмрд╣реБ-рдорд╛рдкрджрдВрдб рдкрд╕рдВрджред рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рднрд╛рдЧ 2/3: рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо

рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВ:
рдлрдЬреА рдмрдЪрд╛рд╡ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдмрд╣реБ-рдорд╛рдкрджрдВрдб рд╡рд┐рдХрд▓реНрдкред рднрд╛рдЧ 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();/*  SIZE_OF_D*/ public static double STEP_OF_D();/*  STEP_OF_D*/ } 


рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрдЧ рдЬреЛ рдореБрд╢реНрдХрд┐рд▓ рдЫрдБрдЯрд╛рдИ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ:

 package Support; public class Num { public double x; public double u; public Num(double x, double u); //  x  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);/*  skill  */ } 

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 package Support; public class Matrix { private double matrix[][]; public int ROWS; public int COLUMNS; public Matrix(int rows, int columns); //    public Matrix(double[][] m); //    public double[][] getMatrix(); //      public static Matrix findMin(Matrix[] Arr) throws Exception()/*      ,     тАФ  */ { int rows = Arr[0].getMatrix().length; int cols = Arr[0].getMatrix()[0].length; for (int i=0;i<Arr.length;i++) if ((Arr[i].getMatrix().length != rows) || (Arr[i].getMatrix()[0].length != cols)) throw new Exception("Incorrect size of matrix"); double[][] min = new double[rows][cols]; for (int i=0;i<rows;i++) for (int j=0;j<cols;j++) min[i][j]=Double.MAX_VALUE; for (int i=0;i<rows;i++) for (int j=0;j<cols;j++) for (int k=0;k<Arr.length;k++) if (Arr[k].getMatrix()[i][j]<min[i][j]) min[i][j]=Arr[k].getMatrix()[i][j]; return new Matrix(min); } public double[] getRow(int row); //    public void output(); //     } 


рдирд┐рдпрдо - рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг:

 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,       тАФ      findMin*/ 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; //   public abstract void initFunc(Function[] func); //   public Function[] getFunctions(); //    } 


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{ /*      */ //page 97 Rule[] M = rules; //page 98 SubsetD[] sD = new SubsetD[M.length]; for (int i=0;i<M.length;i++) sD[i] = new SubsetD(M[i]); Matrix[] matr = new Matrix[sD.length]; for (int i=0;i<sD.length;i++){ matr[i]=new Matrix(sD[i].d_arr); if (DEBUG_D) ; /*  D(i)*/ } Matrix min = Matrix.findMin(matr); /*   D*/ if (DEBUG_D) min.output(); return min; } public double[] calcC(Matrix D){ /*   */ int len = D.COLUMNS; double[] c = new double[D.ROWS]; /*   ,    */ double[] x = getX(); /*  X    */ for (int i=0;i<D.ROWS;i++){ double[] u = D.getRow(i); Num[] arr = new Num[len]; for (int j=0;j<len;j++) arr[j]= new Num(x[j],u[j]); for (int j=0;j<len;j++) /*     ,  i-   ,             тАФ         */ for (int k=j;k<len;k++) if (arr[k].u<arr[j].u){ Num temp = arr[k]; arr[k] = arr[j]; arr[j] = temp; } c[i] = calcS(arr); /*     i- */ } return c; } public int getBest(double[] C){} //     private double[] getX(){ /*  X      D*/ double[] temp = new double[Variables.SIZE_OF_D()]; for (int i=0;i<temp.length;i++) temp[i]=Variables.STEP_OF_D()*i; return temp; } private double calcS(num[] arr){ /*      */ int size = arr.length; double[] x = new double[size]; double[] u = new double[size]; for (int i=0;i<size;i++){ /*              */ x[i]=arr[i].x; u[i]=arr[i].u; } double max = findMax(u); /*          */ double s = 0.0; double[] m = new double[size]; double[] lbd = new double[size]; for (int i=0;i<size;i++){ /*     */ if (i==0){ lbd[i]=u[0]; m[i]=calcM(x,0); } else{ lbd[i] = u[i]-u[i-1]; m[i] = calcM(x,i); } } for (int i=0;i<size;i++) /*      */ s+=(double)lbd[i]*m[i]; return (double)s/max; //   } private double findMax(double[] arr){} /*   */ private double calcM(double[] x, int first){ /*   */ double s = 0.0; for (int i=first;i<x.length;i++) s+=x[i]; return (double)s/(x.length-first); } } 


рдкреВрд░реНрд╡рдЧрд╛рдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рддреАрд╕рд░реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдФрд░ рд▓реЗрдЦрдХ рдХреА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдЧреБрдИ рдФрд░ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦрд╛, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдирд┐рдпрдореЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕реАрд╡реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ рдХреЛ рднреА рдЕрд▓рдЧ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ) - рдпрд╣ рдСрдлрдЯреЙрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рддреАрд╕рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд╛рдкреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред рдХреЗ рд╕реВрддреНрд░ рд╢рд╛рдорд┐рд▓

рдлрдЬреА рдмрдЪрд╛рд╡ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдмрд╣реБ-рдорд╛рдкрджрдВрдб рд╡рд┐рдХрд▓реНрдкред рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рднрд╛рдЧ 3/3: рдЙрджрд╛рд╣рд░рдг

Source: https://habr.com/ru/post/In136186/


All Articles