Translate

Tuesday, August 9, 2016

Source code Fuzzy C Means Clustering



Source code Fuzzy C Means Clustering

FuzzyCMeansFrame.java
/*
 * FuzzyCMeanFrame.java
 *
 * Created on January 18, 2006, 10:29 PM
 */

package fuzzycmeans;
import com.birosoft.liquid.LiquidLookAndFeel;
import java.sql.SQLException;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
 *
 *
 */
public class FuzzyCMeanFrame extends javax.swing.JFrame {
   
    int data[] = null;
    FuzzyCMeansEngine fcm = null;
    boolean finish = false;
  //  private PersentaseFrame pf;
    private MbfFrame mf;
    private markerFrame mr;
    private hariFrame hr;
    private chartFrame cf;
    double[] datadb = null;
   
    public FuzzyCMeanFrame() {
        initComponents();
       
       
//        while(!fcm.compute());
//
//        double [] ctr = fcm.getClusterCentroid();
//        panelGrafik2D1.setClusterCentroid(ctr);
//        panelGrafik2D1.setmbrFunc(fcm.getMembershipFunction());
//
//        for(int i=0;i<ctr.length;i++)
//            System.out.println(ctr[i]);
    }
   
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jButtonGenerate = new javax.swing.JButton();
        jTextFieldPrecision = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jTextFieldJmlCluster = new javax.swing.JTextField();
        jTextFieldFuzziness = new javax.swing.JTextField();
        jButtonStep = new javax.swing.JButton();
        jButtonRun = new javax.swing.JButton();
        jLabelStep = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jcbIndex = new javax.swing.JComboBox();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jPanel3 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        rbMbf = new javax.swing.JRadioButton();
        rbIhsg = new javax.swing.JRadioButton();
        rbMarker = new javax.swing.JRadioButton();
        rbHari = new javax.swing.JRadioButton();
        jPanel4 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable2 = new javax.swing.JTable();
        jPanel5 = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTable3 = new javax.swing.JTable();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Fuzzy C-Means Program");
        setResizable(false);
        jPanel1.setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input Parameter", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times New Roman", 0, 12)));
        jPanel1.setForeground(new java.awt.Color(255, 0, 0));
        jPanel1.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jLabel2.setText("Batas Ketelitian");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(180, 60, 90, 20);

        jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jLabel3.setText("Fuzziness (m)");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(10, 90, 80, 20);

        jButtonGenerate.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jButtonGenerate.setText("Generate");
        jButtonGenerate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonGenerateActionPerformed(evt);
            }
        });

        jPanel1.add(jButtonGenerate);
        jButtonGenerate.setBounds(10, 120, 110, 23);

        jTextFieldPrecision.setText("0.03");
        jPanel1.add(jTextFieldPrecision);
        jTextFieldPrecision.setBounds(290, 60, 50, 20);

        jLabel4.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jLabel4.setText("Jumlah Cluster");
        jPanel1.add(jLabel4);
        jLabel4.setBounds(10, 60, 80, 20);

        jTextFieldJmlCluster.setText("6");
        jPanel1.add(jTextFieldJmlCluster);
        jTextFieldJmlCluster.setBounds(100, 60, 50, 20);

        jTextFieldFuzziness.setText("2");
        jPanel1.add(jTextFieldFuzziness);
        jTextFieldFuzziness.setBounds(100, 90, 50, 20);

        jButtonStep.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jButtonStep.setText("Step By Step");
        jButtonStep.setEnabled(false);
        jButtonStep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonStepActionPerformed(evt);
            }
        });

        jPanel1.add(jButtonStep);
        jButtonStep.setBounds(130, 120, 110, 23);

        jButtonRun.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jButtonRun.setText("Run");
        jButtonRun.setEnabled(false);
        jButtonRun.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonRunActionPerformed(evt);
            }
        });

        jPanel1.add(jButtonRun);
        jButtonRun.setBounds(10, 150, 110, 23);

        jLabelStep.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jLabelStep.setText("Step :");
        jPanel1.add(jLabelStep);
        jLabelStep.setBounds(250, 120, 110, 20);

        jLabel1.setText("Nama Index");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(10, 20, 80, 20);

        jcbIndex.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jcbIndex.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Composite Index", "Miscellanous Industry ", "Infrastructure", "Jakarta Islamic Index", "Agriculture ", "Consumer Goods ", "Main Board Index ", "Manufacture ", "Basic Industry", "Finance ", "Trade & Service ", "Property", "LQ45 ", "Mining ", "Development Board Index" }));
        jPanel1.add(jcbIndex);
        jcbIndex.setBounds(100, 20, 240, 22);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(10, 80, 370, 190);

        jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 14));
        jLabel5.setForeground(new java.awt.Color(204, 0, 0));
        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel5.setText("Fuzzy C - Means Clustering ");
        getContentPane().add(jLabel5);
        jLabel5.setBounds(220, 10, 300, 20);

        jLabel6.setFont(new java.awt.Font("Times New Roman", 1, 14));
        jLabel6.setForeground(new java.awt.Color(204, 0, 0));
        jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel6.setText("Indek Harga Saham Gabungan Bursa Efek Jakarta 2005");
        getContentPane().add(jLabel6);
        jLabel6.setBounds(160, 40, 440, 20);

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Fuzzy C Means :: Clustered IHSG Data", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times New Roman", 0, 12)));
        jPanel2.setForeground(new java.awt.Color(255, 0, 0));
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTable1);

        org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel2Layout.createSequentialGroup()
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
                .addContainerGap())
        );
        getContentPane().add(jPanel2);
        jPanel2.setBounds(390, 280, 320, 330);

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Grafik dan Data", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times New Roman", 0, 12)));
        jPanel3.setForeground(new java.awt.Color(255, 0, 0));
        jPanel3.setFont(new java.awt.Font("Times New Roman", 0, 12));
        jButton1.setText("Open");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        rbMbf.setText("Derajat Keanggotaan");
        rbMbf.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
        rbMbf.setMargin(new java.awt.Insets(0, 0, 0, 0));

        rbIhsg.setText("Grafik IHSG");
        rbIhsg.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
        rbIhsg.setMargin(new java.awt.Insets(0, 0, 0, 0));

        rbMarker.setText("Data Tercluster");
        rbMarker.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
        rbMarker.setMargin(new java.awt.Insets(0, 0, 0, 0));

        rbHari.setText("Detail Data Tersortir");
        rbHari.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
        rbHari.setMargin(new java.awt.Insets(0, 0, 0, 0));

        org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jPanel3Layout.createSequentialGroup()
                        .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 192, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .add(jPanel3Layout.createSequentialGroup()
                        .add(rbMbf, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 155, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(143, Short.MAX_VALUE))
                    .add(jPanel3Layout.createSequentialGroup()
                        .add(rbIhsg, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE)
                        .add(168, 168, 168))
                    .add(jPanel3Layout.createSequentialGroup()
                        .add(rbMarker)
                        .addContainerGap(207, Short.MAX_VALUE))
                    .add(jPanel3Layout.createSequentialGroup()
                        .add(rbHari, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
                        .addContainerGap())))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .add(rbIhsg)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(rbMbf)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(rbMarker)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(rbHari)
                .add(41, 41, 41)
                .add(jButton1)
                .addContainerGap())
        );
        getContentPane().add(jPanel3);
        jPanel3.setBounds(390, 80, 320, 190);

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "FCM :: Cluster Centroid", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times New Roman", 0, 12)));
        jPanel4.setForeground(new java.awt.Color(255, 0, 0));
        jTable2.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(jTable2);

        org.jdesktop.layout.GroupLayout jPanel4Layout = new org.jdesktop.layout.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel4Layout.createSequentialGroup()
                .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
                .addContainerGap())
        );
        getContentPane().add(jPanel4);
        jPanel4.setBounds(200, 280, 180, 330);

        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "FCM : u0 - u1", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times New Roman", 0, 12)));
        jPanel5.setForeground(new java.awt.Color(255, 0, 0));
        jTable3.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane3.setViewportView(jTable3);

        org.jdesktop.layout.GroupLayout jPanel5Layout = new org.jdesktop.layout.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel5Layout.createSequentialGroup()
                .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
                .addContainerGap())
        );
        getContentPane().add(jPanel5);
        jPanel5.setBounds(10, 280, 190, 330);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-733)/2, (screenSize.height-656)/2, 733, 656);
    }// </editor-fold>//GEN-END:initComponents
    //menerima pilihan sesuai radiobutton yang di klik pengguna
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        if(rbMbf.isSelected()){
            mf.setVisible(true);
        }
        if(rbIhsg.isSelected()){ 
            cf.setVisible(true);
        }
        if(rbMarker.isSelected()){
            mr.setVisible(true);
        }
        if(rbHari.isSelected()){
            hr.setVisible(true);
        }
       
// TODO add your handling code here:
    }//GEN-LAST:event_jButton1ActionPerformed
    //melakukan klasterisasi
    private void jButtonRunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRunActionPerformed
       
        //melakukan komputasi untuk mencari centroid dan updating membership masing-masing data IHSG
        while(!finish)
            finish = fcm.compute();
       
        //menulis jumlah langkah terakhir komputasi dari pengklasteran IHSG
        jLabelStep.setText("Step : " + fcm.getStep() + " Finished");
       
        //Menuliskan centroid masing-masing cluster pada table
        String jdlCentroid[]=new String[]{" Cluster "," Centroid "};
        double[] centroid=fcm.getClusterCentroid();
        Object[][] centroidTable=new Object[fcm.getClusterCentroid().length][2];
       
        for(int h=0;h<centroidTable.length;h++){
            centroidTable[h][0]=h;
            centroidTable[h][1]=centroid[h];
        }
        DefaultTableModel modelCentroid=new DefaultTableModel(centroidTable,jdlCentroid);
        jTable2.setModel(modelCentroid);
       
        ConnectDbFix cf=new ConnectDbFix();
       
        //Menuliskan data tercluster  pada table
        String jdlhasil[] = new String[]{"No", "Cluster","Data","Membership","Tanggal","Hari"};
       
        try {
            Object[][] x = fcm.getDataCluster5(cf.getDatatanggal(),cf.getDataHari());
            Object[][] y = new Object[fcm.getData().length][6];

            int h=1;
            for(int m=0; m<238; m++) {
               
                y[m][0] = h;
                y[m][1] = x[m][0];
                y[m][2] = x[m][1];
                y[m][3]= x[m][2];
                y[m][4]= x[m][3];
                y[m][5]= x[m][4];
                h++;

            }
           
            DefaultTableModel modelnya = new DefaultTableModel(y,jdlhasil);
            jTable1.setModel(modelnya);
           
            mr=new markerFrame(String.valueOf(jcbIndex.getSelectedItem()),y,centroid);
            hr=new hariFrame(String.valueOf(jcbIndex.getSelectedItem()),y,Integer.parseInt(jTextFieldJmlCluster.getText()));

           //af=new akurasiFrame(datadb,Integer.parseInt(jTextFieldJmlCluster.getText()),Integer.parseInt(jTextFieldFuzziness.getText()), Double.parseDouble(jTextFieldPrecision.getText()),fcm.getDataCluster2());
         
         
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
       
  
      
        mf=new MbfFrame((String)(jcbIndex.getSelectedItem()),fcm.getMembershipFunction(),fcm.getData(),(double)Integer.parseInt(jTextFieldJmlCluster.getText()));
    }//GEN-LAST:event_jButtonRunActionPerformed
    //melakukan klasterisasi secara perlangkah
    private void jButtonStepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonStepActionPerformed
        //melakukan komputasi langkah per langkah
        if(!finish) {
            finish = fcm.compute();
            jLabelStep.setText("Step : " + fcm.getStep());
           
            //melakukan penulisan centroid pada table
            String jdlCentroid[]=new String[]{" Cluster "," Centroid "};
            double[] centroid=fcm.getClusterCentroid();
            Object[][] centroidTable=new Object[fcm.getClusterCentroid().length][2];
           
            for(int h=0;h<centroidTable.length;h++){
                centroidTable[h][0]=h;
                centroidTable[h][1]=centroid[h];
            }
            DefaultTableModel modelCentroid=new DefaultTableModel(centroidTable,jdlCentroid);
            jTable2.setModel(modelCentroid);
           
            //Menuliskan data tercluster  pada table
            String jdlhasil[] = new String[]{"No", "Cluster","Data","Membership","Tanggal","Hari"};
            ConnectDbFix cf=new ConnectDbFix();
            try {
                Object[][] x = fcm.getDataCluster5(cf.getDatatanggal(),cf.getDataHari());
                Object[][] y = new Object[fcm.getData().length][6];
                int h=1;
                for(int m=0; m<238; m++) {
                   
                    y[m][0] = h;
                    y[m][1] = x[m][0];
                    y[m][2] = x[m][1];
                    y[m][3]= x[m][2];
                    y[m][4]= x[m][3];
                    y[m][5]= x[m][4];
                    h++;
                }
               
                DefaultTableModel modelnya = new DefaultTableModel(y,jdlhasil);
                jTable1.setModel(modelnya);
                
                mr=new markerFrame(String.valueOf(jcbIndex.getSelectedItem()),y,centroid);
               
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           
            mf=new MbfFrame((String)(jcbIndex.getSelectedItem()),fcm.getMembershipFunction(),fcm.getData(),(double)Integer.parseInt(jTextFieldJmlCluster.getText()));
       
        } else
            jLabelStep.setText("Step : " + fcm.getStep() + " Finished" );
    }//GEN-LAST:event_jButtonStepActionPerformed
    //melakukan generate dari data input dari pengguna
    private void jButtonGenerateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonGenerateActionPerformed
        ConnectDbFix con=new ConnectDbFix();
        cf=new chartFrame((String)(jcbIndex.getSelectedItem()));       
        if(String.valueOf(jcbIndex.getSelectedItem())=="Composite Index")
            datadb=con.getDataComposite();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Miscellanous Industry ")
            datadb=con.getDataMiscell();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Mining ")
            datadb=con.getDataMining();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Infrastructure")
            datadb=con.getDataInfra();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Jakarta Islamic Index")
            datadb=con.getDataIslam();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Agriculture ")
            datadb=con.getDataAgri();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Consumer Goods ")
            datadb=con.getDataConsumer();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Main Board Index ")
            datadb=con.getDataMain();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Manufacture ")
            datadb=con.getDataManuf();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Basic Industry")
            datadb=con.getDataBasic();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Finance ")
            datadb=con.getDataFinance();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Trade & Service ")
            datadb=con.getDataTrade();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Property")
            datadb=con.getDataProperty();
        if(String.valueOf(jcbIndex.getSelectedItem())=="LQ45 ")
            datadb=con.getDataLQ();
        if(String.valueOf(jcbIndex.getSelectedItem())=="Development Board Index")
            datadb=con.getDataDevelop();
       
        // Persyaratan Inputan
        if(Integer.parseInt(jTextFieldJmlCluster.getText())<2){
            JOptionPane.showMessageDialog(null, " Cluster Number < 2 ", " Cluster Number ", JOptionPane.ERROR_MESSAGE
                    );
        } else if((Double.parseDouble(jTextFieldPrecision.getText())<=0)&&(Double.parseDouble(jTextFieldPrecision.getText())>=1))
            JOptionPane.showMessageDialog(null, " 0 < e < 1 ", " Terminal Criterion ", JOptionPane.ERROR_MESSAGE
                    );
        else if((Integer.parseInt(jTextFieldFuzziness.getText()))<=1){
            JOptionPane.showMessageDialog(null, " 1 <= m < Unlimited ", " Fuzziness ", JOptionPane.ERROR_MESSAGE
                    );
        } else{
            fcm = new FuzzyCMeansEngine(datadb, Integer.parseInt(jTextFieldJmlCluster.getText()),
                 Integer.parseInt(jTextFieldFuzziness.getText()), Double.parseDouble(jTextFieldPrecision.getText())
            );
            finish = false;
        }

       
        //Menuliskan nilai U0 dan U1 pada table
        String[] jdlU=new String[]{"no","u0"," u1"};
        double[][] isiU0=fcm.getDataU0();
        double[][] isiU1=fcm.getDataU1();
        Object[][] u0Table=new Object[fcm.getDataU0().length][3];
       
        for(int e=0;e<u0Table.length;e++){
            for(int j=0;j<u0Table[e].length;j++){
                u0Table[e][0]=e+j+1-2;
                u0Table[e][1]=isiU0[e][j];
                u0Table[e][2]=isiU1[e][j];
            }
        }
       
        DefaultTableModel modelU=new DefaultTableModel(u0Table,jdlU);
        jTable3.setModel(modelU);
        jButtonStep.setEnabled(true);
        jButtonRun.setEnabled(true);
       
    }//GEN-LAST:event_jButtonGenerateActionPerformed
   
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try{
                    LiquidLookAndFeel ll =new LiquidLookAndFeel();
                    //ll.setPanelTransparency(false);
                    javax.swing.UIManager.setLookAndFeel(ll);
                } catch(Exception e){
                    e.printStackTrace();
                }
                new FuzzyCMeanFrame().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButtonGenerate;
    private javax.swing.JButton jButtonRun;
    private javax.swing.JButton jButtonStep;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabelStep;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTable jTable1;
    private javax.swing.JTable jTable2;
    private javax.swing.JTable jTable3;
    private javax.swing.JTextField jTextFieldFuzziness;
    private javax.swing.JTextField jTextFieldJmlCluster;
    private javax.swing.JTextField jTextFieldPrecision;
    private javax.swing.JComboBox jcbIndex;
    private javax.swing.JRadioButton rbHari;
    private javax.swing.JRadioButton rbIhsg;
    private javax.swing.JRadioButton rbMarker;
    private javax.swing.JRadioButton rbMbf;
    // End of variables declaration//GEN-END:variables
   
   
    //   Double hasil[][] = new Double[300][10];
    //  private InputTable modelhasil = new InputTable(hasil);
}



