// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.extensions.reports.zagreb; import graphtea.extensions.Utils; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.RenderTable; import graphtea.graph.graph.Vertex; import graphtea.platform.lang.CommandAttitude; import graphtea.plugins.main.core.AlgorithmUtils; import graphtea.plugins.reports.extension.GraphReportExtension; import java.util.ArrayList; import java.util.Collections; import java.util.Vector; /** * @author Ali Rostami */ @CommandAttitude(name = "m3finalconj", abbreviation = "_m3conj") public class EM1Lower implements GraphReportExtension{ public String getName() { return "EM1 Low"; } public String getDescription() { return "EM1 Low"; } public Object calculate(GraphModel g) { ZagrebIndexFunctions zif = new ZagrebIndexFunctions(g); ZagrebIndexFunctions zifL = new ZagrebIndexFunctions( Utils.createLineGraph(g) ); RenderTable ret = new RenderTable(); Vector<String> titles = new Vector<>(); titles.add(" M^3_1(G) "); // titles.add("Z1"); // titles.add("Z2"); // titles.add("Z3"); // titles.add("Z4"); // titles.add("Ep3"); // titles.add("Ep4"); // titles.add("Psi1"); // titles.add("Psi2"); titles.add("Best"); titles.add("SD"); titles.add("M2"); titles.add("SD"); titles.add("New"); titles.add("SD"); titles.add("nM1"); titles.add("SD"); titles.add("nM"); titles.add("SD"); titles.add("ID1"); titles.add("SD"); titles.add("ID"); titles.add("SD"); titles.add("Milo"); titles.add("SD"); titles.add("IED1"); titles.add("SD"); titles.add("IED"); titles.add("SD"); titles.add("H1"); titles.add("SD"); titles.add("H"); titles.add("SD"); titles.add("Fort"); titles.add("SD"); titles.add("illc"); titles.add("SD"); ret.setTitles(titles); double maxDeg = 0; double maxDeg2 = 0; double minDeg = Integer.MAX_VALUE; ArrayList<Integer> al = AlgorithmUtils.getDegreesList(g); Collections.sort(al); maxDeg = al.get(al.size()-1); if(al.size()-2>=0) maxDeg2 = al.get(al.size()-2); else maxDeg2 = maxDeg; minDeg = al.get(0); if(maxDeg2 == 0) maxDeg2=maxDeg; double a=0; double b=0; for(Vertex v : g) { if(g.getDegree(v)==maxDeg) a++; if(g.getDegree(v)==minDeg) b++; } if(maxDeg==minDeg) b=0; double m = g.getEdgesCount(); double n = g.getVerticesCount(); double M12=zif.getSecondZagreb(1); double M21=zif.getFirstZagreb(1); double M31=zif.getFirstZagreb(2); double M41=zif.getFirstZagreb(3); double M22=zif.getSecondZagreb(2); double Mm31=zif.getFirstZagreb(-4); double Mm11=zif.getFirstZagreb(-2); double EM1=zifL.getFirstZagreb(1); double H=zif.getHarmonicIndex(); double IED=zif.getEdgeDegree(-1); double Ilic=(M31 - 4 * ((2*m)*(maxDeg + minDeg) - (n * maxDeg * minDeg) - ( n - a - b ) * (maxDeg - minDeg - 1)) + (2 * M12) + (4 * m)); double Best=(M31 - 4 * ((a*maxDeg*maxDeg) + (b*minDeg*minDeg) - (((maxDeg*minDeg) + (2*maxDeg) -1) * (n - a -b)) + ((maxDeg + minDeg + 1)*((2*m) - (a * maxDeg) - (b * minDeg))) + ((Mm11 - (a/maxDeg) - (b/minDeg)) * ((maxDeg * minDeg) - minDeg + maxDeg -1))) + (2 * M12) + (4 * m)); double mynew=( (Math.pow(M21 - (2 *m), 2) / ((2*m) - n) ) + (2 * M12) - (3 * M21) + (4 * m)); double nM1=( (Math.pow(M21-(2*m),2) / ((2 * m) - n)) + (2 * M12) - (3 * M21) + (4 * m)); double nM=(((M21*M21) / (2 * m) ) + (1/(2*m))*( (n * M21) -(4 * m * m)) + (2 * M12) - (4 * M21) + (4 * m)); double ID1=( (Math.pow(M21-n,2) / ((2 * m) - Mm11)) + (2 * M12) - (4 * M21) + (6 * m)); double ID2=(((M21*M21) / (2 * m) ) + (1/(2*m))*( (2 * m * Mm11) -(n * n)) + (2 * M12) - (4 * M21) + (4 * m)); double Milo=(((M21*M21) / (2 * m) ) + (4 * m) + (2 * M12) - (4 * M21)); double IED1=((Math.pow(M21 - (3 * m), 2 )) / ((m - IED)) + M21 - (2 * m)); double IED2=(((M21*M21) / (m) ) + (((M21 - (2 * m))*IED) / (m)) + (3 * m) - (4 * M21)); double H1=(((2*Math.pow(M21 - m, 2 )) / ((2 * m) - H)) - (3 * M21) + (4 * m) ); double H2=(((M21*M21) / (m) ) + ((H*M21) / (2 * m)) + (3 * m) - (4 * M21)); double Fort=(((M21*M21) / ( m) ) + (4 * m) - (4 * M21)); double Il=(((2 * m / n) * M21) + (4 * m) + (2 * M12) - (4 * M21)); Vector<Object> v = new Vector<>(); v.add(EM1); // Best v.add(Best); v.add(Math.pow(EM1-Best,2)); // Ilic v.add(Ilic); v.add(Math.pow(EM1-Ilic,2)); // mynew v.add(mynew); v.add(Math.pow(EM1-mynew,2)); // nM1 v.add(nM1); v.add(Math.pow(EM1-nM1,2)); //nM v.add(nM); v.add(Math.pow(EM1-nM,2)); //ID1 v.add(ID1); v.add(Math.pow(EM1-ID1,2)); //ID2 v.add(ID2); v.add(Math.pow(EM1-ID2,2)); //Milo v.add(Milo); v.add(Math.pow(EM1-Milo,2)); //IED1 v.add(IED1); v.add(Math.pow(EM1-IED1,2)); //IED v.add(IED2); v.add(Math.pow(EM1-IED2,2)); //H1 v.add(H1); v.add(Math.pow(EM1-H1,2)); //H v.add(H2); v.add(Math.pow(EM1-H2,2)); //Fort v.add(Fort); v.add(Math.pow(EM1-Fort,2)); //illc v.add(Il); v.add(Math.pow(EM1-Il,2)); //new3 // v.add((maxDeg * maxDeg * maxDeg) + (maxDeg2 * maxDeg2 * maxDeg2) + (Zeta3) - (4 * M21) + (2 * M12) + (4 * m)); //new4 // v.add((maxDeg * maxDeg * maxDeg) + (minDeg * minDeg * minDeg) + (Zeta4) - (4 * M21) + (2 * M12) + (4 * m)); //new1 // v.add((maxDeg * maxDeg * maxDeg) + (maxDeg2 * maxDeg2 * maxDeg2) + (Zeta1) - (4 * M21) + (2 * M12) + (4 * m)); //new2 // v.add((maxDeg * maxDeg * maxDeg) + (minDeg * minDeg * minDeg) + (Zeta2) - (4 * M21) + (2 * M12) + (4 * m)); //Eps3 // v.add((maxDeg * maxDeg * maxDeg) + (maxDeg2 * maxDeg2 * maxDeg2) + (Eps3) - (4 * M21) + (2 * M12) + (4 * m)); //Eps4 // v.add((maxDeg * maxDeg * maxDeg) + (minDeg * minDeg * minDeg) + (Eps4) - (4 * M21) + (2 * M12) + (4 * m)); //Psi1 // v.add(M31 - (4 * M21) + (2 * maxDeg * maxDeg) + (2 * maxDeg2 * maxDeg2) + (2 * Psi1) + 2 * (M12 - M21 + m) + 2 * m); //Psi2 // v.add(M31 - (4 * M21) + (2 * maxDeg * maxDeg) + (2 * minDeg * minDeg) + (2 * Psi2) + 2 * (M12 - M21 + m) + 2 * m); ret.add(v); return ret; } @Override public String getCategory() { return "Topological Indices-Conjectures"; } }