表上作业法matlab实现,高人帮忙改改,有关表上作业法的C++程序
/*得到了未划去的最小运价所在格的坐标(I0,J0)和最小运价Cmin */
if(k>0)
{if(Cmin==1.0e15&&cpi(k-1)==0)
{for(l1=0;l1
if(x(l1,cpj(k-1))==1.0e15)
{x(l1,cpj(k-1))=0;
}
}
else if(Cmin==1.0e15&&cpi(k-1)!=0)
{for(l1=0;l1
if(x(cpi(k-1),l1)==1.0e15)
{x(cpi(k-1),l1)=0;
}
}
}
if(b(I0)
{
cpi(k)=I0;cpj(k)=-1;
x(I0,J0)=b(I0);
#ifdef debug
printf("I0=%d,J0=%d,x(I0,J0)=%8.4f,k=%d,cpi(k)=%d,cpj(k)=%d\n",I0,J0,x(I0,J0),k,cpi(k),cpj(k));
#endif
a(J0)-=b(I0);
b(I0)=0;
}
else
{
cpi(k)=-1;cpj(k)=J0;
x(I0,J0)=a(J0);
#ifdef debug
printf("I0=%d,J0=%d,x(I0,J0)=%8.4f,k=%d,cpi(k)=%d,cpj(k)=%d\n",I0,J0,x(I0,J0),k,cpi(k),cpj(k));
#endif
b(I0)-=a(J0);
a(J0)=0;
}
} /*END FOR K 用最小元素法求得了初使可行解*/
/*输出初始可行解*/
printf("\n=============init Solution===================\n");
sum=0;
for(i=0;i
{
for(j=0;j
{
if(x(i,j)>=1.0e15)
printf("%10s","******");
else
{printf("%10.3f",x(i,j));
sum+=(x(i,j)*c(i,j));
}
}
printf("\n");
}
printf("\n\n\tThe Cost is: %-10.4f\n",sum);
getch();
/***************循环换入换出,直到检验数为非负数*****************************/
/*循环决定换入变量 */
while(1)
{
/*位势置初值Ui,Vi=1.0e15 */
for(i=0;i
u(i)=1.0e15;
for(j=0;j
v(j)=1.0e15;
/*求位势*/
l=0;u(0)=0;
for(i=0;i
{
for(j=0;j
{
if(u(i)>=1.0e15&&v(j)>=1.0e15&&x(i,j)<1.0e15)
{
cpi(l)=i;cpj(l)=j;l++; /*记录未求过位势的位置*/
}
else if(x(i,j)<1.0e15&&u(i)<1.0e15)
{v(j)=c(i,j)-u(i);}
else if(x(i,j)<1.0e15&&v(j)<1.0e15)
{u(i)=c(i,j)-v(j);}
}/*end for j */
}/*end for i */
/*按记录位置求其余位势*/
if(l>0)
{
while(1)
{
ip=0;
for(k=0;k
{
i=cpi(k);j=cpj(k);
if((u(i)>=1.0e15)&&(v(j)>=1.0e15)&&(x(i,j)<1.0e15))
{
cpi(ip)=i;cpj(ip)=j;ip++; /*记录未求过位势的位置*/
}
else if(x(i,j)<1.0e15&&u(i)<1.0e15)
{v(j)=c(i,j)-u(i);}
else if(x(i,j)<1.0e15&&v(j)<1.0e15)
{u(i)=c(i,j)-v(j);}
}/*end for k */
if(ip==0)break;
l=ip;
}/*end for while */
} /*end if l */
#ifdef debug
printf("\nU(i):");
for(i=0;i
{printf("%10.2f",u(i));
}
printf("\nV(j):");
for(j=0;j
{printf("%10.2f",v(j));
}
printf("\n");
#endif
/*求检验数*/
for(i=0;i
{
for(j=0;j
{ s(i,j)=1.0e15;
if(x(i,j)>=1.0e15) s(i,j)=c(i,j)-u(i)-v(j);
}
}
/*求最小检验数*/
Cmin=1.0e15;
for(i=0;i
{
for(j=0;j
{
if(Cmin>s(i,j))
{Cmin=s(i,j);I0=i;J0=j;}
}
}
#ifdef debug
printf("\ncheck number:\n");
for(i=0;i
{
for(j=0;j
{
printf("s(%d,%d)=%-10.2f\n",i,j,s(i,j));
}
printf("\n");
}
printf("Smin=%-10.2f",Cmin);
getch();
#endif
if(Cmin>=0) return; /*已经得到最优解,返回主程序*/
/*此时找到了入基变量X(I0,J0) */
/*求闭回路*/
for(k=0;k
{
cpf(k)=-1;
}/*end for k */
cpi(0)=I0;cpj(0)=J0;
k=0;
while(1)
{
f=cpf(k);
/*设置闭回路搜索方向*/
while(1)
{
i=cpi(k);j=cpj(k);
fc=0;
f++;
cpf(k)=f;
if(f>=4)break;
/*避免反向搜索*/
if(k>0)
{
if(f==0&&cpf(k-1)==2) continue;
else if(f==1&&cpf(k-1)==3)continue;
else if(f==2&&cpf(k-1)==0)continue;
else if(f==3&&cpf(k-1)==1)continue;
}
if(f==0)
{/*沿J+方向搜索*/
while(1)
{
j++;
if(j>=n){fc=2;break;}
if((i==I0)&&(j==J0))
{fc=1;break;}
if(s(i,j)>=1.0e15)
{fc=3;break;}
}
}/*end j+ */
else if(f==1)
{ /*沿i-方向搜索*/
while(1)
{ i--;
if(i<0){fc=2;break;}
if((i==I0)&&(j==J0)){fc=1;break;}
if(s(i,j)>=1.0e15){fc=3;break;}
}
}/*end if=1 */
else if(f==2)
{/*沿J-方向搜索*/
while(1)
{
j--;
if(j<0){fc=2;break;}
if((i==I0)&&(j==J0)){fc=1;break;}
if(s(i,j)>=1.0e15){fc=3;break;}
}
} /*end f==2 */
else if(f==3)
{/*沿I+方向搜索*/
while(1)
{
i++;
if(i>=m){fc=2;break;}
if((i==I0)&&(j==J0)){fc=1;break;}
if(s(i,j)>=1.0e15){fc=3;break;}
}
}/*end f==3 */
if((fc==1)||(fc==3))break;
}/*end while flag 2 */
if(fc==0)
{/*沿些方向搜索失败,退回回到前一点*/
k--;
}
else if(fc==1)break; /*搜索完成*/
else if(fc==3)
{/*沿此方向搜索成功,前进一点*/
k++;
cpi(k)=i;cpj(k)=j;
#ifdef debug
printf("\n");
printf("k=%d,cpi(k)=%d,cpj(k)=%d,cpf(k)=%d,x(i,j)=%8.4f\n",k,cpi(k),cpj(k),cpf(k),x(cpi(k),cpj(k)));
getch();
#endif
cpf(k)=-1;
}
}/*end while */
/*去除闭回路中的非转折点*/
l=0;
while(l
{ i=l+1;
while(i<=k)
{if(cpf(l)==cpf(i)) i++;
else break;
}
if(i>(l+1))
{j=l+1;
k1=k-(i-j);
/*如果某些点前进方向相同,则去除中间各点*/
while(i<=k)
{cpi(j)=cpi(i);
cpj(j)=cpj(i);
cpf(j)=cpf(i);
i++;j++;
}
l+=2;
k=k1;
}
else l++;
}/*end while l
/*查找闭回路上基本解的最小值*/
Cmin=x(cpi(1),cpj(1));
Imin=cpi(1);Jmin=cpj(1);
for(i=3;i<=k;i+=2)
{if(Cmin>x(cpi(i),cpj(i)))
{Cmin=x(cpi(i),cpj(i));
Imin=cpi(i);Jmin=cpj(i);
}
}
/*换入基变量*/
x(I0,J0)=Cmin;
for(i=1;i<=k;i+=2)
{x(cpi(i),cpj(i))-=Cmin;
if((i+1)<=k) x(cpi(i+1),cpj(i+1))+=Cmin;
}
x(Imin,Jmin)=1.0e15;
}
free(CP);
free(V);
free(U);
free(S);
QUIT: return;
}
表上作业法matlab实现,高人帮忙改改,有关表上作业法的C++程序相关推荐
- linux写脚本实现作业检查,救大神帮忙调试linux系统上用qsub提交MS作业的脚本,万分感激!!! - 第一原理 - 小木虫 - 学术 科研 互动社区...
在linux系统上已经安装好了MS8.0,也设定好了环境变量,可以直接用RunVASTEP.sh -np 24 job_name & 提交作业,但是不能分配节点,qstat也看不到作业.现在想 ...
- 船舶强度与结构设计大作业二matlab,华科船舶结构强度第二次大作业
<华科船舶结构强度第二次大作业>由会员分享,可在线阅读,更多相关<华科船舶结构强度第二次大作业(6页珍藏版)>请在人人文库网上搜索. 1.船体强度与结构设计-第二次大作业班级: ...
- matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab
非线性方程的数值解法牛顿下山法matlab 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 130******** ● 题目: 用下列方法求0133=--=x x f(x)在 ...
- jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用...
jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用 先用谷歌浏览器抓包,抓到的包类似这样: 在jmeter里添加一个http请求,配置好参数,方法,端口,路径等, 勾选 ...
- 目标层准则层MATLAB,层次分析法-MATLAB
层次分析法-MATLAB 第八章 层次分析法 层次分析法(Analytic Hierarchy Process,简称AHP)是对一些较为复杂.较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全 ...
- matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab.docx
非线性方程的数值解法牛顿下山法matlab.docx 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 13020011006 题目: 用下列方法求 在 附近的根.根的准确 ...
- matlab 概述作业答案,Matlab作业答案
<Matlab作业答案>由会员分享,可在线阅读,更多相关<Matlab作业答案(26页珍藏版)>请在金锄头文库上搜索. 1.控制系统的 MATLAB 仿真与设计 - 实验作业1 ...
- 优化设计-有约束复合型法-MATLAB编程求解
优化设计-复合型法-MATLAB编程求解 优化设计-有约束复合型法-MATLAB编程求解 有约束复合型法迭代步骤(计算流程图) MATLAB主程序 约束条件判断子函数 运算结果与可行域 优化设计-有约 ...
- AHP层次分析法matlab实现
AHP层次分析法的步骤和matlab实现方法 AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案 ...
最新文章
- 机器学习中的各种距离
- android java.nio.charset.MalformedInputException: Input length = 1
- Dell服务器常用管理命令总结
- Less 文档查看心得
- ubuntu 之 查看 cuda,cudnn版本
- 获取指定个数指定范围的随机数
- streamsets 集成 minio s3测试
- 比特币钱包私钥_如何通过私钥创建比特币钱包地址
- 2021年南宁二中高考成绩查询,2021广西高考圆满结束,6月23日可查询成绩
- mysql自动更新时间的触发器
- [Ubuntu] 文件权限
- Selenium处理Select控件
- 漫画 | 强化学习这都学不会的话,咳咳,你过来下!
- 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后打不开屏幕怎么办
- ccs中c语言定义布尔常量,ccs库里面有变量的定义,我在添加了头文件后编译显示没有定义变量呢...
- 天玑1300和骁龙778plus哪个好
- 计算机网络分代核心的属性,计算机网络开发专业核心能力题库-操作
- 2023年好用的MacBook文件管理软件推荐
- 扛把子级别的Java开源后台管理系统
- canvas loadImage图片加载
热门文章
- ASM - 条件判断
- 解决ArcMap启动时只停留在初始化界面的方法
- Mongodb异常关闭重启失败解决
- 使用控件时提示“未声明标识符“的解决方法
- R 报错:package ‘***’ is not available (for R version ****) 的解决方案
- zookeeper 启动显示started,jps查看进程却没有,解决方法
- Python日期字符串到日期对象
- PEAR安装、管理及使用
- 解决eureka注册时使用ip而不是hostname
- 那些重金投入区块链的互联网巨头,现在怎样了?|BCCon