Планирование и распределение ресурсов

Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 02:59, дипломная работа

Краткое описание

Целью исследования операций является выявление наилучшего способа действия при решении той или иной задачи. Главная роль при этом отводится математическому моделированию. Для построения математической модели необходимо иметь строгое представление о цели функционирования исследуемой системы и располагать информацией об ограничениях, которые определяют область допустимых значений. Цель и ограничения должны быть представлены в виде функции.

Содержание

Введение…………………………………………………………………………..3
1. Постановка задач распределения ресурсов и планирования производства на предприятии……………………………………………………………….......6
1.1 Описание (обзор) объекта исследования предприятия…………….……...6
1.1.1 Работы выполняемые ОАО «Спецконструкция»……………………..….8
1.2 Формулировка проблемы в работе предприятия………………………....10
1.3 Постановка задачи планирования производства (как задачи линейного программирования)……………………………………………………………..12
1.4 Постановка задачи распределения ресурсов предприятия (как задачи динамического программирования)…………………………………………...16
2. Расчетно-аналитический метод совместного решения задач планирования производства и распределения ресурсов………………………………...…….21
2.1Решение задачи линейного программирования геометрическим методом…………………………………………….……………………………21
2.2 Решение задачи методом динамического программирования…….……..66
3. Разработка программы…………………………….……………………...…73
Заключение……………………………………………………….……………...75
Список используемой литературы………………………………….………….82

Вложенные файлы: 1 файл

диплом.doc

— 1.34 Мб (Скачать файл)

 

 

  1. В качестве параметра, характеризующего состояние управляемой системы выберем условную оптимальную эффективность цеха на каждом шаге , где - номер шага, - количество ресурса, выделяемого на данном шаге.
  2. Разделим операцию на шаги, считая за первый шаг выделение цеха 1, за второй – цех 2, за третий – цех 3, за четвертый – цех 4.
  3. Начнем процесс выделения ресурсов для цеха с последнего шага 4, то есть будем выделять ресурсы для 4 цеха.
    1. Решаем методом обратной прогонки.

        4 шаг:

                                      

 

 

 

     3 шаг:

На данном шаге будем  определять условное оптимальное управление (помечать будем символом *), при выделении определенного количества ресурсов для цеха:

                                    

 

                                    

 

                                    

 

                                    

 

                                    

 

                                    

 

                                    

       2 шаг:

При расчете эффективности  на данном шаге будем исследовать  условное оптимальное управление, определенное на предыдущем шаге.

                                    

 

                                    

 

                                    

 

                                    

 

                                    

 

                                   

 

                                   

      1 шаг:

На данном шаге воспользуемся  уже известным из предыдущего  шага условным оптимальным управлением, считая, что перед первым шагом  в нашем распоряжении все 7 ресурсов.

 

                                   

    1. Используем метод прямой прогонки.

Так как на любом шаге определено условное оптимальное управление, то проведем безусловную оптимизацию  решения, двигаясь с первого шага, к четвертому шагу. У нас получился максимальный доход при, и , рассмотрим эти 2 случая:

при :

1 шаг: Максимальный доход равен 14,2, при , таким образом, первому цеху нужно выделить 2 ресурса. Распределим ресурсы для остальных цехов.

2 шаг: Осталось 5 ресурсов, так как на втором цехе при 5 ресурсах максимальный доход равен 10, при , то этому цеху не выделяем ресурсы.

3 шаг: на третьем цехе при 5 ресурсах максимальный доход равен 10, при , получаем, что все оставшиеся 5 ресурсов выделим третьему цеху.

4 шаг: Все ресурсы распределили, получаем, что четвертому цеху не выделяем ресурсы.

при :

1 шаг: Максимальный доход равен 14,2, при , таким образом, первому цеху нужно выделить 5 ресурсов. Распределим ресурсы для остальных цехов.

2 шаг: Осталось 2 ресурса, так как на втором цехе при 2 ресурсах максимальный доход равен 4, при , то этому цеху не выделяем ресурсы.

