:- lib(ic). :- lib(branch_and_bound). dvf(Fs,Vs):- open("clp.txt",read,sin), read(sin,Tn), read(sin,Tc), read(sin,Dl), read(sin,Levels), read(sin,Voltage), read(sin,Lg), read(sin,X), read(sin,Fmax), read(sin,Fmin), close(sin), length(Voltage,Vn), length(Vs,Tn), length(Fs,Tn), Fs::Levels, % frequency levels are integers, no need to process dim(Array,[Tn]), ( for(I,1,Tn), foreach(Ai,Tc), foreach(Fi,Fs), foreach(Vi,Vs), foreach(Di,Dl), foreachelem(T, Array), param(Tn,Tc,Fs,Dl,Array,Vs,Vn,Levels,Voltage,Fmax) do T=Ai*Fmax/Fi/1e5, %change here Di $>= sum(Array[1..I]), ( foreach(Li,Levels), foreach(Voi,Voltage), param(Vn,Fi,Levels,Vi,Voltage) do (Fi $= Li) => (Vi $= Voi) ) ), ( for(I,0,X), foreach(Sri,Sr), param(X,Tn,Fmax,Fmin,Fs,Tc) do ( for(J,0,Tn^I-1), foreach(Rii,Ri), param(Tn,I,Fmax,Fmin,Fs,Tc) do ( for(F,0,I-1), %number of faults foreach(Fxi,FaTaIn), param(I,J,Tn) do Fxi is (J rem Tn^(I-F))//Tn^(I-F-1) % all numbers are known ), Lamda0 is 1e-6, D is 4, ( for(K,0,Tn-1), foreach(Ttdi,Ttd), foreach(Si,Sttd), foreach(Fi,Fs), foreach(Lamdai,Lamda), foreach(Ti,Tc), foreach(Qi,Q), param(Tn,FaTaIn,Fs,Fmax,Fmin,Tc,Lamda0,D) do ( foreach(Fai,FaTaIn), % I iterations foreach(Ttdii,Ttdi), % if a task get more than 1 faults, for sum up param(Ttdi,K,FaTaIn,Sttd) do (Fai==K)-> (Ttdii is 1);(Ttdii is 0) ), Si is sum(Ttdi), (Fi==Fmax->Lamdai = Lamda0; Lamdai=Lamda0*10^(D*(Fmax-Fi)/(Fmax-Fmin))), ((Si==0)->(Qi= exp(- Lamdai*Ti/Fi/1e5));((Si==1)->(Qi=(1-exp(- Lamdai*Ti/Fi/1e5))*exp(- Lamda0*Ti/Fmax/1e5));(Qi=(1-exp(- Lamdai*Ti/Fi/1e5))*(1-exp(- Lamda0*Ti/Fmax/1e5))^(Si-1)*exp(- Lamda0*Ti/Fmax/1e5)))) ), writeln(Sttd), prod_list(Q,Rii) ), Sri=sum(Ri) ), eval(sum(Sr))$>= 0.999999997, Ceff is 0.43e-9, K3 is 5.38e-7, K4 is 1.83, K5 is 4.19, Vbs is -0.7, ( foreach(Fi, Fs), foreach(Vi, Vs), foreach(Ti,Tc), foreach(Ei,En), param(Fs,Vs,Tc,Ceff,K3,K4,K5,Vbs,Lg) do Ei=(Ceff*Vi*Vi*Ti+Lg*K3*exp(K5*Vbs)*exp(K4*Vi)*Vi*Ti/Fi/1e5)*1e6 ), Se $= sum(En), minimize(labeling(Fs),Se), open("clpout.txt",write,sout), write(sout,Se), write(sout,Fs), close(sout). prod_list([X],X):-!. prod_list([H|T],P):- P = H*P1, prod_list(T,P1). :-dvf(Fs,Vs). :-halt.