SQO 登陆流程

Zhi Gang Sun终于等着你了,哈哈  
问个DSW 登陆流程的问题啊  15:52:12
比方说SQO  15:52:19
从jump page上点的那个link应该是先到SQO了吧  15:53:32
还是直接先到webauth呢  15:53:47
Jing Yujump page先到sqo了  15:53:59
Zhi Gang Sun然后呢  15:54:17
Jing Yu然后你们就伪造了我们生成的cookie  15:54:34
Zhi Gang SunSQO我看就是servlet里调用你们的web service了么?  15:54:40
我只登陆的场景不是jump  15:55:03
Jing Yu哦,正常登录啊  15:55:17
Zhi Gang Sun  15:55:23
Jing Yu恩,先到sqo, servlet调用了webserice  15:55:38
Zhi Gang Sun再然后呢  15:55:48
Jing Yu再webservice里面我们发现木有cookie,就转到webauth url了  15:55:59
Zhi Gang Sun怎么就show了那个登陆界面了呢  15:56:01
Jing Yu就去登录了  15:56:02
Zhi Gang Sunwebauth url是SQO web.xml里的么?  15:56:33
Jing Yu  15:56:41
Zhi Gang Sun你们能读取到SQO web.xml里的内容?  15:56:58
http request里有这个?  15:57:22
<init-param>
<param-name>entitlementerrorpage</param-name>
<param-value>https://w3-117fvt.etl.ibm.com/software/sales/passportadvantage/telesales/iFrameEntitlementError</param-value>
</init-param>
<init-param>
<param-name>loginform</param-name>
<param-value>https://w3-117fvt.etl.ibm.com/software/sales/passportadvantage/telesales/iFrameLogin</param-value>
</init-param>
<init-param>
<param-name>gobackurl</param-name>
<param-value>https://w3-117fvt.etl.ibm.com/software/sales/passportadvantage/dswpricebook/PbCfgSales/quote.wss</param-value>
</init-param>
 