3 шаг: на третьем цехе при 2 ресурсах максимальный доход равен 4, при , получаем, что все оставшиеся 2 ресурса выделим третьему цеху.

4 шаг: Все ресурсы распределили, получаем, что четвертому цеху не выделяем ресурсы [16 ,25].

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. РАЗРАБОТКА ПРОГРАММЫ

 

Программа разработана  для линейного программирования в Excel.

Excel – это электронная таблица, которая входит в пакет Microsoft Office. Появление электронных таблиц было одним из важных событий в развитии компьютерных систем, так как позволило производить быстро и качественно расчеты на персональных ЭВМ.

Excel – это программа, предназначенная для создания таблиц, выполнения вычислений и анализа данных. Такие программы называются редакторами электронных таблиц. В приложении Excel можно создавать таблицы, в которых автоматически будут подсчитываться итоговые значения для числовых данных, печатать аккуратно оформленные таблицы и строить простые графики. Приложение Excel входит в состав Office, пакета программных продуктов, в котором объединены  программы нескольких типов, предназначенные для создания документов, электронных таблиц и презентаций, а также для работы с электронной почтой.

 

 

Программа для динамического программирования разработана на языке Java, с помощью среды разработки NetBeans IDE 6.9.1.

Java – это объектно – ориентированный язык программирования, разработанный компанией Sun Microsystems. Приложения  Java обычно компилируются в специальный байт – код, поэтому они могут работать на любой виртуальной Java – машине (JVM) независимо от компьютерной архитектуры. Java – так называют не только сам язык, но и платформу для создания и исполнения приложений на основе данного языка. Положительная сторона Java состоит в том, что он дает программистам меньше шансов сделать ошибку, чем C++. В нем отсутствуют некоторые наиболее обременительные задачи программирования, например, явное управление памятью, что позволяет программистам сфокусироваться на бизнес – логике. Отрицательная сторона – по канонам объектно – ориентированного программирования (ООП) язык Java имеет слишком много не объектно – ориентированных элементов, для того чтобы быть хорошим инструментом  [27].

NetBeans IDE – это свободная интегрированная среда разработки для всех платформ Java – Java ME, Java и Java EE. Пропагандируется Sun Microsystems, разработчиком Java, как базовое средство для разработки программного обеспечения на языке Java и других языках (C, C++, Ruby, PHP, Fortran и др.) [26].

Листинг программы:

package dp;

public class Main {

 static dp dp;

        public static void main(String[] args) {

        dp = new dp();

        dp.setVisible(true); 

        }

}

package dp;

public class GenPlan {

    VyhodT vyhodt;

    VhodT vhodt;

    int stb, str;

    ResPr[] genplan;

    float resurs;

        GenPlan(VhodT vhodt, VyhodT vyhodt) {

        this.vyhodt = vyhodt;

        this.vhodt = vhodt;

        stb = vyhodt.stb;

        str = vhodt.str;

        resurs = vhodt.getResurs(str - 1 );

        genplan = new ResPr[stb];

        raschotGenPlan();

    }

        ResPr OptVStb(int stb) {

        float max = 0f;

        float resurs = 0f;

        for (int i = 0; i < str; i++) {

            if (vyhodt.m[i].m[stb].pribyl > max && vyhodt.m[i].m[stb].resurs <= this.resurs) {

                max = vyhodt.m[i].m[stb].pribyl;

                resurs = vyhodt.m[i].m[stb].resurs;

            }

        }

        this.resurs -= resurs;

        return new ResPr(resurs, max);

    }

        private void raschotGenPlan() {

        for (int i = 0; i < stb; i++) {

            genplan[i] = OptVStb(i);

        }

    }

    @Override

    public String toString() {

        String s = "(";

        for (int i = 0; i < stb; i++) {

            s += genplan[i] + ", ";

        }

        s += ")";

        return s;

    }

}

package dp;

public class ResPr {

    float pribyl;

    float resurs;

    ResPr(float resurs, float pribyl) {

        this.pribyl = pribyl;

        this.resurs = resurs;

    }

    @Override

