c_cpp 给定Ñ个作业的集合{J1,J2,......,JN}。每个作业必须先由机器1处理,然后由机器2处理。作业籍需要机器Ĵ的处理时间为TJI。对于一个确定的作业调度,设FJI是作业我在
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定Ñ个作业的集合{J1,J2,......,JN}。每个作业必须先由机器1处理,然后由机器2处理。作业籍需要机器Ĵ的处理时间为TJI。对于一个确定的作业调度,设FJI是作业我在相关的知识,希望对你有一定的参考价值。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Flowshop
{
friend int Flow(int **M,int n,int bestx[]);
private:
void Backtrack(int i);
int **M, // 各作业所需的处理时间
*x, // 当前作业调度
*bestx, // 当前最优作业调度
*f2, // 机器2完成处理时间
f1, // 机器1完成处理时间
f, // 完成时间和
bestf, // 当前最优值
n; // 作业数
};
int Flow(int **M,int n,int bestx[]);
template <class Type>
inline void Swap(Type &a, Type &b);
int main()
{
int n=3,bf;
int M1[4][3]={{0,0,0},{0,2,1},{0,3,1},{0,2,3}};
int **M=new int*[n+1];
for(int i=0;i<=n;i++)
{
M[i]=new int[3];
}
cout<<"M(i,j)值如下:"<<endl;
for(int i=0;i<=n;i++)
{
for(int j=0;j<3;j++)
{
M[i][j]=M1[i][j];
}
}
int bestx[4];
for(int i=1;i<=n;i++)
{
cout<<"(";
for(int j=1;j<3;j++)
cout<<M[i][j]<<" ";
cout<<")";
}
bf=Flow(M,n,bestx);
for(int i=0;i<=n;i++)
{
delete []M[i];
}
delete []M;
M=0;
cout<<endl<<"最优值是:"<<bf<<endl;
cout<<"最优调度是:";
for(int i=1;i<=n;i++)
{
cout<<bestx[i]<<" ";
}
cout<<endl;
return 0;
}
void Flowshop::Backtrack(int i)
{
if (i>n)
{
for (int j=1; j<=n; j++)
{
bestx[j] = x[j];
}
bestf = f;
}
else
{
for (int j = i; j <= n; j++)
{
f1+=M[x[j]][1];
//机器2执行的是机器1已完成的作业,所以是i-1
f2[i]=((f2[i-1]>f1)?f2[i-1]:f1)+M[x[j]][2];
f+=f2[i];
if (f < bestf)//剪枝
{
Swap(x[i], x[j]);
Backtrack(i+1);
Swap(x[i], x[j]);
}
f1-=M[x[j]][1];
f-=f2[i];
}
}
}
int Flow(int **M,int n,int bestx[])
{
int ub=30000;
Flowshop X;
X.n=n;
X.x=new int[n+1];
X.f2=new int[n+1];
X.M=M;
X.bestx=bestx;
X.bestf=ub;
X.f1=0;
X.f=0;
for(int i=0;i<=n;i++)
{
X.f2[i]=0,X.x[i]=i;
}
X.Backtrack(1);
delete []X.x;
delete []X.f2;
return X.bestf;
}
template <class Type>
inline void Swap(Type &a, Type &b)
{
Type temp=a;
a=b;
b=temp;
}
以上是关于c_cpp 给定Ñ个作业的集合{J1,J2,......,JN}。每个作业必须先由机器1处理,然后由机器2处理。作业籍需要机器Ĵ的处理时间为TJI。对于一个确定的作业调度,设FJI是作业我在的主要内容,如果未能解决你的问题,请参考以下文章
回溯法 批处理作业调度问题
c_cpp 给定Ñ个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且Ñ条边按照顺时针依次编号为1〜n的给出。了一个N = 4个顶点的多边形。游
c_cpp Ñ个作业{1,2,...,N}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业我所需的时间分别为AI和璧
c_cpp 给定Ñ个矩阵:A1,A2,...,AN,其中艾与艾+ 1是可乘的,I = 1,2,...,N-1确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数
c_cpp 设有Ñ个活动的集合E = {1,2,...,N},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源每个。活动i都有一个要求使用该资源的起始时
c_cpp 设R = {R1,R2,...,RN}是要进行排列的Ñ个元素,RI = R- {RI}。集合X中元素的全排列记为彼尔姆(X)。(RI)彼尔姆( X)表示在全排列Perm(X)的每