/* Murat Yildizoglu * Copyright (C) 1996-2001 Murat Yildizoglu. * e-mail: yildi[a_t]u-bordeaux4.fr * All Rights Reserved. * * Permission to use, copy, modify, and distribute this * software and its documentation for NON-COMMERCIAL purposes * and without fee is hereby granted provided that this * copyright notice appears in all copies. * Last change: MY 10 Jul 00 21:47 */ /** * @version 3.2 10 March 2001 * @author Murat Yildizoglu */ import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.*; import java.lang.Math; import java.util.*; import corejava.*; import graph.*; /** /* This applet runs the Nelson and Winter's Model * and prints the evolution of fundamental variables * on the screen * @author Murat Yildizoglu (yildi[a_t]u-bordeaux4.fr) * @version 3.2 10 March 2001 */ public class NelWinApplet extends Applet implements ActionListener { private void adding(Component c, GridBagLayout gbl, GridBagConstraints gbc, int x, int y, int w, int h) { gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = w; gbc.gridheight = h; c.setFont(font); gbl.setConstraints(c, gbc); panel.add(c); } private void adding2(Component c, GridBagLayout gbl, GridBagConstraints gbc, int x, int y, int w, int h) { gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = w; gbc.gridheight = h; gbl.setConstraints(c, gbc); panel2.add(c); } public String getAppletInfo() { return "Name: NelWinApplet\r\n" + "Author: Murat Yildizoglu\r\n"; } public void init() { setLayout(new BorderLayout()); //setSize(620,380); GridBagLayout gbl = new GridBagLayout(); panel.setLayout(gbl); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 0; gbc.weighty = 0; adding(new Label("Capital cost (%)"), gbl, gbc, 0, 0, 1, 1); adding(costField, gbl, gbc, 1, 0, 1, 1); adding(new Label("Dem. coeff. (%)"), gbl, gbc, 2, 0, 1, 1); adding(demcoeffField, gbl, gbc, 3, 0, 1, 1); adding(new Label("Dem. elasticity (%)"), gbl, gbc, 4, 0, 1, 1); adding(elasticityField, gbl, gbc, 5, 0, 1, 1); adding(new Label("Initial prod. (%)"), gbl, gbc, 0, 1, 1, 1); adding(prodField, gbl, gbc, 1, 1, 1, 1); adding(new Label("Depreciation (%)"), gbl, gbc, 2, 1, 1, 1); adding(depreciationField, gbl, gbc, 3, 1, 1, 1); adding(new Label("Pr. innovation (%)"), gbl, gbc, 4, 1, 1, 1); adding(P_inField, gbl, gbc, 5, 1, 1, 1); adding(new Label("Pr. imitation (%)"), gbl, gbc, 0, 2, 1, 1); adding(P_imField, gbl, gbc, 1, 2, 1, 1); adding(new Label("Dispersion (%)"), gbl, gbc, 2, 2, 1, 1); adding(sdField, gbl, gbc, 3, 2, 1, 1); adding(new Label("Bank (%)"), gbl, gbc, 4, 2, 1, 1); adding(BankField, gbl, gbc, 5 , 2, 1, 1); adding(new Label("Number of periods"), gbl, gbc, 0, 3, 1, 1); adding(TField, gbl, gbc, 1, 3, 1, 1); adding(new Label("Number of firms:"), gbl, gbc, 2, 3, 1, 1); adding(new Label("Innovators:"), gbl, gbc, 3, 3, 1, 1); adding(N_inField, gbl, gbc, 4, 3, 1, 1); adding(new Label("Pure imitators:"), gbl, gbc, 3, 4, 1, 1); adding(N_imField, gbl, gbc, 4, 4, 1, 1); Button button= new Button("Compute"); adding(button , gbl, gbc, 5, 4, 1, 1); adding(N_imField, gbl, gbc, 4, 4, 1, 1); GridBagLayout gbl2 = new GridBagLayout(); panel2.setLayout(gbl2); GridBagConstraints gbc2 = new GridBagConstraints(); gbc2.fill = GridBagConstraints.BOTH; gbc2.weighty = 0; gbc2.weightx = 0; adding2(new Label("Price Dynamics"),gbl2,gbc2,1,1,1,1); adding2(new Label("Productivity Dynamics"),gbl2,gbc2,2,1,1,1); adding2(new Label("Concentration over capital"),gbl2,gbc2,1,3,1,1); adding2(new Label("Concentration over market shares"),gbl2,gbc2,2,3,1,1); adding2(new Label("Total capital stock of the industry"),gbl2,gbc2,1,5,1,1); adding2(new Label("Average profits of the period"),gbl2,gbc2,2,5,1,1); gbc2.weightx = 100; gbc2.weighty = 100; adding2(graph1,gbl2,gbc2,1,2,1,1); adding2(graph2,gbl2,gbc2,2,2,1,1); adding2(graph3,gbl2,gbc2,1,4,1,1); adding2(graph4,gbl2,gbc2,2,4,1,1); adding2(graph5,gbl2,gbc2,1,6,1,1); adding2(graph6,gbl2,gbc2,2,6,1,1); add(panel,"North"); add(panel2,"Center"); button.addActionListener(this); } /** * The main procedure: Constructs the industry * and runs the simulation */ public void actionPerformed(ActionEvent evt) { String arg=evt.getActionCommand(); if (arg.equals("Compute") && (costField.isValid() && demcoeffField.isValid() && elasticityField.isValid() && prodField.isValid() && depreciationField.isValid() && P_inField.isValid() && P_imField.isValid() && sdField.isValid() && N_inField.isValid() && N_imField.isValid() && TField.isValid() && BankField.isValid())) { Cost = (double) costField.getValue()/100; Dem = (double) demcoeffField.getValue()/100; Eta = (double) elasticityField.getValue()/100; Prod0 = (double) prodField.getValue()/100; Delta = (double) depreciationField.getValue()/100; P_in = (double) P_inField.getValue()/100; P_im = (double) P_imField.getValue()/100; Sigma_in = (double) sdField.getValue()/100; N_in = N_inField.getValue(); N_im = N_imField.getValue(); T = TField.getValue(); B = (double) BankField.getValue()/100; data_p=new double[T]; data_pr=new double[T]; data_hk=new double[T]; data_hq=new double[T]; data_indK=new double[T]; data_indprofin=new double[T]; data_indprofim=new double[T]; N=(N_in+N_im); Industry=new EvolFirm[N]; K0=Math.pow((Dem*Prod0*(N*Eta-1))/(N*Eta*Cost),1/Eta)/(N * Prod0); int i=0; for ( i=0;i <= (N_in-1) ;i++ ) { Industry[i]= new EvolFirm(K0, Prod0, Cost, P_in, P_im, D_in, D_im, Sigma_in, B, Delta, Eta); } for ( i=(N_in);i<=(N-1) ;i++ ) { Industry[i]= new EvolFirm(K0, Prod0, Cost, 0, P_im, D_in, D_im, Sigma_in, B, Delta, Eta); } for ( t=1;t<=T ;t++ ) { Supply=IndSupply(); P=demand(Supply); Statistics(); data_pr[t-1]= Meanprod/Maxprod; data_p[t-1]= P; data_hk[t-1]= HK; data_hq[t-1]= HQ; data_indK[t-1]=IndK; data_indprofin[t-1]=IndProfIn; data_indprofim[t-1]=IndProfIm; for ( i=0;i<=Industry.length-1 ;i++ ) { Industry[i].imitate(Maxprod); } for ( i=0;i<=Industry.length-1 ;i++ ) { if (i<=(N_in-1)) Industry[i].innovate(); Industry[i].invest(P,Supply,B); } } plot(); } } /** * Computes the industry supply. * @return S */ public double IndSupply() { double S=0; IndK=0; for ( int i=0;i<=Industry.length-1 ;i++ ) { S+=Industry[i].supply(); IndK+=Industry[i].getKapital(); } return S; } /** * Computes the average and maximal productivities of the industry * @return Meanprod * @return Maxprod * @return HQ * @return HK * @return IndK * @return IndProf */ void Statistics() { Maxprod=0; Meanprod=0; HK=0; HQ=0; IndProfIn=0; IndProfIm=0; for ( int i=0;i<=Industry.length-1 ;i++ ) { double prd=Industry[i].getprod(); if (prd>Maxprod) Maxprod=prd; Meanprod+=prd; if (i<=N_in - 1) IndProfIn+=Industry[i].getProfit(P); else IndProfIm+=Industry[i].getProfit(P); HQ+=Math.pow(Industry[i].supply()/Supply,2.0); HK+=Math.pow((double)(Industry[i].getKapital()/IndK),2.0); } Meanprod/=Industry.length; HQ=1/HQ; HK=1/HK; if (N_in > 1) { IndProfIn/=N_in; } if (N_im > 1) { IndProfIm/=N_im; } }
/** * Demand function is used to compute the market price * @param S */ public double demand(double s) { return Dem/Math.pow(s,Eta); } /** This function generates the graphics. */ void plot() { int count =0, j=0; t=0; data_prix=new double[2*T]; data_prod=new double[2*T]; data_HK=new double[2*T]; data_HQ=new double[2*T]; data_INDK=new double[2*T]; data_INDPROFIN=new double[2*T]; data_INDPROFIM=new double[2*T]; for(j=0; j < T; j++) { data_prix[count]=j; data_prix[count+1]=data_p[j]; data_prod[count]=j; data_prod[count+1]=data_pr[j]; data_HK[count]=j; data_HK[count+1]=data_hk[j]; data_HQ[count]=j; data_HQ[count+1]=data_hq[j]; data_INDK[count]=j; data_INDK[count+1]=data_indK[j]; data_INDPROFIN[count]=j; data_INDPROFIN[count+1]=data_indprofin[j]; data_INDPROFIM[count]=j; data_INDPROFIM[count+1]=data_indprofim[j]; count+=2; } graph1.detachDataSets(); graph2.detachDataSets(); graph3.detachDataSets(); graph4.detachDataSets(); graph5.detachDataSets(); graph6.detachDataSets(); graph1.detachAxes(); graph2.detachAxes(); graph3.detachAxes(); graph4.detachAxes(); graph5.detachAxes(); graph6.detachAxes(); graph1.repaint(); graph2.repaint(); graph3.repaint(); graph4.repaint(); graph5.repaint(); graph6.repaint(); data1=new DataSet(); data2=new DataSet(); data3=new DataSet(); data4=new DataSet(); data5=new DataSet(); data6in=new DataSet(); data6im=new DataSet(); try{ data1=graph1.loadDataSet(data_prix,T); data2=graph2.loadDataSet(data_prod,T); data3=graph3.loadDataSet(data_HK,T); data4=graph4.loadDataSet(data_HQ,T); data5=graph5.loadDataSet(data_INDK,T); data6in=graph6.loadDataSet(data_INDPROFIN,T); data6im=graph6.loadDataSet(data_INDPROFIM,T); }catch(Exception e){ this.showStatus("Error while appending data!"); return; } graph1.drawzero=true; graph1.drawgrid=true; graph1.clearAll=true; graph1.setGraphBackground(new Color(255,255,255)); graph1.setDataBackground(new Color(255,255,255)); data1.linecolor=new Color(0,0,255); data1.linestyle=1; xaxis=graph1.createAxis(Axis.BOTTOM); xaxis.attachDataSet(data1); xaxis.setTitleText("t"); xaxis.setLabelFont(font); yaxis=graph1.createAxis(Axis.LEFT); yaxis.attachDataSet(data1); yaxis.setTitleText("Market price"); yaxis.setTitleFont(font2); yaxis.setLabelFont(font); yaxis.force_end_labels = true; yaxis.minimum=0.0; graph2.drawzero=true; graph2.drawgrid=true; graph2.clearAll=true; graph2.setGraphBackground(new Color(255,255,255)); graph2.setDataBackground(new Color(255,255,255)); data2.linecolor=new Color(0,0,255); data2.linestyle=1; xaxis2=graph2.createAxis(Axis.BOTTOM); xaxis2.attachDataSet(data2); xaxis2.setTitleText("t"); xaxis2.setLabelFont(font); yaxis2=graph2.createAxis(Axis.LEFT); yaxis2.attachDataSet(data2); yaxis2.setTitleText("Average Prod / Maximal Prod"); yaxis2.setLabelFont(font); yaxis2.setTitleFont(font2); yaxis2.minimum=0.0; yaxis2.maximum=1.0; yaxis2.force_end_labels = true; yaxis2.minimum=0.0; yaxis2.maximum=1.0; graph3.drawzero=true; graph3.drawgrid=true; graph3.clearAll=true; graph3.setGraphBackground(new Color(255,255,255)); graph3.setDataBackground(new Color(255,255,255)); data3.linecolor=new Color(0,0,255); data3.linestyle=1; xaxis3=graph3.createAxis(Axis.BOTTOM); xaxis3.attachDataSet(data3); xaxis3.setTitleText("t"); xaxis3.setLabelFont(font); yaxis3=graph3.createAxis(Axis.LEFT); yaxis3.attachDataSet(data3); yaxis3.setTitleText("1/H (Capital)"); yaxis3.setTitleFont(font2); yaxis3.setLabelFont(font); yaxis3.minimum=0.0; yaxis3.maximum=N; yaxis3.force_end_labels = true; graph4.drawzero=true; graph4.drawgrid=true; graph4.clearAll=true; graph4.setGraphBackground(new Color(255,255,255)); graph4.setDataBackground(new Color(255,255,255)); data4.linecolor=new Color(0,0,255); data4.linestyle=1; xaxis4=graph4.createAxis(Axis.BOTTOM); xaxis4.attachDataSet(data4); xaxis4.setTitleText("t"); xaxis4.setLabelFont(font); yaxis4=graph4.createAxis(Axis.LEFT); yaxis4.attachDataSet(data4); yaxis4.setTitleText("1/H (Output)"); yaxis4.setTitleFont(font2); yaxis4.setLabelFont(font); yaxis4.minimum=0.0; yaxis4.maximum=N; yaxis4.force_end_labels = true; graph5.drawzero=true; graph5.drawgrid=true; graph5.clearAll=true; graph5.setGraphBackground(new Color(255,255,255)); graph5.setDataBackground(new Color(255,255,255)); data5.linecolor=new Color(0,0,255); data5.linestyle=1; xaxis5=graph5.createAxis(Axis.BOTTOM); xaxis5.attachDataSet(data5); xaxis5.setTitleText("time"); xaxis5.setLabelFont(font); yaxis5=graph5.createAxis(Axis.LEFT); yaxis5.attachDataSet(data5); yaxis5.setTitleText("Capital stock"); yaxis5.setTitleFont(font2); yaxis5.setLabelFont(font); yaxis5.minimum=0.0; yaxis5.force_end_labels = true; graph6.drawzero=true; graph6.drawgrid=true; graph6.clearAll=true; graph6.setGraphBackground(new Color(255,255,255)); graph6.setDataBackground(new Color(255,255,255)); data6in.linecolor=new Color(255,0,0); data6in.linestyle=1; data6im.linecolor=new Color(0,0,255); data6im.linestyle=1; xaxis6=graph6.createAxis(Axis.BOTTOM); xaxis6.attachDataSet(data6im); xaxis6.setTitleText("t"); xaxis6.setLabelFont(font); xaxis6.attachDataSet(data6in); yaxis6in=graph6.createAxis(Axis.LEFT); yaxis6in.attachDataSet(data6in); yaxis6in.setTitleText("Innovators"); yaxis6in.setTitleColor(new Color(255,0,0)); yaxis6in.setTitleFont(font2); yaxis6in.setLabelFont(font); yaxis6in.setLabelColor(new Color(255,0,0)); yaxis6in.minimum=0.0; yaxis6in.force_end_labels = true; yaxis6im=graph6.createAxis(Axis.RIGHT); yaxis6im.attachDataSet(data6im); yaxis6im.setTitleText("Imitators"); yaxis6im.setTitleColor(new Color(0,0,255)); yaxis6im.setTitleFont(font2); yaxis6im.setLabelFont(font); yaxis6im.setLabelColor(new Color(0,0,255)); yaxis6im.minimum=0.0; yaxis6im.force_end_labels = true; graph1.repaint(); graph2.repaint(); graph3.repaint(); graph4.repaint(); graph5.repaint(); graph6.repaint(); } private IntTextField costField = new IntTextField(16,5); private IntTextField demcoeffField = new IntTextField(6700,10); private IntTextField elasticityField = new IntTextField(100,4); private IntTextField prodField = new IntTextField(16,5); private IntTextField depreciationField = new IntTextField(3,3); private IntTextField P_inField = new IntTextField(5,3); private IntTextField P_imField = new IntTextField(3,3); private IntTextField sdField = new IntTextField(5,5); private IntTextField N_inField = new IntTextField(4,3); private IntTextField N_imField = new IntTextField(4,3); private IntTextField TField = new IntTextField(300,4); private IntTextField BankField = new IntTextField(100, 4); public int N_in,N_im,N,T,t=0; double Cost, B, P_im, P_in, D_im=1.25, D_in=0.125, Eta, Delta, Sigma_in, Prod0=0.16, K0, Dem, Maxprod=0, Meanprod=0, IndK=0, IndProfIn=0, IndProfIm=0, Supply=0, P=0, HK=0, HQ=0; EvolFirm[] Industry; public Panel panel = new Panel(); public Panel panel2 = new Panel(); Graph2D graph1=new Graph2D(); Graph2D graph2=new Graph2D(); Graph2D graph3=new Graph2D(); Graph2D graph4=new Graph2D(); Graph2D graph5=new Graph2D(); Graph2D graph6=new Graph2D(); DataSet data1,data2,data3,data4,data5,data6in,data6im; Axis xaxis,xaxis2,xaxis3,xaxis4,xaxis5,xaxis6; Axis yaxis,yaxis2,yaxis3,yaxis4,yaxis5,yaxis6in,yaxis6im; Label title,title2; public double data_p[], data_pr[], data_hk[],data_hq[], data_indK[],data_indprofin[],data_indprofim[]; public double data_prix[],data_prod[],data_HK[],data_HQ[], data_INDK[],data_INDPROFIN[],data_INDPROFIM[]; public Font font = new Font("TimesRoman",Font.PLAIN,11); public Font font2 = new Font("Arial",Font.PLAIN,9); }