Main函数的字符串参数

别闹了费曼sir 2016-03-22 05:03:04

// --------------------------------------------------------------------------
// File: LPex1.cs
// Version 12.6
// --------------------------------------------------------------------------
// Licensed Materials - Property of IBM
// 5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
// Copyright IBM Corporation 2003, 2013. All Rights Reserved.
//
// US Government Users Restricted Rights - Use, duplication or
// disclosure restricted by GSA ADP Schedule Contract with
// IBM Corp.
// --------------------------------------------------------------------------
//
// LPex1.cs - Entering and optimizing an LP problem
//
// Demonstrates different methods for creating a problem. The user has to
// choose the method on the command line:
//
// LPex1 -r generates the problem by adding constraints
// LPex1 -c generates the problem by adding variables
// LPex1 -n generates the problem by adding expressions
//

using ILOG.Concert;
using ILOG.CPLEX;


public class LPex1 {
internal static void Usage() {
System.Console.WriteLine("usage: LPex1 <option>");
System.Console.WriteLine("options: -r build model row by row");
System.Console.WriteLine("options: -c build model column by column");
System.Console.WriteLine("options: -n build model nonzero by nonzero");
System.Console.ReadKey();
}

public static void Main(string[] args) {
if ( args.Length != 1 || args[0].ToCharArray()[0] != '-' ) {
Usage();
return;
}

try {
// Create the modeler/solver object
Cplex cplex = new Cplex();

INumVar[][] var = new INumVar[1][];
IRange[][] rng = new IRange[1][];

// Evaluate command line option and call appropriate populate method.
// The created ranges and variables are returned as element 0 of arrays
// var and rng.
switch ( args[0].ToCharArray()[1] ) {
case 'r': PopulateByRow(cplex, var, rng);
break;
case 'c': PopulateByColumn(cplex, var, rng);
break;
case 'n': PopulateByNonzero(cplex, var, rng);
break;
default: Usage();
return;
}

// write model to file
cplex.ExportModel("lpex1.lp");

// solve the model and display the solution if one was found
if ( cplex.Solve() ) {
double[] x = cplex.GetValues(var[0]);
double[] dj = cplex.GetReducedCosts(var[0]);
double[] pi = cplex.GetDuals(rng[0]);
double[] slack = cplex.GetSlacks(rng[0]);

cplex.Output().WriteLine("Solution status = " + cplex.GetStatus());
cplex.Output().WriteLine("Solution value = " + cplex.ObjValue);

int nvars = x.Length;
for (int j = 0; j < nvars; ++j) {
cplex.Output().WriteLine("Variable " + j +
": Value = " + x[j] +
" Reduced cost = " + dj[j]);
}

int ncons = slack.Length;
for (int i = 0; i < ncons; ++i) {
cplex.Output().WriteLine("Constraint " + i +
": Slack = " + slack[i] +
" Pi = " + pi[i]);
}
}
cplex.End();
}
catch (ILOG.Concert.Exception e) {
System.Console.WriteLine("Concert exception '" + e + "' caught");
}
}


// The following methods all populate the problem with data for the following
// linear program:
//
// Maximize
// x1 + 2 x2 + 3 x3
// Subject To
// - x1 + x2 + x3 <= 20
// x1 - 3 x2 + x3 <= 30
// Bounds
// 0 <= x1 <= 40
// End
//
// using the IMPModeler API

internal static void PopulateByRow(IMPModeler model,
INumVar[][] var,
IRange[][] rng) {
double[] lb = {0.0, 0.0, 0.0};
double[] ub = {40.0, System.Double.MaxValue, System.Double.MaxValue};
string[] varname = {"x1", "x2", "x3"};
INumVar[] x = model.NumVarArray(3, lb, ub, varname);
var[0] = x;

double[] objvals = {1.0, 2.0, 3.0};
model.AddMaximize(model.ScalProd(x, objvals));

rng[0] = new IRange[2];
rng[0][0] = model.AddLe(model.Sum(model.Prod(-1.0, x[0]),
model.Prod( 1.0, x[1]),
model.Prod( 1.0, x[2])), 20.0, "c1");
rng[0][1] = model.AddLe(model.Sum(model.Prod( 1.0, x[0]),
model.Prod(-3.0, x[1]),
model.Prod( 1.0, x[2])), 30.0, "c2");
}

internal static void PopulateByColumn(IMPModeler model,
INumVar[][] var,
IRange[][] rng) {
IObjective obj = model.AddMaximize();

rng[0] = new IRange[2];
rng[0][0] = model.AddRange(-System.Double.MaxValue, 20.0, "c1");
rng[0][1] = model.AddRange(-System.Double.MaxValue, 30.0, "c2");

IRange r0 = rng[0][0];
IRange r1 = rng[0][1];

var[0] = new INumVar[3];
var[0][0] = model.NumVar(model.Column(obj, 1.0).And(
model.Column(r0, -1.0).And(
model.Column(r1, 1.0))),
0.0, 40.0, "x1");
var[0][1] = model.NumVar(model.Column(obj, 2.0).And(
model.Column(r0, 1.0).And(
model.Column(r1, -3.0))),
0.0, System.Double.MaxValue, "x2");
var[0][2] = model.NumVar(model.Column(obj, 3.0).And(
model.Column(r0, 1.0).And(
model.Column(r1, 1.0))),
0.0, System.Double.MaxValue, "x3");
}

internal static void PopulateByNonzero(IMPModeler model,
INumVar[][] var,
IRange[][] rng) {
double[] lb = {0.0, 0.0, 0.0};
double[] ub = {40.0, System.Double.MaxValue, System.Double.MaxValue};
INumVar[] x = model.NumVarArray(3, lb, ub);
var[0] = x;

double[] objvals = {1.0, 2.0, 3.0};
model.Add(model.Maximize(model.ScalProd(x, objvals)));

rng[0] = new IRange[2];
rng[0][0] = model.AddRange(-System.Double.MaxValue, 20.0);
rng[0][1] = model.AddRange(-System.Double.MaxValue, 30.0);

rng[0][0].Expr = model.Sum(model.Prod(-1.0, x[0]),
model.Prod( 1.0, x[1]),
model.Prod( 1.0, x[2]));
rng[0][1].Expr = model.Sum(model.Prod( 1.0, x[0]),
model.Prod(-3.0, x[1]),
model.Prod( 1.0, x[2]));
x[0].Name = "x1";
x[1].Name = "x2";
x[2].Name = "x3";

rng[0][0].Name = "c1";
rng[0][0].Name = "c2";
}
}

问题背景:IBM公司cplex求解器例子的代码

问题:main函数中的string[] args参数未在任何地方赋值,那运行的时候就只能进入下面的函数,然后return,就结束了没有执行下面建模的代码

思考:这些代码是一个.cs文件,是不是用其他方式运行的时候,string[] args参数是可以输入的,然后通过输入的参数选择不同的方法建模
...全文
218 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
haxianhe 2016-03-23
  • 打赏
  • 举报
回复
方法一:项目->属性->调试->命令行参数输入参数 这个方法比较适合调程序时使用 方法二:运行->cmd->转到程序所在路径->程序名.exe 参数->回车
john_QQ:2335298917 2016-03-23
  • 打赏
  • 举报
回复
引用 8 楼 finish_dream 的回复:
方法一:项目->属性->调试->命令行参数输入参数 这个方法比较适合调程序时使用 方法二:运行->cmd->转到程序所在路径->程序名.exe 参数->回车
顶一下,这就是个命令行参数的问题
别闹了费曼sir 2016-03-22
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
快捷方式那里可以改 然后在cmd里面也可以运行
具体怎么运行呢? 一楼的方法可行:菜单[项目] -> 属性页 -> 配置属性 -> 调试 在[命令行参数]里填上即可 快捷方式和cmd如何运行?
别闹了费曼sir 2016-03-22
  • 打赏
  • 举报
回复
引用 3 楼 dongxinxi 的回复:
ping命令知道吧,其实运行的是ping.exe 命令行传参 ping -n 2 ip地址一样的道理
ping命令不太熟悉,具体怎么运行呢?除了一楼的方法(菜单[项目] -> 属性页 -> 配置属性 -> 调试 在[命令行参数]里填上即可)
xuzuning 2016-03-22
  • 打赏
  • 举报
回复
开始 -- 运行 输入框填入 LPex1 -r
  • 打赏
  • 举报
回复
ping命令知道吧,其实运行的是ping.exe 命令行传参 ping -n 2 ip地址一样的道理
  • 打赏
  • 举报
回复
快捷方式那里可以改 然后在cmd里面也可以运行
xuzuning 2016-03-22
  • 打赏
  • 举报
回复
args 是命令行参数 LPex1 -r generates the problem by adding constraints LPex1 -c generates the problem by adding variables LPex1 -n generates the problem by adding expressions
xdashewan 2016-03-22
  • 打赏
  • 举报
回复
请看http://blog.csdn.net/yihaizhiyan/article/details/37659645

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