Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 12.02.2018, 02:19   #1
Arsenikum
Пользователь
 
Регистрация: 03.07.2015
Сообщений: 11
Репутация: 10
По умолчанию Метод ветвей и границ для задачи теории расписаний

Добрый день. Стоит задача распределить методом ветвей и границ несколько объектов (в программе называются модули), имеющие свою продолжительность, по разным станкам, чтобы минимизировать время выполнения работ. Есть код, может его кто сможет подправить или кто-то делал уже подобную программу и может скинуть. Заранее спасибо.


#include "stdafx.h"
#include <iostream>
#include<clocale>
using namespace std;

int const max_chislo_stankov=51;
int const max_chislo_modulei=51;
int chislo_stankov;
int chislo_modulei;
double obrabotka[max_chislo_stankov+1][max_chislo_modulei+1];
double perenaladka[max_chislo_stankov+1][max_chislo_stankov+1];
int isxodnoe_raspredelenie[max_chislo_modulei+1];
double isxodnaa_zagruzka[max_chislo_stankov+1];
int i,j,k;
double record;
void metod_vetvei_i_granic(int raspredelenie[],int uroven_grafa,double zagruzka_stankov[]);
double maximum (double num[max_chislo_stankov+1]);


int _tmain(int argc, _TCHAR* argv[])
{
std:setlocale(LC_ALL,"Russian_Russi a.1251");
cout<<"Максимальное число станков: "<<max_chislo_stankov-1<<"\n";
cout<<"Максимальное число станков: "<<max_chislo_modulei-1<<"\n";
mmm:
cout<<"введите число станков";
cin>>chislo_stankov;
if(chislo_stankov>max_chislo_stanko v-1){
cout<<"ошибка"<<"\n"; goto mmm;
}
mmmm:
cout<<"введите число модулей";
cin>>chislo_modulei;
if(chislo_modulei>max_chislo_module i-1){
cout<<"ошибка"<<"\n"; goto mmmm;
}
for(i=1;i<chislo_stankov+1;i++){
for(j=1;j<chislo_modulei+1;j++){
cout<<"Введите продолжительность модуля "<<j<< "на станке "<<i<<"\n";
cin>>obrabotka[i][j];
}
}
record=0;
for(i=1;i<chislo_stankov+1;i++){
for(j=1;j<chislo_modulei+1;j++){
record=record + obrabotka[i][j];
}
}

for(i=1;i<chislo_modulei+1;i++){
isxodnoe_raspredelenie[i]=0;
}
i=0;
for(i=1;i<chislo_stankov+1;i++){
isxodnaa_zagruzka[i]=0;
}
metod_vetvei_i_granic(isxodnoe_rasp redelenie,1,isxodnaa_zagruzka);
return 0;

}


void metod_vetvei_i_granic(int raspredelenie[],int uroven_grafa,double zagruzka_stankov[])
{
cout<<"\n"<<"запущен метод ветвей и границ для распределения"<<" ";
int novoe_raspredelenie[max_chislo_modulei+1];
double novaa_zagruzka_stankov[max_chislo_stankov+1];
double nizhnaa_otsenka;
for (j=1;j<chislo_modulei+1;j++)
{
novoe_raspredelenie[j]=raspredelenie[j];
cout<<novoe_raspredelenie[j]<<" ";
}
cout<<"\n"<<"и загрузки станков";
for (j=1;j<chislo_stankov+1;j++)
{
novaa_zagruzka_stankov[j]=zagruzka_stankov[j];
cout<<novaa_zagruzka_stankov[j]<<" ";
}

for(i=1;i<chislo_stankov+1;i++)
{
novoe_raspredelenie[uroven_grafa]=i;
cout<<"\n"<<"для распределения ";
for(j=1;j<chislo_modulei+1;j++){
cout<<novoe_raspredelenie[j]<<" ";
}
novaa_zagruzka_stankov[i]=novaa_zagruzka_stankov[i]+obrabotka[i][uroven_grafa];
nizhnaa_otsenka = maximum (novaa_zagruzka_stankov);
cout<<"нижняя оценка равна "<<nizhnaa_otsenka;
if (nizhnaa_otsenka<record)
{
if (uroven_grafa==chislo_modulei)
{
cout<<"целевая функция от распределения ";
for(k=1;k<chislo_modulei+1;k++){
cout<<novoe_raspredelenie[k]<<" ";
}
cout<<"равна"<<nizhnaa_otsenka<<"\n ";
record=nizhnaa_otsenka;
}

else metod_vetvei_i_granic(novoe_raspred elenie,uroven_grafa+1,novaa_zagruzk a_stankov);}
novaa_zagruzka_stankov[i]=novaa_zagruzka_stankov[i]-obrabotka[i][uroven_grafa];
}
}


double maximum (double num[max_chislo_stankov+1])
{//double
int i;
double j=num[1];
for(i=1;i<chislo_stankov+1;i++)
{
if(j<num[i]){j=num[i];}
}

return j;
}
Arsenikum вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача коммивояжера метод ветвей и границ alesya-san Помощь студентам 0 07.01.2017 19:30
метод ветвей и границ в c# Альберт0 C# (си шарп) 1 24.03.2015 18:20
метод ветвей и границ на с++ kirillkucelap Помощь студентам 1 13.10.2014 22:09
Метод ветвей и границ для задачи "Багдадский вор" Zavoorchik Помощь студентам 0 01.05.2012 12:04
Коммивояжера метод ветвей и границ kop Помощь студентам 2 21.10.2011 23:30


21:16.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru