gusucode.com > 《matlab在数学建模中的应用》一书 所有的 源代码 > 第10章/P10-1/cpiao.m

    function f=cpiao(rx,type,p_test,a_lb,b_ub)
% type代表当前求解的彩票类型
% p_test是当前各奖项概率(当前彩票类型,当前m、n)
% a_lb,b_ub在本函数中用不到
% 注意:这里的目标函数是原目标函数乘以 -1;

global v
if (type == 1)
	% 这是K1型的
	rx_last3=rx(4:6);
	p_last3=p_test(4:6);
	p_last3=p_last3';
	sum_last3=p_last3*rx_last3;
	f= ...
	-(  p_test(1).*(1-exp(-(((1-sum_last3).*rx(1))./p_test(1)./v).^2))+...
		p_test(2).*(1-exp(-(((1-sum_last3).*rx(2))./p_test(2)./v).^2))+...
		p_test(3).*(1-exp(-(((1-sum_last3).*rx(3))./p_test(3)./v).^2))+...
		p_test(4).*(1-exp(-(rx(4)./v).^2))+...
		p_test(5).*(1-exp(-(rx(5)./v).^2))+...
		p_test(6).*(1-exp(-(rx(6)./v).^2)) ...
	 );
elseif (type == 2) || (type == 3)
	% 这是K2和K3的(K2、K3可合并处理,因奖项数目一样)
	rx_last4=rx(4:7);
	p_last4=p_test(4:7);
	p_last4=p_last4';
	sum_last4=p_last4*rx_last4;
	f= ...
	-(  p_test(1).*(1-exp(-(((1-sum_last4).*rx(1))./p_test(1)./v).^2))+...
		p_test(2).*(1-exp(-(((1-sum_last4).*rx(2))./p_test(2)./v).^2))+...
		p_test(3).*(1-exp(-(((1-sum_last4).*rx(3))./p_test(3)./v).^2))+...
		p_test(4).*(1-exp(-(rx(4)./v).^2))+...
		p_test(5).*(1-exp(-(rx(5)./v).^2))+...
		p_test(6).*(1-exp(-(rx(6)./v).^2))+...
		p_test(7).*(1-exp(-(rx(7)./v).^2)) ...
	 );
elseif (type == 4)
	% K4型
	rx_last2=rx(4:5);
	p_last2=p_test(4:5);
	p_last2=p_last2';
	sum_last2=p_last2 * rx_last2;
	f= ...
	-(  p_test(1).*(1-exp(-(((1-sum_last2).*rx(1))./p_test(1)./v).^2))+...
		p_test(2).*(1-exp(-(((1-sum_last2).*rx(2))./p_test(2)./v).^2))+...
		p_test(3).*(1-exp(-(((1-sum_last2).*rx(3))./p_test(3)./v).^2))+...
		p_test(4).*(1-exp(-(rx(4)./v).^2))+...
		p_test(5).*(1-exp(-(rx(5)./v).^2)) ...
	 );
else
	error('Error in function cpiao!')
end