15:57:23
Jing Yu  15:57:27
Zhi Gang Sun那登陆界面的提交也是你们处理的,对吧  15:57:50
Jing Yu对呀  15:58:30
Zhi Gang Sun然后你们回到SQO哪个action呢?  15:59:09
Jing Yu哪儿来的回哪儿去. 来的时候,我们吧那个url存个cookie  16:00:18
==  16:00:29
错了  16:00:47
是gobackurl那个参数  16:01:03
存了个cookie  16:01:12
Zhi Gang Sun也是web.xml里的?  16:02:31
Jing Yu对,就刚你贴的那段里面  16:02:46
Zhi Gang Sun明白了  16:02:57
我还是有个地方没明白  16:05:38
就是那几个init-param咋就到http request里了呢  16:05:56
Jing Yu哈哈  16:06:13
不是  16:06:15
Zhi Gang Sun那你们是怎么样能读取到呢?  16:06:30
Jing Yu大概是这样的  16:06:42
16:07:00
init的时候吧servletconfig传过去了  16:07:21
Zhi Gang Sun哦,把这个config 传给你们了啊  16:07:22
Jing Yulaugh  16:07:45
Zhi Gang Sun这就解释通了  16:09:30
用servletconfig你们可以读取init param  16:09:50
Jing Yuyes  16:09:54
Zhi Gang Sun跳转到login form和回到SQO来  16:10:01
好,多谢多谢  16:10:05
Jing Yuno  16:10:32
Zhi Gang Sun回头你搞个文档summarize下多好  16:11:42
省的我问你了  16:11:46
Jing Yu哈哈,那我不就失业啦laughroll  16:12:08
Zhi Gang Sun这。。  16:15:34
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C#实现的SQO算法求解不等式约束二次规划的程序示例,包含了输入、求解以及输出部分: ```csharp using System; namespace SQOAlgorithm { class Program { static void Main(string[] args) { // 输入不等式约束二次规划的参数 int n = 3; // 变量个数 double[,] Q = { { 2, 0, 0 }, { 0, 3, 0 }, { 0, 0, 4 } }; // 二次项系数矩阵 double[] c = { -2, -3, -4 }; // 一次项系数向量 double[,] A = { { 1, 1, 0 }, { 1, 0, 1 }, { 0, 1, 1 } }; // 不等式约束系数矩阵 double[] b = { 1, 1, 1 }; // 不等式约束右端向量 // 求解不等式约束二次规划 double[] x = SQO(Q, c, A, b); // 输出最优解 Console.Write("最优解为:("); for (int i = 0; i < n - 1; i++) { Console.Write("{0:f4}, ", x[i]); } Console.Write("{0:f4})", x[n - 1]); Console.ReadLine(); } // SQO算法求解不等式约束二次规划 static double[] SQO(double[,] Q, double[] c, double[,] A, double[] b) { int n = c.Length; // 变量个数 int m = b.Length; // 不等式约束个数 int maxIter = 100; // 最大迭代次数 double eps = 1e-6; // 精度要求 // 初始化SQP算法的参数 double[] x = new double[n]; // 初始解 double[] lam = new double[m]; // 不等式约束的拉格朗日乘子 double mu = 1; // 步长 double rho = 0.5; // 步长缩放因子 double tau = 0.1; // 步长缩放因子 double sigma = 0.1; // 控制停止迭代的松弛因子 double[] S = new double[m]; // S向量 double[] grad = new double[n]; // 梯度向量 double[,] H = new double[n, n]; // Hessian矩阵 // 迭代优化过程 for (int k = 0; k < maxIter; k++) { // 计算Hessian矩阵和梯度向量 for (int i = 0; i < n; i++) { grad[i] = c[i]; for (int j = 0; j < n; j++) { grad[i] += Q[i, j] * x[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { H[i, j] = Q[i, j]; } } // 计算S向量 for (int i = 0; i < m; i++) { S[i] = 0; for (int j = 0; j < n; j++) { S[i] += A[i, j] * x[j]; } S[i] -= b[i]; } // 计算停止迭代的判据 double stop = 0; for (int i = 0; i < m; i++) { stop += Math.Max(0, S[i]) * Math.Max(lam[i], 0); } stop += sigma * Math.Abs(stop); // 如果停止迭代的判据小于精度要求,则停止迭代 if (stop < eps) { break; } // 更新拉格朗日乘子 for (int i = 0; i < m; i++) { if (S[i] > 0) { lam[i] += mu * S[i]; } } // 更新x的值 double[,] QL = new double[n, n]; double[] cL = new double[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { QL[i, j] = H[i, j]; } cL[i] = grad[i]; for (int j = 0; j < m; j++) { if (lam[j] > 0) { QL[i, i] += lam[j] * A[j, i] * A[j, i]; cL[i] += lam[j] * A[j, i] * S[j]; } } } double[] dx = QPSolver(QL, cL, A, b); // 计算步长 double alpha = 1; for (int i = 0; i < n; i++) { if (dx[i] < 0) { alpha = Math.Min(alpha, -x[i] / dx[i]); } } for (int i = 0; i < m; i++) { if (S[i] < 0) { alpha = Math.Min(alpha, -lam[i] / (S[i] - tau * lam[i])); } } // 更新x和mu的值 for (int i = 0; i < n; i++) { x[i] += alpha * dx[i]; } for (int i = 0; i < m; i++) { if (S[i] > 0) { lam[i] += alpha * mu * S[i]; } } mu *= rho; } return x; } // 二次规划求解器 static double[] QPSolver(double[,] Q, double[] c, double[,] A, double[] b) { int n = c.Length; // 变量个数 int m = b.Length; // 不等式约束个数 // 构造KKT矩阵 double[,] KKT = new double[n + m, n + m]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { KKT[i, j] = Q[i, j]; } KKT[i, i] += 1e-8; for (int j = 0; j < m; j++) { KKT[i, n + j] = A[j, i]; KKT[n + j, i] = A[j, i]; } } for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { KKT[n + i, n + j] = (i == j) ? 1e-8 : 0; } } // 构造右端向量 double[] rhs = new double[n + m]; for (int i = 0; i < n; i++) { rhs[i] = -c[i]; } for (int i = 0; i < m; i++) { rhs[n + i] = b[i]; } // 调用线性规划求解器求解KKT矩阵 double[] sol = LinearProgramming(KKT, rhs); // 返回x的值 double[] x = new double[n]; for (int i = 0; i < n; i++) { x[i] = sol[i]; } return x; } // 线性规划求解器 static double[] LinearProgramming(double[,] A, double[] b) { int m = b.Length; // 约束个数 int n = A.GetLength(1); // 变量个数 // 初始化单纯形表 double[,] simplexTable = new double[m + 1, n + m + 1]; for (int j = 0; j < n; j++) { simplexTable[0, j] = 0; for (int i = 0; i < m; i++) { simplexTable[i + 1, j] = A[i, j]; } } for (int i = 0; i < m; i++) { simplexTable[i + 1, n + i] = 1; } simplexTable[0, n] = -1; // 执行单纯形算法 while (true) { // 找到入基变量 int pivotCol = -1; for (int j = 0; j <= n + m; j++) { if (simplexTable[0, j] < 0) { pivotCol = j; break; } } if (pivotCol == -1) { break; // 单纯形算法结束 } // 找到出基变量 int pivotRow = -1; double minRatio = double.MaxValue; for (int i = 1; i <= m; i++) { if (simplexTable[i, pivotCol] > 0) { double ratio = simplexTable[i, n + m] / simplexTable[i, pivotCol]; if (ratio < minRatio) { minRatio = ratio; pivotRow = i; } } } if (pivotRow == -1) { throw new Exception("无界解"); // 问题无界 } // 进行行变换 double pivotValue = simplexTable[pivotRow, pivotCol]; for (int j = 0; j <= n + m; j++) { simplexTable[pivotRow, j] /= pivotValue; } for (int i = 0; i <= m; i++) { if (i != pivotRow) { double factor = simplexTable[i, pivotCol]; for (int j = 0; j <= n + m; j++) { simplexTable[i, j] -= factor * simplexTable[pivotRow, j]; } } } } // 构造解向量 double[] sol = new double[n]; for (int j = 0; j < n; j++) { int pivotRow = -1; for (int i = 1; i <= m; i++) { if (simplexTable[i, j] == 1) { if (pivotRow == -1) { pivotRow = i; } else { throw new Exception("多解"); // 问题有多个解 } } else if (simplexTable[i, j] != 0) { throw new Exception("无解"); // 问题无解 } } if (pivotRow != -1) { sol[j] = simplexTable[pivotRow, n + m]; } } return sol; } } } ``` 程序的输入部分为二次规划的参数,包括变量个数`n`、二次项系数矩阵`Q`、一次项系数向量`c`、不等式约束系数矩阵`A`和不等式约束右端向量`b`。程序的求解部分为SQO算法,包含了迭代优化过程、梯度和Hessian矩阵的计算、S向量的计算、停止迭代的判据的计算、拉格朗日乘子的更新、x向量的更新、步长的计算等步骤。程序的输出部分为最优解。 需要注意的是,程序中的QPSolver函数是一个二次规划求解器,采用了线性规划求解器来求解KKT矩阵。由于线性规划问题的求解是一个NP-hard问题,因此程序可能会在某些情况下运行时间较长,甚至可能无法求解。在实际应用中,可以考虑使用更加高效的二次规划求解器来优化程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值