Write a C program that reads a simple data file such as, text.txt 3 2 //This fir
ID: 3883352 • Letter: W
Question
Write a C program that reads a simple data file such as,
text.txt
3 2 //This first row indicates the number of jobs and the number of machines
0 5 1 10 //These other row represents a specific job combined by (machine-id, job-duration) pairs.
0 10 1 5
0 1 1 4
After that randomly initialize a genetic algorithm population (say population size = 100) and compute the makespans of the population. Select the best schedule according to makespans and output the schedule and its makespan to an outtput file. The makespan would look like this for text.txt,
makespan
21 //This first line indicates the optimization criterion
2 0 0 1 1 6 //This second line is the makespan computed from the schedule
2 1 0 6 1 16 //This is the flowshop schedule combined by (job-id, start-time) pairs
The compile should look like text.txt output.txt
Explanation / Answer
#include <stdio.h>
int nofjobs;
int nofmachines;
struct s {
int mId,duration;
};
int main() {
struct s machines[nofmachines],jobs[nofjobs];
FILE *fptr;
fptr=fopen("file.txt","rb");
fread(jobs,sizeof(jobs),1,fptr);
fread(machines,sizeof(machines),1,fptr);
for (i=0;i<nofjobs;++i) {
printf("Machine ID: %d duration: %d",jobs[i].mId,jobs[i].);
}
fclose(fptr);
}
// s1 -> machine 1
//s2->machine 2 , a[i]-> job[i] ,time-> time consumed,jobs sorted in descending order
// allocated one by one to the machine which is free.
long long ans=INT_MAX;
sort(a,a+n);
reverse(a,a+n);
int i=2;
int s1=machines[0];
int s2=machines[1];
long long time=min(s1,s2);
s1-=time;
s2-=time;
while(i<n)
{
if(s1==0 && s2==0)
{
s1=a[i];
if(i+1<n) s2=a[i+1];
int c=min(s1,s2);
time+=c;
s1-=c;
s2-=c;
i+=2;
continue;
}
else
{
if(s1<s2) swap(s1,s2);
s2=a[i];
int c=min(s1,s2);
time+=c;
s1-=c;
s2-=c;
i++;
}
}
assert(s1*s2==0);
ans = min(ans,time+max(s1,s2));
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.