    public String toString() {

        return " " + resurs + " " + pribyl;

    }

}

package dp;

public class StrRaschT {

    ResPr[] m;

    float resurs;

    int stb;

    StrRaschT(int stb) {

        this.stb = stb;

        m = new ResPr[stb];

    }

    @Override

    public String toString() {

        String s = "";

        for (int i = 0; i < stb; i++) {

            s += " " + m[i] + " ";

        }

        return s;

    }

}

package dp;

public class StrVhT {

    float[] pribyl;

    int resurs;

    int stb;

    StrVhT(int resurs, float[] pribyl) {

        this.resurs = resurs;

        this.pribyl = pribyl;

        stb = pribyl.length;

    }

    int getIntResurs(){

        return resurs;

    }

    float getFloatPribyl(int stb){

        return pribyl[stb];

    }

    Object getResurs() {

        return (Object) resurs;

    }

        Object getPribyl(int stb) {

        return (Object) pribyl[stb];

    }

    Object[] getStrVhT() {

               Object[] t = new Object[stb + 1];

        t[0] = resurs;

        for (int i = 1; i < stb + 1; i++) {

            t[i] = pribyl[i - 1];

        }

        //System.arraycopy(pribyl, 1, t, 1, stb - 1);

        return t;

    }

    String[] zagolovok() {

        String[] Zagolovok = new String[stb + 1];

        Zagolovok[0];

        for (int i = 1; i <= stb; i++) {

            Zagolovok[i] = "f" + i;

        }

        return Zagolovok;

    }

    @Override

    public String toString() {

        String s = "" + resurs + " | ";

        for (int i = 0; i < stb; i++) {

            s += " " + pribyl[i];

        }

        return s;

    }

}

package dp;

public class VhodT {

    StrVhT[] vhmas;

    int stb;

    int str;

    VhodT(StrVhT[] vhmas) {

        this.vhmas = vhmas;

        str = vhmas.length;

    }

    VhodT(javax.swing.table.DefaultTableModel t) {

        int stbPr = t.getColumnCount() - 1;

        stb = stbPr;

        str = t.getRowCount();

        vhmas = new StrVhT[str];

        for (int i = 0; i < str; i++) {

            float[] pribyl = new float[stbPr];

            for (int j = 0; j < stbPr; j++) {

                pribyl[j] = Float.parseFloat(t.getValueAt(i, j + 1).toString());

            }

            vhmas[i] = new StrVhT(Integer.parseInt(t.getValueAt(i, 0).toString()), pribyl);

        }

    }

    float getPrPoRes(int resurs, int stb) {

        for (int i = 0; i < str; i++) {

            if (vhmas[i].resurs == resurs) {

                return vhmas[i].getFloatPribyl(stb);

            }

        }

        return 0f;

    }

    float getPribyl(int str, int stb) {

        return vhmas[str].getFloatPribyl(stb);

    }

    int getResurs(int str) {

        return vhmas[str].getIntResurs();

    }

    javax.swing.table.DefaultTableModel toTable() {

        String[] zagolovok = vhmas[0].zagolovok();

        Object[][] dannye = new Object[str][stb];

        for (int i = 0; i < str; i++) {

            dannye[i] = vhmas[i].getStrVhT();

        }

        javax.swing.table.DefaultTableModel t=new javax.swing.table.DefaultTableModel(dannye, zagolovok);

        return t;

    }

    @Override

    public String toString() {

        String s = "";

        for (int i = 0; i < str; i++) {

            s += vhmas[i] + "\n";

        }

        return s;

    }

}

//jTable2 = new javax.swing.JTable();

//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"

//    }

//));

//jScrollPane2.setViewportView(jTable2);

package dp;

public class VyhodT {

    StrRaschT[] m;

    VhodT vhodt;

    float resurs;

    int stb;

    int str;

    VyhodT(VhodT vhodt) {

        this.vhodt = vhodt;

        str = vhodt.str;

        stb = vhodt.stb;

        m = new StrRaschT[str];

    }