FuzzyCMeansEngine.java
/*
 * FuzzyCMeansEngine.java
 *
 * Created on January 18, 2006, 6:30 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package fuzzycmeans;

import java.util.Random;
import oracle.jdbc.pool.OracleDataSource;
import oracle.jdbc.*;
import java.sql.*;

/**
 *
 *
 */
public class FuzzyCMeansEngine {
    private int m=2;
    private double datum[];
    private double clustercentroid[];
    private double u1[][];
    private double u0[][];
    private int datumlength=0;
    private int clustercount=0;
    private int step=0;
    private double error=0.3;
    private boolean finish=false;
    private Double[][] dataSample;
    //konstruktor
    public FuzzyCMeansEngine(double[] datum, int clustercount, int m, double error) {
        this.m = m;
        this.datum = datum;
        this.clustercount = clustercount;
        this.datumlength = datum.length;
        this.error = error;
        initialize();
    }
    private void initialize() {
        Random random = new Random();
        int i=0;
        clustercentroid = new double[clustercount];
        u0 = new double[datumlength][clustercount];
        u1 = new double[datumlength][clustercount];
      
        for(i=0;i<datumlength;i++)
            for(int j=0;j<clustercount;j++)
                u0[i][j] = u1[i][j] = random.nextDouble();
       
    } 
   //menghitung centroid
    private void computecentroid() {
        double val1=0;
        double val2=0;
        for(int i=0;i<clustercount;i++){
            val1=0;
            val2=0;
            for(int j=0;j<datumlength;j++){
                val1+=Math.pow(u0[j][i], m )*datum[j];
                val2+=Math.pow(u0[j][i], m );
            }
            clustercentroid[i]=val1/val2;
        }
    }
   //menghitung membership tiap data per cluster
    private void computemembership() {
        double val1=0;
        for(int i=0;i<datumlength;i++){
            for(int j=0;j<clustercount;j++){
                val1=0;
                for(int k=0;k<clustercount;k++) {
                    val1+=Math.pow(Math.abs(datum[i]-clustercentroid[j])/Math.abs(datum[i]-clustercentroid[k]), 2/(m-1));
                }
                u1[i][j]=1/val1;
            }
        }
    }
   //mengklaster data
    public boolean compute() {      
       if(!finish){
            step++;
            computecentroid();
            computemembership();
            checkStep();
            for(int i=0;i<datumlength;i++)
                for(int j=0;j<clustercount;j++)
                    u0[i][j] = u1[i][j];
        }
       
        return finish;
    }
   //menghitung langkah dalam pengklasteran
    private void checkStep() {
        boolean stop=true;
       
        for(int i=0;i<datumlength;i++)
            for(int j=0;j<clustercount;j++)
                if(Math.abs(u0[i][j]-u1[i][j])>=error)
                    stop=false;
        this.finish = stop;
    }
    public double[][] getMembershipFunction() {
        return u1;
    }
    //mendapatkan data centroid dari cluster
    public double[] getClusterCentroid() {
        return clustercentroid;
    }
    //mendapatkan jumlah langkah dari klasterisasi
    public int getStep() {
        return step;
    }
    //mendapatkan data asli
    public double[] getData(){
        return datum;
    }
    //mendapatkan U0
    public double[][] getDataU0(){
        return u0;
    }
    //mendapatkan U1
    public double[][] getDataU1(){
        return u1;
    }
    //mendapatkan index dari klaster yang nilai membershipnya paling maksimal
    public int[] getClusterIndex(){
        int j;
        double max;
        int index = 0;
        int hasilIndex[] = new int[datumlength];
        int i=0;
        for(i=0;i<datumlength;i++){
            max=0.0;
            for(j=0;j<clustercount;j++){
                if(max<u1[i][j]){
                    max=u1[i][j];
                    index=j;
                }               
            }
            hasilIndex[i]=index;
        }
        return hasilIndex;
    }
    //mendapatkan index data dan index dari klaster yang nilai membershipnya paling maksimal
     public Double[][] getClusterIndex2(){
        int j;
        double max;
        int index = 0;
        Double hasilIndex[][] = new Double[datumlength][2];
        int i=0;
        for(i=0;i<datumlength;i++){
            max=0.0;
            for(j=0;j<clustercount;j++){
                if(max<u1[i][j]){
                    max=u1[i][j];
                    index=j;
                  
                }               
             hasilIndex[i][1]=max;//nilai membership
            }
            hasilIndex[i][0]=(double)index; //nilai klaster
     
        }
        return hasilIndex;
    } 
     //mendapatkan klaster
    public Double[][] getDataCluster(){
        int jmldata=0;
        Double[][] hasilData=new Double[clustercount][];
        Double[] temp=new Double[datumlength];
        int[] clusterIndex=this.getClusterIndex();
          for(int i=0;i<clustercount;i++){
            jmldata=0;
            for(int j=0;j<datumlength;j++){
                if(clusterIndex[j]==i){
                    temp[jmldata++]=datum[j];
                }
            }
            hasilData[i]=new Double[jmldata];
            for(int k=0;k<jmldata;k++){
                hasilData[i][k]=temp[k];
                }
            }
    return hasilData;
    }
    //mendapatkan klaster dan data dari hasil komputasi
    public Object[][] getDataCluster2() {
        int jmldata=0;
        Object[][] hasilData=new Object[datumlength][2];
        int[] clusterIndex=this.getClusterIndex();
        for(int i=0; i<datumlength; i++) {
            hasilData[i][0] = clusterIndex[i];
            hasilData[i][1] = datum[i];
        }
        return hasilData;
    }
    //mendapatkan nilai dari klaster,data,membership paling maksimal dari hasil komputasi
    public Object[][] getDataCluster3() {
        int jmldata=0;
        Object[][] hasilData=new Object[datumlength][3];
        Double[][] clusterIndex=this.getClusterIndex2();
        for(int i=0; i<datumlength; i++) {
            hasilData[i][0] = clusterIndex[i][0];      //nilai klaster
            hasilData[i][1] = datum[i];                //datanya
            hasilData[i][2] = clusterIndex[i][1];      //nilai membership maksimal
        }
        return hasilData;
    }
   //mendapatkan nilai dari klaster,data,membership paling maksimal dan tanggal dari hasil komputasi
    public Object[][] getDataCluster4(String[] strTgl) {
        int jmldata=0;
        String[] dataTgl=strTgl;

        Object[][] hasilData2=new Object[datumlength][4];
        Double[][] clusterIndex=this.getClusterIndex2();
        for(int i=0; i<238; i++) {
            hasilData2[i][0] = clusterIndex[i][0]; //nilai klaster
            hasilData2[i][1] = datum[i];           //nilai data
            hasilData2[i][2] = clusterIndex[i][1]; //nilai membership
            hasilData2[i][3]=  dataTgl[i];         //nilai tanggal
        }
        return hasilData2;
    }
    //mendapatkan nilai dari klaster,data,membership paling maksimal, tanggal dan hari dari hasil komputasi
     public Object[][] getDataCluster5(String[] strTgl,String[] hari) {
        int jmldata=0;
        String[] dataTgl=strTgl;
        String[] dataHari=hari;
//        System.out.println("datumlengthnya : " + datumlength );
        Object[][] hasilData2=new Object[datumlength][5];
        Double[][] clusterIndex=this.getClusterIndex2();
        for(int i=0; i<238; i++) {
            hasilData2[i][0] = clusterIndex[i][0];
            hasilData2[i][1] = datum[i];
            hasilData2[i][2] = clusterIndex[i][1];
            hasilData2[i][3]=  dataTgl[i];
            hasilData2[i][4]=dataHari[i];
        }
        return hasilData2;
    }

}



hariFrame.form
<?xml version="1.0" encoding="UTF-8" ?>

<Form version="1.3" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
  <Properties>
    <Property name="defaultCloseOperation" type="int" value="2"/>
  </Properties>
  <SyntheticProperties>
    <SyntheticProperty name="formSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,44,0,0,2,-91"/>
    <SyntheticProperty name="formSizePolicy" type="int" value="0"/>
    <SyntheticProperty name="generateSize" type="boolean" value="true"/>
    <SyntheticProperty name="generateCenter" type="boolean" value="true"/>
  </SyntheticProperties>
  <AuxValues>
    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
  </AuxValues>

  <Layout>
    <DimensionLayout dim="0">
      <Group type="103" groupAlignment="0" attributes="0">
          <Group type="102" alignment="1" attributes="0">
              <EmptySpace pref="135" max="32767" attributes="0"/>
              <Component id="jLabel1" min="-2" pref="373" max="-2" attributes="0"/>
              <EmptySpace min="-2" pref="161" max="-2" attributes="0"/>
          </Group>
          <Group type="102" alignment="0" attributes="0">
              <EmptySpace min="-2" pref="23" max="-2" attributes="0"/>
              <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
              <EmptySpace pref="25" max="32767" attributes="0"/>
          </Group>
          <Group type="102" alignment="0" attributes="0">
              <EmptySpace min="-2" pref="157" max="-2" attributes="0"/>
              <Component id="jlblJudul" min="-2" pref="328" max="-2" attributes="0"/>
              <EmptySpace pref="184" max="32767" attributes="0"/>
          </Group>
      </Group>
    </DimensionLayout>
    <DimensionLayout dim="1">
      <Group type="103" groupAlignment="0" attributes="0">
          <Group type="102" alignment="0" attributes="0">
              <EmptySpace max="-2" attributes="0"/>
              <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
              <EmptySpace max="-2" attributes="0"/>
              <Component id="jlblJudul" min="-2" pref="22" max="-2" attributes="0"/>
              <EmptySpace pref="24" max="32767" attributes="0"/>
              <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
              <EmptySpace max="-2" attributes="0"/>
          </Group>
      </Group>
    </DimensionLayout>
  </Layout>
  <SubComponents>
    <Container class="javax.swing.JPanel" name="jPanel1">
      <Properties>
        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
          <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
            <EtchetBorder/>
          </Border>
        </Property>
      </Properties>

      <Layout>
        <DimensionLayout dim="0">
          <Group type="103" groupAlignment="0" attributes="0">
              <Group type="102" alignment="0" attributes="0">
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" attributes="0">
                      <Component id="jScrollPane2" alignment="0" pref="597" max="32767" attributes="0"/>
                      <Group type="102" alignment="0" attributes="0">
                          <Component id="jButton1" min="-2" pref="140" max="-2" attributes="0"/>
                          <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
                          <Component id="jButton2" min="-2" pref="140" max="-2" attributes="0"/>
                      </Group>
                      <Component id="jLabel2" alignment="0" min="-2" pref="199" max="-2" attributes="0"/>
                      <Component id="jScrollPane1" alignment="0" pref="597" max="32767" attributes="0"/>
                  </Group>
                  <EmptySpace max="-2" attributes="0"/>
              </Group>
          </Group>
        </DimensionLayout>
        <DimensionLayout dim="1">
          <Group type="103" groupAlignment="0" attributes="0">
              <Group type="102" alignment="0" attributes="0">
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
                      <Component id="jButton2" max="32767" attributes="1"/>
                      <Component id="jButton1" alignment="0" max="32767" attributes="1"/>
                  </Group>
                  <EmptySpace max="-2" attributes="0"/>
                  <Component id="jScrollPane2" min="-2" pref="226" max="-2" attributes="0"/>
                  <EmptySpace max="-2" attributes="0"/>
                  <Component id="jLabel2" pref="20" max="32767" attributes="0"/>
                  <EmptySpace max="-2" attributes="0"/>
                  <Component id="jScrollPane1" min="-2" pref="121" max="-2" attributes="1"/>
                  <EmptySpace max="-2" attributes="0"/>
              </Group>
          </Group>
        </DimensionLayout>
      </Layout>
      <SubComponents>
        <Component class="javax.swing.JButton" name="jButton1">
          <Properties>
            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
              <Font name="Times New Roman" size="14" style="0"/>
            </Property>
            <Property name="text" type="java.lang.String" value="generate"/>
          </Properties>
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
            <EventHandler event="ancestorAdded" listener="javax.swing.event.AncestorListener" parameters="javax.swing.event.AncestorEvent" handler="jButton1AncestorAdded"/>
          </Events>
        </Component>
        <Container class="javax.swing.JScrollPane" name="jScrollPane2">

          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
          <SubComponents>
            <Component class="javax.swing.JTable" name="jTable2">
              <Properties>
                <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
                  <Table columnCount="4" rowCount="4">
                    <Column editable="false" title="Title 1" type="java.lang.Object"/>
                    <Column editable="false" title="Title 2" type="java.lang.Object"/>
                    <Column editable="false" title="Title 3" type="java.lang.Object"/>
                    <Column editable="false" title="Title 4" type="java.lang.Object"/>
                  </Table>
                </Property>
              </Properties>
            </Component>
          </SubComponents>
        </Container>
        <Component class="javax.swing.JButton" name="jButton2">
          <Properties>
            <Property name="text" type="java.lang.String" value="Close"/>
          </Properties>
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
          </Events>
        </Component>
        <Container class="javax.swing.JScrollPane" name="jScrollPane1">

          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
          <SubComponents>
            <Component class="javax.swing.JTable" name="jTable1">
              <Properties>
                <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
                  <Table columnCount="4" rowCount="4">
                    <Column editable="true" title="Title 1" type="java.lang.Object"/>
                    <Column editable="true" title="Title 2" type="java.lang.Object"/>
                    <Column editable="true" title="Title 3" type="java.lang.Object"/>
                    <Column editable="true" title="Title 4" type="java.lang.Object"/>
                  </Table>
                </Property>
              </Properties>
            </Component>
          </SubComponents>
        </Container>
        <Component class="javax.swing.JLabel" name="jLabel2">
          <Properties>
            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
              <Font name="Times New Roman" size="14" style="1"/>
            </Property>
            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
              <Color blue="0" green="0" red="cc" type="rgb"/>
            </Property>
            <Property name="text" type="java.lang.String" value="Range [ benchmark ]"/>
          </Properties>
        </Component>
      </SubComponents>
    </Container>
    <Component class="javax.swing.JLabel" name="jLabel1">
      <Properties>
        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
          <Font name="Times New Roman" size="14" style="1"/>
        </Property>
        <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
          <Color blue="0" green="0" red="cc" type="rgb"/>
        </Property>
        <Property name="horizontalAlignment" type="int" value="0"/>
        <Property name="text" type="java.lang.String" value="Detail Data Index Harga Saham Gabungan Terklaster"/>
      </Properties>
    </Component>
    <Component class="javax.swing.JLabel" name="jlblJudul">
      <Properties>
        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
          <Font name="Times New Roman" size="14" style="1"/>
        </Property>
        <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
          <Color blue="0" green="0" red="cc" type="rgb"/>
        </Property>
        <Property name="horizontalAlignment" type="int" value="0"/>
        <Property name="text" type="java.lang.String" value="   "/>
      </Properties>
    </Component>
  </SubComponents>
</Form>

No comments:

Post a Comment

silahkan membaca dan berkomentar