/*得到了未划去的最小运价所在格的坐标(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++程序相关推荐

  1. linux写脚本实现作业检查,救大神帮忙调试linux系统上用qsub提交MS作业的脚本,万分感激!!! - 第一原理 - 小木虫 - 学术 科研 互动社区...

    在linux系统上已经安装好了MS8.0,也设定好了环境变量,可以直接用RunVASTEP.sh -np 24 job_name & 提交作业,但是不能分配节点,qstat也看不到作业.现在想 ...

  2. 船舶强度与结构设计大作业二matlab,华科船舶结构强度第二次大作业

    <华科船舶结构强度第二次大作业>由会员分享,可在线阅读,更多相关<华科船舶结构强度第二次大作业(6页珍藏版)>请在人人文库网上搜索. 1.船体强度与结构设计-第二次大作业班级: ...

  3. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab

    非线性方程的数值解法牛顿下山法matlab 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 130******** ● 题目: 用下列方法求0133=--=x x f(x)在 ...

  4. jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用...

    jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用 先用谷歌浏览器抓包,抓到的包类似这样: 在jmeter里添加一个http请求,配置好参数,方法,端口,路径等, 勾选 ...

  5. 目标层准则层MATLAB,层次分析法-MATLAB

    层次分析法-MATLAB 第八章 层次分析法 层次分析法(Analytic Hierarchy Process,简称AHP)是对一些较为复杂.较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全 ...

  6. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab.docx

    非线性方程的数值解法牛顿下山法matlab.docx 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 13020011006  题目: 用下列方法求 在 附近的根.根的准确 ...

  7. matlab 概述作业答案,Matlab作业答案

    <Matlab作业答案>由会员分享,可在线阅读,更多相关<Matlab作业答案(26页珍藏版)>请在金锄头文库上搜索. 1.控制系统的 MATLAB 仿真与设计 - 实验作业1 ...

  8. 优化设计-有约束复合型法-MATLAB编程求解

    优化设计-复合型法-MATLAB编程求解 优化设计-有约束复合型法-MATLAB编程求解 有约束复合型法迭代步骤(计算流程图) MATLAB主程序 约束条件判断子函数 运算结果与可行域 优化设计-有约 ...

  9. AHP层次分析法matlab实现

    AHP层次分析法的步骤和matlab实现方法 AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案 ...

最新文章

  1. 机器学习中的各种距离
  2. android java.nio.charset.MalformedInputException: Input length = 1
  3. Dell服务器常用管理命令总结
  4. Less 文档查看心得
  5. ubuntu 之 查看 cuda,cudnn版本
  6. 获取指定个数指定范围的随机数
  7. streamsets 集成 minio s3测试
  8. 比特币钱包私钥_如何通过私钥创建比特币钱包地址
  9. 2021年南宁二中高考成绩查询,2021广西高考圆满结束,6月23日可查询成绩
  10. mysql自动更新时间的触发器
  11. [Ubuntu] 文件权限
  12. Selenium处理Select控件
  13. 漫画 | 强化学习这都学不会的话,咳咳,你过来下!
  14. 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后打不开屏幕怎么办
  15. ccs中c语言定义布尔常量,ccs库里面有变量的定义,我在添加了头文件后编译显示没有定义变量呢...
  16. 天玑1300和骁龙778plus哪个好
  17. 计算机网络分代核心的属性,计算机网络开发专业核心能力题库-操作
  18. 2023年好用的MacBook文件管理软件推荐
  19. 扛把子级别的Java开源后台管理系统
  20. canvas loadImage图片加载

热门文章

  1. ASM - 条件判断
  2. 解决ArcMap启动时只停留在初始化界面的方法
  3. Mongodb异常关闭重启失败解决
  4. 使用控件时提示“未声明标识符“的解决方法
  5. R 报错:package ‘***’ is not available (for R version ****) 的解决方案
  6. zookeeper 启动显示started,jps查看进程却没有,解决方法
  7. Python日期字符串到日期对象
  8. PEAR安装、管理及使用
  9. 解决eureka注册时使用ip而不是hostname
  10. 那些重金投入区块链的互联网巨头,现在怎样了?|BCCon