    void poslW() {

        for (int i = 0; i < str; i++) {

            m[i] = new StrRaschT(stb);

            m[i].m[stb - 1] = new ResPr(vhodt.getResurs(i), vhodt.getPribyl(i, stb - 1));

        }

    }

        ResPr poiskDlyaRes(int resurs, int stb) {

        if (stb == 1) {

            System.out.print(" ");

        }

        ResPr t = new ResPr(0f, 0f);

        float tPrib;

        for (int i = 0; i < str && vhodt.getResurs(i) <= resurs; i++) {

            //tPrib = vhodt.getPribyl(i, stb) + getResW(resurs - vhodt.getResurs(i), stb + 1).pribyl;

            tPrib = vhodt.getPribyl(i, stb) + getResW(resurs - vhodt.getResurs(i), stb + 1);

            //          System.out.print(stb + " | " + vhodt.getResurs(i) + " " +

            //                vhodt.getPribyl(i, stb) + " | "

            //              + getResW(resurs - vhodt.getResurs(i), stb + 1) + "\n");

            System.out.print(stb + " " + resurs + "  " + i + "  " + vhodt.vhmas[i].resurs + "\n");

            if (t.pribyl < tPrib) {

                t.pribyl = tPrib;

                //          t.resurs = (float) resurs;

                t.resurs = i;

                //       System.out.print(resurs + "  " + i + "  " + vhodt.vhmas[i].resurs + "\n");

            }

        }

        return t;

    }

    float getResW(int resurs, int stb) {

                for (int i = 0; i < str; i++) {

            if (Math.abs(vhodt.getResurs(i) - (float) resurs) < 0.00001) {

                return m[i].m[stb].pribyl;

            }

        }

        return 0;

    }

 

        void stbW(int stb) {

        for (int i = 0; i < this.str; i++) {

            m[i].m[stb] = poiskDlyaRes(vhodt.getResurs(i), stb);

        }

    }   

    void ObrHod() {

        for (int i = stb - 2; i >= 0; i--) {

            stbW(i);

        }

    }

    @Override

    public String toString() {

        String s = "";

        for (int i = 0; i < str; i++) {

            s += m[i] + "\n";

        }

        return s;

    }

}

package dp;

public final class dp extends javax.swing.JFrame {

        javax.swing.table.DefaultTableModel vhodTM;

    void initVhodTable(int str, int stb) {

        vhodTM = new javax.swing.table.DefaultTableModel(str, stb);

        String[] Zagolovok = new String[stb];

        Zagolovok[0]

        for (int i = 1; i < stb; i++) {

            Zagolovok[i] = "f" + i;

        }

        vhodTM.setColumnIdentifiers(Zagolovok);

    }

    public dp() {

        VhodT vhodt = new VhodT(new StrVhT[]{

                    new StrVhT(0, new float[]{0f, 0f, 0f, 0f}),

                    new StrVhT(1, new float[]{1.8f, 1.5f, 2f, 1.5f}),

                    new StrVhT(2, new float[]{4.2f, 3f, 4f, 3.5f}),

                    new StrVhT(3, new float[]{6f, 4.5f, 6f, 5f}),

                    new StrVhT(4, new float[]{7.8f, 6f, 8f, 6.5f}),

                    new StrVhT(5, new float[]{10.2f, 7.5f, 10f, 8.5f}),

                    new StrVhT(6, new float[]{12f, 9f, 12f, 10f}),

                    new StrVhT(7, new float[]{13.8f, 10.5f, 14f, 11.5f})

                });

        vhodTM = vhodt.toTable();

        //initVhodTable(5, 6);

        initComponents();

    }

        @SuppressWarnings("unchecked")

    GEN-BEGIN:initComponents

    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();

        jTable1 = new javax.swing.JTable();

        jButton1 = new javax.swing.JButton();

        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        setTitle

        jTable1.setModel(vhodTM);

        jScrollPane1.setViewportView(jTable1);

        jButton1.setText("Расчет");

        jButton1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                jButton1ActionPerformed(evt);

            }

        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

        getContentPane().setLayout(layout);

Информация о работе Планирование и распределение ресурсов