当前位置: 首页 > 工具软件 > bids-matlab > 使用案例 >

组合拍卖-matlab

汪正雅
2023-12-01


function
[allocation,utility,Percentage,Userper] = Demo

%Definition of Cloud pool 

%load data

 

B = xlsread('B.xlsx');

VM = xlsread('VM.xlsx');

Price = xlsread('Price.xlsx');

 

 

c=[3000,20000,10000];%ci instance the amount of resource 

t=length(c); %the
cloud pool has t types of source 

 

r=[2,3.75,410;8,15,1680;5,1.7,350;20,7,1680;6.5,17.1,420;35,60.5,2048];

 

[Sc,m]=size(VM);

allocation=zeros(1,Sc);%the allocation where 1 means the bid have been
allocated;Sc

[bc,maxbid]=size(B);

%initialize the dual

y=zeros(1,bc);%bc

z=1./c;

U=zeros(1,bc);

utility=0;%the
whole price of the bids which have been allocated 

 

R=GetR(VM,r);

A=GetA(c,R);

 

%iteration

while
(GetSumcz(c,z)<t*exp(A-1))&&(~all(U(:))) 

    

   
S=GetmaxS(B,U,Price);%Si means the
maximum price bid of i's bids 

   
u=Getmaxi(U,S,Price,r,VM,z);%select the
best bid Su with the maximum unit resource

   
allocation(S(u))=1;

   
y(u)=Price(S(u));

   
U(u)=1;

   
utility=utility+Price(S(u));

    

    for k=1:t        

       
z(k)=z(k)*exp(A-1)^(GetSumnr(VM,S,u,r,k)/(c(k)-R(k)));

    end

 

end

%compute the percentage of CPU 

Percentage =(allocation*VM*r)./c;

%compute the percentage of user

Userper = sum(U,2)/bc;

 

 




function A =GetA(c,R)

temp=c./R;

A=min(temp);

 




 

function u =Getmaxi(U,S,Price,r,VM,z)

temp=zeros(1,length(U));

total=VM*r*z';

for
i=1:length(U)

    if U(i)==0

       
temp(i)=Price(S(i))/total(i);

    end

end

   
[maxu,rows]=max(temp);

   
u=rows;

 

 

 




function S =GetmaxS(B,U,Price)

[a,b]=size(B);

p=zeros(1,b);

S=zeros(1,a);

for
i=1:length(U)

    if U(i)==0

       
for j=1:b

           
temp=B(i,j);

           
p(j)=Price(temp);

       
end

       
[my_max,rows]=max(p);

       
S(i)=B(i,rows);

    end

end

 

 




function R =GetR(VM,r)

[a,b]=size(r);

   
temp=VM*r;

   
[R,I]=max(temp);

    

 

function sumcz =GetSumcz(c,z)

sumcz=c*z';

end

 

function nrk =GetSumnr(VM,S,u,r,k)

nr=VM(S(u),:)*r;

nrk=nr(k);

 

 


 类似资料: