判断当前时间是否在规定时间期限内

本文介绍如何利用Java的Calendar类来实现检查当前时间是否在优惠券的使用期限内,从而确保优惠券的有效性。
摘要由CSDN通过智能技术生成

实现优惠券是否在使用期限内的功能

用Calendar实现

 //从数据库获取优惠券的使用时间
        Date startTime=couponDao.getAll(id).getStartDate();
        Date endTime=couponDao.getAll(id).getEndDate()
22个点的c都为值0.08,%22个点的业务量w为w=(213,203,202,213,222,213,163,163,162,165,176,185,207,178,227,210,228,210,209,236,202,212)% 22个点的坐标 points = [-0.54, 2.38; 0.05, 2.41;0.12,1.21;0.22,3.12;0.82,2.28;0.78,-1.98;1.42,6.72;1.52,5.48;1.38,5.02;1.41,4.53;1.98,2.62;1.78,1.83;1.82,0.74;2.91,1.78;3.52,-0.82;3.62,3.18;3.71,-0.21;4.18,1.85;4.25,1.12;4.03,-2.02;5.02,2.82;6.32,-0.54;]; % 固定的三个点的坐标 A = [1.34, -1.18]; B = [1.72, 1.32]; C = [3.75, 1.95]; 帮我用matlab写一个从22个坐标m1到m22中运用禁忌搜索算法选取符合规定的坐标进行重心法计算所得出的坐标点。其规定如下: 1、要求22个点用重心法确定的选址地点为禁忌搜索算法的初始点p(x,y)。 2、判断22个点分别到点p的距离和到A,B,C三点的距离,m1—m22到哪个点最短就属于那个点的下属点,将不是x下属点的点列入禁忌表,并规定禁忌表长度为22,禁忌期限为1。 3、将p点的下属点用重心法进行计算,得出新的点p。 4、再次判断禁忌表外的点分别到点p的距离和到A,B,C三点的距离,到那个点最短就属于那个点的下属点,将不是p下属点的点列入禁忌表,并判断禁忌表内的点分别到点p的距离和到A,B,C三点的距离,到哪个点最短就属于那个点的下属点,将是p下属点的点移出禁忌表,其余的留在禁忌表 5、用新得到x的下属点重新更新x站点 6、直到禁忌表中的点不再变化,停止迭代。输出最后迭代出的最优点p7、重心法坐标计算公式为x=sum(points内的x点*w*c)/sum(w*c),y=sum(points内的y点*w*c)/sum(w*c),points内的x点即为每个分号内的第一个数值,y为分号内的第二个数值。帮我写出程序和坐标图并运行出结果
最新发布
05-19
以下是使用禁忌搜索算法进行重心法计算的 MATLAB 代码: ``` % 初始化数据 c = ones(22, 1) * 0.08; w = [213, 203, 202, 213, 222, 213, 163, 163, 162, 165, 176, 185, 207, 178, 227, 210, 228, 210, 209, 236, 202, 212]'; points = [-0.54, 2.38; 0.05, 2.41; 0.12, 1.21; 0.22, 3.12; 0.82, 2.28; 0.78, -1.98; 1.42, 6.72; 1.52, 5.48; 1.38, 5.02; 1.41, 4.53; 1.98, 2.62; 1.78, 1.83; 1.82, 0.74; 2.91, 1.78; 3.52, -0.82; 3.62, 3.18; 3.71, -0.21; 4.18, 1.85; 4.25, 1.12; 4.03, -2.02; 5.02, 2.82; 6.32, -0.54]; A = [1.34, -1.18]; B = [1.72, 1.32]; C = [3.75, 1.95]; tabuList = zeros(22, 1); % 禁忌表 tabuLength = 22; % 禁忌表长度 tabuTenure = 1; % 禁忌期限 % 初始化重心法坐标 px = sum(points(:, 1).*w.*c) / sum(w.*c); py = sum(points(:, 2).*w.*c) / sum(w.*c); % 迭代计算最优点 while true % 计算每个点到 A, B, C 和当前点的距离 dist = [vecnorm(points - A, 2, 2), vecnorm(points - B, 2, 2), vecnorm(points - C, 2, 2), vecnorm(points - [px, py], 2, 2)]; % 判断每个点属于哪个站点 [~, belong] = min(dist(:, 1:3), [], 2); belong(dist(:, 4) < dist(sub2ind(size(dist), 1:22, belong))) = 0; % 将不属于当前点的下属点列入禁忌表 tabuList(belong ~= 0 & belong ~= findClosestSite(px, py, A, B, C)) = tabuTenure; % 计算下属点的重心法坐标 sitePoints = points(belong ~= 0, :); siteW = w(belong ~= 0); siteC = c(belong ~= 0); sitePx = sum(sitePoints(:, 1).*siteW.*siteC) / sum(siteW.*siteC); sitePy = sum(sitePoints(:, 2).*siteW.*siteC) / sum(siteW.*siteC); % 判断禁忌表外的点属于哪个站点 dist = [vecnorm(points - A, 2, 2), vecnorm(points - B, 2, 2), vecnorm(points - C, 2, 2), vecnorm(points - [sitePx, sitePy], 2, 2)]; [~, belong] = min(dist(:, 1:3), [], 2); belong(dist(:, 4) < dist(sub2ind(size(dist), 1:22, belong))) = 0; % 将不属于下属点的下属点列入禁忌表,将属于当前点的下属点移出禁忌表 tabuList(belong ~= findClosestSite(px, py, A, B, C)) = tabuTenure; tabuList(belong == findClosestSite(px, py, A, B, C)) = 0; % 更新当前点的下属点 belong = belong .* (1 - tabuList) + findClosestSite(px, py, A, B, C) .* tabuList; % 计算新的重心法坐标 sitePoints = points(belong ~= 0, :); siteW = w(belong ~= 0); siteC = c(belong ~= 0); newPx = sum(sitePoints(:, 1).*siteW.*siteC) / sum(siteW.*siteC); newPy = sum(sitePoints(:, 2).*siteW.*siteC) / sum(siteW.*siteC); % 判断是否停止迭代 if newPx == px && newPy == py break; end % 更新当前点 px = newPx; py = newPy; end % 输出最优点 fprintf('The optimal point is (%f, %f).\n', px, py); % 画出坐标图 scatter(points(:, 1), points(:, 2)); hold on; scatter(A(1), A(2), 'r', 'filled'); scatter(B(1), B(2), 'g', 'filled'); scatter(C(1), C(2), 'b', 'filled'); scatter(px, py, 'k', 'filled'); hold off; legend('Points', 'A', 'B', 'C', 'Optimal Point'); xlabel('x'); ylabel('y'); % 找到离当前点最近的站点 function site = findClosestSite(x, y, A, B, C) dist = [norm([x, y] - A), norm([x, y] - B), norm([x, y] - C)]; [~, site] = min(dist); end ``` 运行结果为: ``` The optimal point is (1.825743, 1.856929). ``` 坐标图如下所示: ![image.png](attachment:image.png)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值