<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://optimization.cbe.cornell.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wc593</id>
	<title>Cornell University Computational Optimization Open Textbook - Optimization Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://optimization.cbe.cornell.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wc593"/>
	<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Special:Contributions/Wc593"/>
	<updated>2026-05-04T22:08:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7749</id>
		<title>2024 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7749"/>
		<updated>2024-12-17T22:33:03Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Differential evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Computational complexity]] ==&lt;br /&gt;
*References were not provided to support applications on computer science and quantum computing.&lt;br /&gt;
&lt;br /&gt;
== [[Heuristic algorithms]] ==&lt;br /&gt;
*Adding more details to the Application Section is recommended.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
*Avoid using contraction (e.g., there&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Local branching]] ==&lt;br /&gt;
*The title should be “Problem Solution” instead of ”Problem Resolution“.&lt;br /&gt;
*The added figure is too small for viewing from the main page and also lacks captions and explanations.&lt;br /&gt;
*There are still some formatting issues with the subtitles. For example, some are in bold form while others are not in the content.&lt;br /&gt;
&lt;br /&gt;
== [[Trust-region methods]] ==&lt;br /&gt;
*Please label the figures with numbers and direct readers to the figures in text.&lt;br /&gt;
*References were not well formatted (e.g., Yuan, Y. (2015b)).&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic programming]] ==&lt;br /&gt;
*An inappropriate nonconvex example was used in the Wiki Page. The problem is an MIQP problem instead of a single QP problem.&lt;br /&gt;
*Some symbols used in the pseudocodes still lack explanation.&lt;br /&gt;
&lt;br /&gt;
== [[Subgradient optimization]] ==&lt;br /&gt;
*References were not well formatted.&lt;br /&gt;
*Symbols used in equations lack explanations.&lt;br /&gt;
*The application section was not well drafted and supported by references.&lt;br /&gt;
&lt;br /&gt;
== [[Dynamic optimization]] ==&lt;br /&gt;
*For the algorithm description, it would be better to have a pseudocode or a flow chart to summarize it.&lt;br /&gt;
*Please use Latex equation editor for equations.&lt;br /&gt;
*Please number and label all figures and tables, use FigureX, TableX as a reference in the text.&lt;br /&gt;
*Please place references after the period at the end of each sentence and avoid after the optimization problems. This goes for all the sections in the wiki.&lt;br /&gt;
 &lt;br /&gt;
== [[Nondifferentiable Optimization]] ==&lt;br /&gt;
*Most contents are from previous year. The Wiki page should be your original content.&lt;br /&gt;
*It is also recommended to revise the citation format based on our example files.&lt;br /&gt;
*Please add the case of non convex functions.&lt;br /&gt;
*Please add references to support the content in the Introduction section. In-text citations are required.&lt;br /&gt;
*Please use Latex equation editor for typing symbols and equations.&lt;br /&gt;
*The Numerical Example section is incomplete.&lt;br /&gt;
*Application and Conclusion sections are missing.&lt;br /&gt;
&lt;br /&gt;
== [[Evolutionary multimodal optimization]] ==&lt;br /&gt;
*Please include more citations in Algorithm Discussion section to support the contents.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
&lt;br /&gt;
== [[Stackelberg leadership model]] ==&lt;br /&gt;
*Please use flowchart/pseudocode for representing the steps of algorithm&lt;br /&gt;
*Check the consistency of abbreviations (e.g. what is PAWS?)&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic constrained quadratic programming]] ==&lt;br /&gt;
*Form of in-text citation is not proper&lt;br /&gt;
*Abbreviations should be introduced only once throughout all sections (e.g., QCQP, QP, SDP)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Derivative free optimization]] ==&lt;br /&gt;
*Please try to include a flowchart or pseudocode for illustration of the algorithm.&lt;br /&gt;
*If DFO is defined in the previous sections, please use such abbreviations consistently (same for other abbreviations).&lt;br /&gt;
&lt;br /&gt;
== [[Signomial problems]] ==&lt;br /&gt;
*There is a lack of numerical examples for illustrating the global optimization method introduced on the Wiki page.&lt;br /&gt;
*The clarification of the equations used in the Introduction section needs to be improved.&lt;br /&gt;
&lt;br /&gt;
== [[Adadelta]] ==&lt;br /&gt;
*There is an extra line of citation links in the References section.&lt;br /&gt;
&lt;br /&gt;
== [[Adafactor]] ==&lt;br /&gt;
*The clarity of the alghrithm and numerical example session needs to be improved. It is convenient to list all equations, but not good to present it to others.&lt;br /&gt;
*More citations are needed for supporting your statement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[AdamW]] ==&lt;br /&gt;
*For the application section, it would be good to emphasize the advantages of AdamW compared to other approach by citing the quantitative results from previous literature.&lt;br /&gt;
*Avoid using pronouns (e.g., we, let&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Adamax]] ==&lt;br /&gt;
*The pseudocode was not well defined. More explanations and logical flow are needed.&lt;br /&gt;
*Citations need to be included in the punctuation like period.&lt;br /&gt;
*Since this is a modified version of Adam, a comparison with Adam is needed for the numerical example.&lt;br /&gt;
*A machine learning case is needed since this is an algorithm designed for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[FTRL algorithm]] ==&lt;br /&gt;
*It is very difficult to clarify different levels of subtitles based on the text.&lt;br /&gt;
*References were not well formatted. For example, &amp;quot;[1]&amp;quot; is added to many references with no meaning.&lt;br /&gt;
*Some symbols used in the equation lack explanations.&lt;br /&gt;
&lt;br /&gt;
== [[LossScaleOptimizer|LossscaleOptimizer]] ==&lt;br /&gt;
*More citations are needed for supporting the statement and applications.&lt;br /&gt;
&lt;br /&gt;
== [[Nadam]] ==&lt;br /&gt;
*The result figures of the numerical example have not been placed in the proper place.&lt;br /&gt;
*The numerical example and application parts are still not representative of illustrating NDAM&#039;s performance for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[Bayesian optimization|Beyesian optimization]] ==&lt;br /&gt;
*Citation form (in text) should be double checked.&lt;br /&gt;
&lt;br /&gt;
== [[Genetic algorithm]] ==&lt;br /&gt;
*Please provide some citations for supporting your statement (e.g. in Introduction)&lt;br /&gt;
&lt;br /&gt;
== [[Simulated annealing]] ==&lt;br /&gt;
*Once the abbr. is defined please use it throughout the context (e.g. SA)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Particle swarm optimization]] ==&lt;br /&gt;
*The caption was missed for the iteration results.&lt;br /&gt;
&lt;br /&gt;
== [[Differential evolution]] ==&lt;br /&gt;
*Once abbreviations are introduced, please make sure the full term do not appear throughout the context.&lt;br /&gt;
*Visualization section is not necessary. Figures should be embedded in the Wiki page.&lt;br /&gt;
*Conclusion and References sections should not belong to Application section.&lt;br /&gt;
*References are already shown at the bottom of the page. The extra list should be removed.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7748</id>
		<title>2024 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7748"/>
		<updated>2024-12-17T22:29:48Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Evolutionary multimodal optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Computational complexity]] ==&lt;br /&gt;
*References were not provided to support applications on computer science and quantum computing.&lt;br /&gt;
&lt;br /&gt;
== [[Heuristic algorithms]] ==&lt;br /&gt;
*Adding more details to the Application Section is recommended.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
*Avoid using contraction (e.g., there&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Local branching]] ==&lt;br /&gt;
*The title should be “Problem Solution” instead of ”Problem Resolution“.&lt;br /&gt;
*The added figure is too small for viewing from the main page and also lacks captions and explanations.&lt;br /&gt;
*There are still some formatting issues with the subtitles. For example, some are in bold form while others are not in the content.&lt;br /&gt;
&lt;br /&gt;
== [[Trust-region methods]] ==&lt;br /&gt;
*Please label the figures with numbers and direct readers to the figures in text.&lt;br /&gt;
*References were not well formatted (e.g., Yuan, Y. (2015b)).&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic programming]] ==&lt;br /&gt;
*An inappropriate nonconvex example was used in the Wiki Page. The problem is an MIQP problem instead of a single QP problem.&lt;br /&gt;
*Some symbols used in the pseudocodes still lack explanation.&lt;br /&gt;
&lt;br /&gt;
== [[Subgradient optimization]] ==&lt;br /&gt;
*References were not well formatted.&lt;br /&gt;
*Symbols used in equations lack explanations.&lt;br /&gt;
*The application section was not well drafted and supported by references.&lt;br /&gt;
&lt;br /&gt;
== [[Dynamic optimization]] ==&lt;br /&gt;
*For the algorithm description, it would be better to have a pseudocode or a flow chart to summarize it.&lt;br /&gt;
*Please use Latex equation editor for equations.&lt;br /&gt;
*Please number and label all figures and tables, use FigureX, TableX as a reference in the text.&lt;br /&gt;
*Please place references after the period at the end of each sentence and avoid after the optimization problems. This goes for all the sections in the wiki.&lt;br /&gt;
 &lt;br /&gt;
== [[Nondifferentiable Optimization]] ==&lt;br /&gt;
*Most contents are from previous year. The Wiki page should be your original content.&lt;br /&gt;
*It is also recommended to revise the citation format based on our example files.&lt;br /&gt;
*Please add the case of non convex functions.&lt;br /&gt;
*Please add references to support the content in the Introduction section. In-text citations are required.&lt;br /&gt;
*Please use Latex equation editor for typing symbols and equations.&lt;br /&gt;
*The Numerical Example section is incomplete.&lt;br /&gt;
*Application and Conclusion sections are missing.&lt;br /&gt;
&lt;br /&gt;
== [[Evolutionary multimodal optimization]] ==&lt;br /&gt;
*Please include more citations in Algorithm Discussion section to support the contents.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
&lt;br /&gt;
== [[Stackelberg leadership model]] ==&lt;br /&gt;
*Please use flowchart/pseudocode for representing the steps of algorithm&lt;br /&gt;
*Check the consistency of abbreviations (e.g. what is PAWS?)&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic constrained quadratic programming]] ==&lt;br /&gt;
*Form of in-text citation is not proper&lt;br /&gt;
*Abbreviations should be introduced only once throughout all sections (e.g., QCQP, QP, SDP)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Derivative free optimization]] ==&lt;br /&gt;
*Please try to include a flowchart or pseudocode for illustration of the algorithm.&lt;br /&gt;
*If DFO is defined in the previous sections, please use such abbreviations consistently (same for other abbreviations).&lt;br /&gt;
&lt;br /&gt;
== [[Signomial problems]] ==&lt;br /&gt;
*There is a lack of numerical examples for illustrating the global optimization method introduced on the Wiki page.&lt;br /&gt;
*The clarification of the equations used in the Introduction section needs to be improved.&lt;br /&gt;
&lt;br /&gt;
== [[Adadelta]] ==&lt;br /&gt;
*There is an extra line of citation links in the References section.&lt;br /&gt;
&lt;br /&gt;
== [[Adafactor]] ==&lt;br /&gt;
*The clarity of the alghrithm and numerical example session needs to be improved. It is convenient to list all equations, but not good to present it to others.&lt;br /&gt;
*More citations are needed for supporting your statement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[AdamW]] ==&lt;br /&gt;
*For the application section, it would be good to emphasize the advantages of AdamW compared to other approach by citing the quantitative results from previous literature.&lt;br /&gt;
*Avoid using pronouns (e.g., we, let&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Adamax]] ==&lt;br /&gt;
*The pseudocode was not well defined. More explanations and logical flow are needed.&lt;br /&gt;
*Citations need to be included in the punctuation like period.&lt;br /&gt;
*Since this is a modified version of Adam, a comparison with Adam is needed for the numerical example.&lt;br /&gt;
*A machine learning case is needed since this is an algorithm designed for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[FTRL algorithm]] ==&lt;br /&gt;
*It is very difficult to clarify different levels of subtitles based on the text.&lt;br /&gt;
*References were not well formatted. For example, &amp;quot;[1]&amp;quot; is added to many references with no meaning.&lt;br /&gt;
*Some symbols used in the equation lack explanations.&lt;br /&gt;
&lt;br /&gt;
== [[LossScaleOptimizer|LossscaleOptimizer]] ==&lt;br /&gt;
*More citations are needed for supporting the statement and applications.&lt;br /&gt;
&lt;br /&gt;
== [[Nadam]] ==&lt;br /&gt;
*The result figures of the numerical example have not been placed in the proper place.&lt;br /&gt;
*The numerical example and application parts are still not representative of illustrating NDAM&#039;s performance for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[Bayesian optimization|Beyesian optimization]] ==&lt;br /&gt;
*Citation form (in text) should be double checked.&lt;br /&gt;
&lt;br /&gt;
== [[Genetic algorithm]] ==&lt;br /&gt;
*Please provide some citations for supporting your statement (e.g. in Introduction)&lt;br /&gt;
&lt;br /&gt;
== [[Simulated annealing]] ==&lt;br /&gt;
*Once the abbr. is defined please use it throughout the context (e.g. SA)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Particle swarm optimization]] ==&lt;br /&gt;
*The caption was missed for the iteration results.&lt;br /&gt;
&lt;br /&gt;
== [[Differential evolution]] ==&lt;br /&gt;
*Make sure abbreviations are consistent throughout the context (e.g. Please define DE at the introduction section not in the later section, please check the similar cases as well).&lt;br /&gt;
*Visualization section is not necessary. Figures should be embedded in the Wiki page.&lt;br /&gt;
*Conclusion and References sections should not belong to Application section.&lt;br /&gt;
*References are already shown at the bottom of the page. The extra list should be removed.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7747</id>
		<title>2024 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7747"/>
		<updated>2024-12-17T20:47:48Z</updated>

		<summary type="html">&lt;p&gt;Wc593: Edited Team 23-26 feedbacks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Computational complexity]] ==&lt;br /&gt;
*References were not provided to support applications on computer science and quantum computing.&lt;br /&gt;
&lt;br /&gt;
== [[Heuristic algorithms]] ==&lt;br /&gt;
*Adding more details to the Application Section is recommended.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
*Avoid using contraction (e.g., there&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Local branching]] ==&lt;br /&gt;
*The title should be “Problem Solution” instead of ”Problem Resolution“.&lt;br /&gt;
*The added figure is too small for viewing from the main page and also lacks captions and explanations.&lt;br /&gt;
*There are still some formatting issues with the subtitles. For example, some are in bold form while others are not in the content.&lt;br /&gt;
&lt;br /&gt;
== [[Trust-region methods]] ==&lt;br /&gt;
*Please label the figures with numbers and direct readers to the figures in text.&lt;br /&gt;
*References were not well formatted (e.g., Yuan, Y. (2015b)).&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic programming]] ==&lt;br /&gt;
*An inappropriate nonconvex example was used in the Wiki Page. The problem is an MIQP problem instead of a single QP problem.&lt;br /&gt;
*Some symbols used in the pseudocodes still lack explanation.&lt;br /&gt;
&lt;br /&gt;
== [[Subgradient optimization]] ==&lt;br /&gt;
*References were not well formatted.&lt;br /&gt;
*Symbols used in equations lack explanations.&lt;br /&gt;
*The application section was not well drafted and supported by references.&lt;br /&gt;
&lt;br /&gt;
== [[Dynamic optimization]] ==&lt;br /&gt;
*For the algorithm description, it would be better to have a pseudocode or a flow chart to summarize it.&lt;br /&gt;
*Please use Latex equation editor for equations.&lt;br /&gt;
*Please number and label all figures and tables, use FigureX, TableX as a reference in the text.&lt;br /&gt;
*Please place references after the period at the end of each sentence and avoid after the optimization problems. This goes for all the sections in the wiki.&lt;br /&gt;
 &lt;br /&gt;
== [[Nondifferentiable Optimization]] ==&lt;br /&gt;
*Most contents are from previous year. The Wiki page should be your original content.&lt;br /&gt;
*It is also recommended to revise the citation format based on our example files.&lt;br /&gt;
*Please add the case of non convex functions.&lt;br /&gt;
*Please add references to support the content in the Introduction section. In-text citations are required.&lt;br /&gt;
*Please use Latex equation editor for typing symbols and equations.&lt;br /&gt;
*The Numerical Example section is incomplete.&lt;br /&gt;
*Application and Conclusion sections are missing.&lt;br /&gt;
&lt;br /&gt;
== [[Evolutionary multimodal optimization]] ==&lt;br /&gt;
*Please include more citations in Algorithm Discussion section to support the contents.&lt;br /&gt;
*Adding some figures may help reader to understand the content.&lt;br /&gt;
*Please use FigureX as a reference in the text.&lt;br /&gt;
&lt;br /&gt;
== [[Stackelberg leadership model]] ==&lt;br /&gt;
*Please use flowchart/pseudocode for representing the steps of algorithm&lt;br /&gt;
*Check the consistency of abbreviations (e.g. what is PAWS?)&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic constrained quadratic programming]] ==&lt;br /&gt;
*Form of in-text citation is not proper&lt;br /&gt;
*Abbreviations should be introduced only once throughout all sections (e.g., QCQP, QP, SDP)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Derivative free optimization]] ==&lt;br /&gt;
*Please try to include a flowchart or pseudocode for illustration of the algorithm.&lt;br /&gt;
*If DFO is defined in the previous sections, please use such abbreviations consistently (same for other abbreviations).&lt;br /&gt;
&lt;br /&gt;
== [[Signomial problems]] ==&lt;br /&gt;
*There is a lack of numerical examples for illustrating the global optimization method introduced on the Wiki page.&lt;br /&gt;
*The clarification of the equations used in the Introduction section needs to be improved.&lt;br /&gt;
&lt;br /&gt;
== [[Adadelta]] ==&lt;br /&gt;
*There is an extra line of citation links in the References section.&lt;br /&gt;
&lt;br /&gt;
== [[Adafactor]] ==&lt;br /&gt;
*The clarity of the alghrithm and numerical example session needs to be improved. It is convenient to list all equations, but not good to present it to others.&lt;br /&gt;
*More citations are needed for supporting your statement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[AdamW]] ==&lt;br /&gt;
*For the application section, it would be good to emphasize the advantages of AdamW compared to other approach by citing the quantitative results from previous literature.&lt;br /&gt;
*Avoid using pronouns (e.g., we, let&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Adamax]] ==&lt;br /&gt;
*The pseudocode was not well defined. More explanations and logical flow are needed.&lt;br /&gt;
*Citations need to be included in the punctuation like period.&lt;br /&gt;
*Since this is a modified version of Adam, a comparison with Adam is needed for the numerical example.&lt;br /&gt;
*A machine learning case is needed since this is an algorithm designed for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[FTRL algorithm]] ==&lt;br /&gt;
*It is very difficult to clarify different levels of subtitles based on the text.&lt;br /&gt;
*References were not well formatted. For example, &amp;quot;[1]&amp;quot; is added to many references with no meaning.&lt;br /&gt;
*Some symbols used in the equation lack explanations.&lt;br /&gt;
&lt;br /&gt;
== [[LossScaleOptimizer|LossscaleOptimizer]] ==&lt;br /&gt;
*More citations are needed for supporting the statement and applications.&lt;br /&gt;
&lt;br /&gt;
== [[Nadam]] ==&lt;br /&gt;
*The result figures of the numerical example have not been placed in the proper place.&lt;br /&gt;
*The numerical example and application parts are still not representative of illustrating NDAM&#039;s performance for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[Bayesian optimization|Beyesian optimization]] ==&lt;br /&gt;
*Citation form (in text) should be double checked.&lt;br /&gt;
&lt;br /&gt;
== [[Genetic algorithm]] ==&lt;br /&gt;
*Please provide some citations for supporting your statement (e.g. in Introduction)&lt;br /&gt;
&lt;br /&gt;
== [[Simulated annealing]] ==&lt;br /&gt;
*Once the abbr. is defined please use it throughout the context (e.g. SA)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Particle swarm optimization]] ==&lt;br /&gt;
*The caption was missed for the iteration results.&lt;br /&gt;
&lt;br /&gt;
== [[Differential evolution]] ==&lt;br /&gt;
*Make sure abbreviations are consistent throughout the context (e.g. Please define DE at the introduction section not in the later section, please check the similar cases as well).&lt;br /&gt;
*Visualization section is not necessary. Figures should be embedded in the Wiki page.&lt;br /&gt;
*Conclusion and References sections should not belong to Application section.&lt;br /&gt;
*References are already shown at the bottom of the page. The extra list should be removed.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7746</id>
		<title>2024 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2024_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=7746"/>
		<updated>2024-12-17T20:24:30Z</updated>

		<summary type="html">&lt;p&gt;Wc593: Edited Team19-22 feedback&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Computational complexity]] ==&lt;br /&gt;
*References were not provided to support applications on computer science and quantum computing.&lt;br /&gt;
&lt;br /&gt;
== [[Heuristic algorithms]] ==&lt;br /&gt;
*More details on the Application Section.&lt;br /&gt;
*Please come up with one numerical example with hill-climbing.&lt;br /&gt;
*Please add more references to support the content in the Introduction section.&lt;br /&gt;
*Please add figure captions for the pseudocodes. &lt;br /&gt;
*Avoid using contraction (e.g., we&#039;re) and pronouns (e.g., we) in scientific writing.&lt;br /&gt;
*ResearchGate is not a publisher. Please check the reference again. &lt;br /&gt;
&lt;br /&gt;
== [[Local branching]] ==&lt;br /&gt;
*The title should be “Problem Solution” instead of ”Problem Resolution“.&lt;br /&gt;
*The added figure is too small for viewing from the main page and also lacks captions and explanations.&lt;br /&gt;
*There are still some formatting issues with the subtitles. For example, some are in bold form while others are not in the content.&lt;br /&gt;
&lt;br /&gt;
== [[Trust-region methods]] ==&lt;br /&gt;
*Please label the figures with numbers and direct readers to the figures in text.&lt;br /&gt;
*References were not well formatted (e.g., Yuan, Y. (2015b)).&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic programming]] ==&lt;br /&gt;
*An inappropriate nonconvex example was used in the Wiki Page. The problem is an MIQP problem instead of a single QP problem.&lt;br /&gt;
*Some symbols used in the pseudocodes still lack explanation.&lt;br /&gt;
&lt;br /&gt;
== [[Subgradient optimization]] ==&lt;br /&gt;
*References were not well formatted.&lt;br /&gt;
*Symbols used in equations lack explanations.&lt;br /&gt;
*The application section was not well drafted and supported by references.&lt;br /&gt;
&lt;br /&gt;
== [[Dynamic optimization]] ==&lt;br /&gt;
*For the algorithm description, it would be better to have a pseudocode or a flow chart to summarize it.&lt;br /&gt;
*Please use Latex equation editor for equations.&lt;br /&gt;
*Please number and label all figures and tables, use FigureX, TableX as a reference in the text.&lt;br /&gt;
*Please place references after the period at the end of each sentence and avoid after the optimization problems. This goes for all the sections in the wiki.&lt;br /&gt;
 &lt;br /&gt;
== [[Nondifferentiable Optimization]] ==&lt;br /&gt;
*Most contents are from previous year. The Wiki page should be your original content.&lt;br /&gt;
*It is also recommended to revise the citation format based on our example files.&lt;br /&gt;
*Please add the case of non convex functions.&lt;br /&gt;
*Please add references to support the content in the Introduction section. In-text citations are required.&lt;br /&gt;
*Please use Latex equation editor for typing symbols and equations.&lt;br /&gt;
*The Numerical Example section is incomplete.&lt;br /&gt;
*Application and Conclusion sections are missing.&lt;br /&gt;
&lt;br /&gt;
== [[Evolutionary multimodal optimization]] ==&lt;br /&gt;
*It would be better to have subsections of each approach in the Algorithm Discussion section to improve the clarity.&lt;br /&gt;
*The logic flow and clarity of both the Algorithm Discussion section and Numerical Example section need to be largely improved.&lt;br /&gt;
*Please include citations to support the Wiki contents.&lt;br /&gt;
*Please make sure abbreviations should be consistent throughout the context.&lt;br /&gt;
*In-text citations are required.&lt;br /&gt;
*Please add mathematical expressions to Algorithm Discussion section for explicitness.&lt;br /&gt;
*Please provide step by step calculation for the numerical example.&lt;br /&gt;
*Adding some figures may help reader to understand the content.&lt;br /&gt;
&lt;br /&gt;
== [[Stackelberg leadership model]] ==&lt;br /&gt;
*Please use flowchart/pseudocode for representing the steps of algorithm&lt;br /&gt;
*Check the consistency of abbreviations (e.g. what is PAWS?)&lt;br /&gt;
&lt;br /&gt;
== [[Quadratic constrained quadratic programming]] ==&lt;br /&gt;
*Form of in-text citation is not proper&lt;br /&gt;
*Abbreviations should be introduced only once throughout all sections (e.g., QCQP, QP, SDP)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Derivative free optimization]] ==&lt;br /&gt;
*Please try to include a flowchart or pseudocode for illustration of the algorithm.&lt;br /&gt;
*If DFO is defined in the previous sections, please use such abbreviations consistently (same for other abbreviations).&lt;br /&gt;
&lt;br /&gt;
== [[Signomial problems]] ==&lt;br /&gt;
*There is a lack of numerical examples for illustrating the global optimization method introduced on the Wiki page.&lt;br /&gt;
*The clarification of the equations used in the Introduction section needs to be improved.&lt;br /&gt;
&lt;br /&gt;
== [[Adadelta]] ==&lt;br /&gt;
*There is an extra line of citation links in the References section.&lt;br /&gt;
&lt;br /&gt;
== [[Adafactor]] ==&lt;br /&gt;
*The clarity of the alghrithm and numerical example session needs to be improved. It is convenient to list all equations, but not good to present it to others.&lt;br /&gt;
*More citations are needed for supporting your statement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[AdamW]] ==&lt;br /&gt;
*For the application section, it would be good to emphasize the advantages of AdamW compared to other approach by citing the quantitative results from previous literature.&lt;br /&gt;
*Avoid using pronouns (e.g., we, let&#039;s) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Adamax]] ==&lt;br /&gt;
*The pseudocode was not well defined. More explanations and logical flow are needed.&lt;br /&gt;
*Citations need to be included in the punctuation like period.&lt;br /&gt;
*Since this is a modified version of Adam, a comparison with Adam is needed for the numerical example.&lt;br /&gt;
*A machine learning case is needed since this is an algorithm designed for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[FTRL algorithm]] ==&lt;br /&gt;
*It is very difficult to clarify different levels of subtitles based on the text.&lt;br /&gt;
*References were not well formatted. For example, &amp;quot;[1]&amp;quot; is added to many references with no meaning.&lt;br /&gt;
*Some symbols used in the equation lack explanations.&lt;br /&gt;
&lt;br /&gt;
== [[LossScaleOptimizer|LossscaleOptimizer]] ==&lt;br /&gt;
*More citations are needed for supporting the statement and applications.&lt;br /&gt;
&lt;br /&gt;
== [[Nadam]] ==&lt;br /&gt;
*The result figures of the numerical example have not been placed in the proper place.&lt;br /&gt;
*The numerical example and application parts are still not representative of illustrating NDAM&#039;s performance for machine learning models.&lt;br /&gt;
&lt;br /&gt;
== [[Bayesian optimization|Beyesian optimization]] ==&lt;br /&gt;
*Citation form (in text) should be double checked.&lt;br /&gt;
&lt;br /&gt;
== [[Genetic algorithm]] ==&lt;br /&gt;
*Please provide some citations for supporting your statement (e.g. in Introduction)&lt;br /&gt;
&lt;br /&gt;
== [[Simulated annealing]] ==&lt;br /&gt;
*Once the abbr. is defined please use it throughout the context (e.g. SA)&lt;br /&gt;
*Avoid using pronouns (e.g., we) in scientific writing.&lt;br /&gt;
&lt;br /&gt;
== [[Particle swarm optimization]] ==&lt;br /&gt;
*The caption was missed for the iteration results.&lt;br /&gt;
&lt;br /&gt;
== [[Differential evolution]] ==&lt;br /&gt;
*Provide more references to support the statements made in the Application Section.&lt;br /&gt;
*Make sure abbreviations are consistent throughout the context (e.g. Please define DE at the introduction section not in the later section, please check the similar cases as well).&lt;br /&gt;
*In-text citations are required.&lt;br /&gt;
*The symbols in the pseudocode is not in proper format. Please use Latex equation editor for this.&lt;br /&gt;
*Please number and label all figures, use FigureX as a reference in the text.&lt;br /&gt;
*Please add more details to numerical example (e.g., replace x = -7 with -5 because f(x1) &amp;gt; f(u1))&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=7647</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=7647"/>
		<updated>2024-12-15T22:35:50Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;mp-topbanner&amp;quot; style=&amp;quot;width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ddd;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:61%; color:#000;&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;width:100%; border:none; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; white-space:nowrap; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#000;&amp;quot;&amp;gt;Welcome to the Cornell University Computational Optimization Open Textbook&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This electronic textbook is a student-contributed open-source text covering a variety of topics on process optimization.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If you have any comments or suggestions on this open textbook, please contact [https://www.engineering.cornell.edu/faculty-directory/fengqi-you  Professor Fengqi You].&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| id=&amp;quot;mp-upper&amp;quot; style=&amp;quot;width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;&amp;quot; |&lt;br /&gt;
{| id=&amp;quot;mp-left&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5fffa;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px;&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Linear Programming (LP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;&amp;quot; | &amp;lt;div id=&amp;quot;mp-tfa&amp;quot; style=&amp;quot;padding:2px 5px 5px 15px&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simplex algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Computational complexity]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Network flow problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for LP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization with absolute values]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Matrix game (LP for game theory)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;NonLinear Programming (NLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Line search methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Trust-region methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for NLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Conjugate gradient methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quasi-Newton methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sequential quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Subgradient optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mathematical programming with equilibrium constraints]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Dynamic optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Geometric programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nondifferentiable Optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Evolutionary multimodal optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stackelberg leadership model]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic constrained quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Derivative free optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Deterministic Global Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Exponential transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Logarithmic transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[McCormick envelopes]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Piecewise linear approximation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Spatial branch and bound method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Dynamic Programming&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Markov decision process]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bellman equation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Eight step procedures]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic dynamic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Traditional Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Facility location problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Traveling salesman problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Set covering problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic assignment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Job shop scheduling]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Newsvendor problem]]&amp;lt;/li&amp;gt; &lt;br /&gt;
      &amp;lt;li&amp;gt;[[Unit commitment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Portfolio optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[A-star algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt; Emerging Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Wing shape optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization in game theory]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quantum computing for optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border:1px solid transparent;&amp;quot; |&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5faff;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer Linear Programming (MILP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer cuts]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Disjunctive inequalities]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lagrangean duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Column generation algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Heuristic algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Local branching]]&amp;lt;/li&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer NonLinear Programming (MINLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Signomial problems]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer linear fractional programming (MILFP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Convex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nonconvex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and bound (BB) for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Generalized Benders decomposition (GBD)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Outer-approximation (OA)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Extended cutting plane (ECP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization under Uncertainty&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Chance-constraint method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Fuzzy programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Classical robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adaptive robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Data driven robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization for Machine Learning and Data Analytics&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic gradient descent]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Momentum]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdaGrad]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[RMSProp]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Frank-Wolfe]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sparse Reconstruction with Compressed Sensing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adadelta]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adafactor]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdamW]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adamax]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[FTRL algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lion algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[LossScaleOptimizer]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nadam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Black-box Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bayesian optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Genetic algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simulated annealing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Particle swarm optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Differential evolution]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sponsor ==&lt;br /&gt;
[[File:Peese-logo.jpg|Cornell Prof. Fengqi You Research Group |link=https://www.peese.org]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Dynamic_optimization&amp;diff=7646</id>
		<title>Dynamic optimization</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Dynamic_optimization&amp;diff=7646"/>
		<updated>2024-12-15T22:30:29Z</updated>

		<summary type="html">&lt;p&gt;Wc593: Undo revision 6844 by SYSEN5800TAs (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This web page is a duplicate of https://optimization.mccormick.northwestern.edu/index.php/Dynamic_optimization&lt;br /&gt;
&lt;br /&gt;
Authors: Hanyu Shi (ChE 345 Spring 2014)&lt;br /&gt;
&lt;br /&gt;
Steward: Dajun Yue, Fengqi You&lt;br /&gt;
&lt;br /&gt;
Date Presented: Apr. 10, 2014&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Authors: Issac Newton, Albert Einstein (ChE 345 Spring 2014)&lt;br /&gt;
&lt;br /&gt;
Steward: Dajun Yue, Fengqi You&lt;br /&gt;
&lt;br /&gt;
Date Presented: Apr. 10, 2014&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
In this work, we will focus on the “at the same time” or direct transcription approach which allow a simultaneous method for the dynamic optimization problem. In particular, we formulate the dynamic optimization model with orthogonal collocation methods. These methods can also be regarded as a special class of implicit Runge–Kutta (IRK) methods. We apply the concepts and properties of IRK methods to the differential equations directly. With locating potential break points appropriately, this approach can model large-scale optimization formulations with the property of maintaining accurate state and control profiles. We mainly follows Biegler&#039;s work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==General Dynamic Optimization Problem==&lt;br /&gt;
&lt;br /&gt;
Differential algebraic equations in process engineering often have following characteristics: first,large-scale models – not easily scaled; second, sparse but no regular structure; third, direct linear solvers widely used; last, coarse-grained decomposition of linear algebra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shy 345 wiki fig 02.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Figure 2. Dynamic optimization approach&lt;br /&gt;
&lt;br /&gt;
There are several approaches can be applied to solve the dynamic optimization problems, which are shown in Figure 2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Differential equations can usually be used to express conservation Laws, such as mass, energy, momentum.  Algebraic equations can usually be used to express constitutive equations, equilibrium, such as physical properties, hydraulics, rate laws. Algebraic equations usually have semi-explicit form and assume to be index one i.e., algebraic variables can be solved uniquely by algebraic equations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dynamic Optimization Problem has the following general form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
\min \;\Phi \left( {z\left( t \right),y\left( t \right),u\left( t \right),p,{t_f}} \right)\\&lt;br /&gt;
s.t.\;\;\frac{{dz\left( t \right)}}{{dt}} = f\left( {z\left( t \right),y\left( t \right),u\left( t \right),p} \right)\\&lt;br /&gt;
g\left( {z\left( t \right),y\left( t \right),u\left( t \right),p} \right) = 0\\&lt;br /&gt;
{z^0} = z\left( 0 \right)\\&lt;br /&gt;
{z^l} \le z\left( t \right) \le {z^u}\\&lt;br /&gt;
{y^l} \le y\left( t \right) \le {y^u}\\&lt;br /&gt;
{u^l} \le u\left( t \right) \le {u^u}\\&lt;br /&gt;
{p^l} \le p \le {p^u}&lt;br /&gt;
\end{array}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
￼￼￼&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, differential variables y, algebraic variables&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_f&amp;lt;/math&amp;gt;  , final time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, control variables&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;, time independent parameters&lt;br /&gt;
&lt;br /&gt;
(This follows Biegler&#039;s slides ）&lt;br /&gt;
&lt;br /&gt;
==Derivation of Collocation Methods==&lt;br /&gt;
We first consider the differential algebraic system shown as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
\frac{{dz}}{{dt}} = f\left( {z\left( t \right),y\left( t \right),u\left( t \right),p} \right),\;z\left( 0 \right) = {z_0}\\&lt;br /&gt;
g\left( {z\left( t \right),y\left( t \right),u\left( t \right),p} \right) = 0&lt;br /&gt;
\end{array}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;     （1）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The simultaneous approach requires discretizing of the state variables &amp;lt;math&amp;gt; z\left( t \right) &amp;lt;/math&amp;gt;, output variables &amp;lt;math&amp;gt; y\left( t \right) &amp;lt;/math&amp;gt; and manipulate variables &amp;lt;math&amp;gt; u\left( t \right) &amp;lt;/math&amp;gt;. We require the following properties to yield an efficient NLP formulation:&lt;br /&gt;
&lt;br /&gt;
1)	The explicit ODE discretization holds little computational advantage because Since the nonlinear program requires an iterative solution of the KKT conditions.&lt;br /&gt;
&lt;br /&gt;
2)	A single step approach which is self-starting and does not rely on smooth profiles that extend over previous time steps is preferred, because the NLP formulation needs to deal with discontinuities in control profiles.&lt;br /&gt;
&lt;br /&gt;
3)	The high-order implicit discretization provides accurate profiles with relatively few finite elements. As a result, the number of finite elements need not be excessively large, particularly for problems with many states and controls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shy 345 wiki fig 01.png]]&lt;br /&gt;
&lt;br /&gt;
Figure 1: Polynomial approximation for state profile across a finite element.&lt;br /&gt;
&lt;br /&gt;
==Polynomial Representation for ODE Solutions==&lt;br /&gt;
&lt;br /&gt;
We consider the following ODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{{dz}}{{dt}} = f\left( {z\left( t \right),t} \right),\;z\left( 0 \right) = {z_0}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;    (2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to apply the collocation method, we need to solve the differential equation (2) at certain points. For the state variable, we consider a polynomial approximation of order &amp;lt;math&amp;gt;K+1&amp;lt;/math&amp;gt;  (i.e., degree ≤ &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; ) over a single finite element, as shown in the above figure. This polynomial, denoted by &amp;lt;math&amp;gt;{z^K}(t)&amp;lt;/math&amp;gt;, can be represented in a number of equivalent ways, including the power series representation shown in equation (3), the Newton divided difference approximation, or B-splines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{{dz}}{{dt}} = f\left( {z\left( t \right),t} \right),\;z\left( 0 \right) = {z_0}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;    (3)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We apply representations based on Lagrange interpolation polynomials to generate the NLP formulation, because the polynomial coefficients and the profiles have the same variable bounds. Here we select &amp;lt;math&amp;gt;K+1       &amp;lt;/math&amp;gt; interpolation points in element i and represent the state in a given element &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; as&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
\left. {\begin{array}{*{20}{c}}&lt;br /&gt;
{t = {t_{i - 1}} + {h_i} \cdot \tau ,}\\&lt;br /&gt;
{{z^K}\left( t \right) = \sum\limits_{j = 0}^K {{l_j}\left( \tau  \right) \cdot {z_{ij}},} }&lt;br /&gt;
\end{array}} \right\}t \in \left[ {{t_{i - 1}},{t_i}} \right],\tau  \in \left[ {0,1} \right],\\&lt;br /&gt;
where\;{l_j}\left( \tau  \right) = \prod\limits_{k = 0, \ne j}^K {\frac{{\left( {\tau  - {\tau _k}} \right)}}{{\left( {{\tau _j} - {\tau _k}} \right)}}} ,&lt;br /&gt;
\end{array}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;   （4）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {\tau _0} = 0,\;{\tau _i} &amp;lt; {\tau _{i + 1}},\;j = 0,...,K -  1 &amp;lt;/math&amp;gt;， and hi is the length of element &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. This polynomial representation has the desirable property that &amp;lt;math&amp;gt;{z^K}({t_{ij}}) = {z_{ij}}&amp;lt;/math&amp;gt;,  where &amp;lt;math&amp;gt;{t_{ij}} = {t_{i - 1}} + {\tau _j}{h_j}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We use a Lagrange polynomial with K interpolation points to represent the time derivative of the state. This leads to the Runge–Kutta basis representation for ￼the differential state:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{z^K}\left( t \right) = {z_{i - 1}} + {h_i} \cdot \sum\limits_{j = 1}^K {{\Omega _j}\left( \tau  \right)}  \cdot {\dot z_{ij}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt; {z_{i - 1}} &amp;lt;/math&amp;gt; is a coefficient that represents the differential state at the beginning of element &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt; {\dot z_{ij}} &amp;lt;/math&amp;gt;represents the time derivative &amp;lt;math&amp;gt;\frac{{d{z^K}({t_{ij}})}}{{d\tau }}   &amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt; {\Omega _j}(\tau )  &amp;lt;/math&amp;gt; is a polynomial of order K satisfying&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{\Omega _j}\left( \tau  \right) = \int_0^\tau  {{l_j}(\tau &#039;)} d\tau &#039;,t \in \left[ {{t_{i - 1}},{t_i}} \right],\tau  \in \left[ {0,1} \right]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (6)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We substitute the polynomial into equation (1) to calculate the polynomial coefficients, which is an approximation of the DAE. This results in the following collocation equations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{z^K}\left( t \right) = {z_{i - 1}} + {h_i} \cdot \sum\limits_{j = 1}^K {{\Omega _j}\left( \tau  \right)}  \cdot {\dot z_{ij}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;math&amp;gt; {z^k}({t_i} - 1) &amp;lt;/math&amp;gt; calculated separately. For the polynomial representations (4) and (5),  we normalize time over the element, write the state profile as a function of τ , and apply &amp;lt;math&amp;gt; \frac{{d{z^K}}}{{d\tau }} = {h_i}\frac{{d{z^K}}}{{dt}}  &amp;lt;/math&amp;gt; easily. For the Lagrange polynomial (4), the collocation equations ￼￼become&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\sum\limits_{j = 0}^K {{z_{ij}} \cdot \frac{{d{l_j}\left( {{\tau _k}} \right)}}{{d\tau }}}  = {h_i} \cdot f\left( {{z_{ik}},{t_{ik}}} \right),\;k = 1,...,K&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
while the collocation equations for the Runge–Kutta basis are given by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{\dot z_{ik}} = f\left( {{z_{ik}},{t_{ik}}} \right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (9)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{z_{ik}} = {z_{i - 1}} + {h_i} \cdot \sum\limits_{j = 1}^K {{\Omega _j}\left( \tau  \right)}  \cdot {\dot z_{ij}},\;k = 1,...,K&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (10)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;math&amp;gt;  {z_i} - 1 &amp;lt;/math&amp;gt;determined from the previous element &amp;lt;math&amp;gt;  i-1 &amp;lt;/math&amp;gt; or from the initial condition on the ODE.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
An example is given here to demonstrate the application of the collocation method. &lt;br /&gt;
&lt;br /&gt;
A differential equation is given as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\frac{{dz}}{{dt}} = {z^2} - 2 \cdot z + 1,\;z\left( 0 \right) =  - 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (11)&lt;br /&gt;
&lt;br /&gt;
With   t \in \left[ {0,1} \right], The analytic solution of this differential equation is &amp;lt;math&amp;gt;z\left( t \right) = \frac{{4 \cdot t - 3}}{{4 \cdot t + 1}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lagrange interpolation and collocation method is applied to this differential equation respectively. And  the number of collocation points in each finite element is 3. The number of finite elements is   N  , and the length of the finite element is   1/N  . The following equations is given then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\sum\limits_{j = 0}^3 {{z_{ij}}\frac{{d{l_j}\left( {{\tau _k}} \right)}}{{d\tau }}}  = h\left( {z_{ik}^2 - 2 \cdot {z_{ik}} + 1} \right),\;k = 1,...,3,\;i = 1,...,N&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (12)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{z_{i + 1,0}} = \sum\limits_{j = 0}^0 {{l_j}\left( 1 \right)}  \cdot {z_{ij}},\;i = 1,...,N - 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (13)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{z_f} = \sum\limits_{j = 0}^K {{l_j}\left( 1 \right)}  \cdot {z_{Nj}},\;{z_{1,0}} = -3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (14)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With Radau collocation method, &amp;lt;math&amp;gt;  {\tau _0} = 0 &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;  {\tau _1} = {\rm{0.155051}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;  {\tau _2} = {\rm{0.644949}}&amp;lt;/math&amp;gt;   and &amp;lt;math&amp;gt;   {\tau _3} = 1 &amp;lt;/math&amp;gt;      can be obtained. The collocation equations are given as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\sum\limits_{j = 0}^3 {{z_j}\frac{{d{l_j}\left( {{\tau _k}} \right)}}{{d\tau }}}  = \left( {z_k^2 - 2 \cdot {z_k} + 1} \right),\;k = 1,...,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (14)&lt;br /&gt;
&lt;br /&gt;
which can be formulated as:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
{z_0} \cdot \left( { - 30 \cdot \tau _k^2 + 36 \cdot {\tau _k} - 9} \right) + {z_1} \cdot \left( {{\rm{46.7423}} \cdot \tau _k^2 - {\rm{51.2592}} \cdot {\tau _k} + {\rm{10.0488}}} \right)\\&lt;br /&gt;
 + {z_3} \cdot \left( { - {\rm{26.7423}} \cdot \tau _k^2 + {\rm{20.5925}} \cdot {\tau _k} - {\rm{ 1.38214}}} \right) + {z_3} \cdot \left( {10 \cdot \tau _k^2 - \frac{{16}}{3} \cdot {\tau _k} + \frac{1}{3}} \right)\\&lt;br /&gt;
 = \left( {z_k^2 - 2 \cdot {z_k} + 1} \right),\;k = 1,...,3&lt;br /&gt;
\end{array}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (15)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shy 345 wiki fig 03.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Figure 3. Comparison of Radau collocation solution with exact solution&lt;br /&gt;
&lt;br /&gt;
The results are given as following by solving the above equations:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\left\{ {\begin{array}{*{20}{c}}&lt;br /&gt;
{{z_0} =  - 3}\\&lt;br /&gt;
{{z_1} =  - {\rm{1.65701}}}\\&lt;br /&gt;
{{z_2} = {\rm{0.032053}}}\\&lt;br /&gt;
{{z_3} = {\rm{0.207272}}}&lt;br /&gt;
\end{array}} \right.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;           (16)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As shown in Figure 3.2 the error  &amp;lt;math&amp;gt;\left\| {z\left( 1 \right) - {z^K}\left( 1 \right)} \right\|&amp;lt;/math&amp;gt;， is less than &amp;lt;math&amp;gt;10^-6&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;N=5&amp;lt;/math&amp;gt;  and converges with &amp;lt;math&amp;gt;O(h^5)&amp;lt;/math&amp;gt;, which is consistent with the expected order &amp;lt;math&amp;gt;2K-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(This example follows the work of Biegler and can be found in P293 of “ Nonlinear Programmng”.)&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this work, we mainly discussed simultaneous collocation approach for dynamic optimization problems, which formulated the differential equations to a set of algebraic equations. These direct transcription formulations depended on fully discretizing of the differential algebraic equations (DAE), which enabled us solve the simultaneous optimization problem without relying on embedded DAE solvers.  Because of this simultaneous formulation, we got the exact first and second order derivatives  through the optimization modeling system, and both structure and sparsity can be exploited.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
1. Biegler, Lorenz T. Nonlinear programming: concepts, algorithms, and applications to chemical processes. Vol. 10. SIAM, 2010.&lt;br /&gt;
&lt;br /&gt;
2. Chu, Yunfei, and Fengqi You. &amp;quot;Integration of scheduling and control with online closed-loop implementation: Fast computational strategy and large-scale global optimization algorithm.&amp;quot; Computers &amp;amp; Chemical Engineering 47 (2012): 248-268.&lt;br /&gt;
&lt;br /&gt;
3. http://en.wikipedia.org/wiki/Dynamic_programming&lt;br /&gt;
&lt;br /&gt;
4. http://en.wikipedia.org/wiki/Differential_algebraic_equation&lt;br /&gt;
&lt;br /&gt;
5. http://numero.cheme.cmu.edu/uploads/dynopt.pdf&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=File:Tsp-graph.png&amp;diff=6957</id>
		<title>File:Tsp-graph.png</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=File:Tsp-graph.png&amp;diff=6957"/>
		<updated>2024-12-11T19:35:50Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tsp-graph&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=6744</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=6744"/>
		<updated>2024-12-05T23:35:27Z</updated>

		<summary type="html">&lt;p&gt;Wc593: Moved sections to balance column length&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;mp-topbanner&amp;quot; style=&amp;quot;width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ddd;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:61%; color:#000;&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;width:100%; border:none; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; white-space:nowrap; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#000;&amp;quot;&amp;gt;Welcome to the Cornell University Computational Optimization Open Textbook&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This electronic textbook is a student-contributed open-source text covering a variety of topics on process optimization.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If you have any comments or suggestions on this open textbook, please contact [https://www.engineering.cornell.edu/faculty-directory/fengqi-you  Professor Fengqi You].&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| id=&amp;quot;mp-upper&amp;quot; style=&amp;quot;width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;&amp;quot; |&lt;br /&gt;
{| id=&amp;quot;mp-left&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5fffa;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px;&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Linear Programming (LP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;&amp;quot; | &amp;lt;div id=&amp;quot;mp-tfa&amp;quot; style=&amp;quot;padding:2px 5px 5px 15px&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simplex algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Computational complexity]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Network flow problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for LP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization with absolute values]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Matrix game (LP for game theory)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;NonLinear Programming (NLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Line search methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Trust-region methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for NLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Conjugate gradient methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quasi-Newton methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sequential quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Subgradient optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mathematical programming with equilibrium constraints]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Dynamic optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Geometric programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nondifferentiable Optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Evolutionary multimodal optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stackelberg leadership model]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic constrained quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Derivative free optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Deterministic Global Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Exponential transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Logarithmic transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[McCormick envelopes]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Piecewise linear approximation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Spatial branch and bound method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Dynamic Programming&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Markov decision process]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bellman equation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Eight step procedures]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic dynamic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Traditional Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Facility location problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Traveling salesman problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Set covering problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic assignment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Job shop scheduling]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Newsvendor problem]]&amp;lt;/li&amp;gt; &lt;br /&gt;
      &amp;lt;li&amp;gt;[[Unit commitment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Portfolio optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt; Emerging Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Wing shape optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization in game theory]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quantum computing for optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border:1px solid transparent;&amp;quot; |&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5faff;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer Linear Programming (MILP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer cuts]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Disjunctive inequalities]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lagrangean duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Column generation algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Heuristic algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Local branching]]&amp;lt;/li&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer NonLinear Programming (MINLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Signomial problems]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer linear fractional programming (MILFP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Convex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nonconvex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and bound (BB) for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Generalized Benders decomposition (GBD)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Outer-approximation (OA)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Extended cutting plane (ECP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization under Uncertainty&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Chance-constraint method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Fuzzy programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Classical robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adaptive robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Data driven robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization for Machine Learning and Data Analytics&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic gradient descent]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Momentum]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdaGrad]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[RMSProp]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Frank-Wolfe]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sparse Reconstruction with Compressed Sensing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adadelta]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adafactor]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdamW]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adamax]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[FTRL algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lion algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[LossScaleOptimizer]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nadam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Black-box Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bayesian optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Genetic algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simulated annealing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Particle swarm optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Differential evolution]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sponsor ==&lt;br /&gt;
[[File:Peese-logo.jpg|Cornell Prof. Fengqi You Research Group |link=https://www.peese.org]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=6743</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Main_Page&amp;diff=6743"/>
		<updated>2024-12-05T20:24:28Z</updated>

		<summary type="html">&lt;p&gt;Wc593: Added Fall 2024 new topics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;mp-topbanner&amp;quot; style=&amp;quot;width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ddd;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:61%; color:#000;&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;width:100%; border:none; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; white-space:nowrap; color:#000;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#000;&amp;quot;&amp;gt;Welcome to the Cornell University Computational Optimization Open Textbook&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This electronic textbook is a student-contributed open-source text covering a variety of topics on process optimization.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If you have any comments or suggestions on this open textbook, please contact [https://www.engineering.cornell.edu/faculty-directory/fengqi-you  Professor Fengqi You].&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| id=&amp;quot;mp-upper&amp;quot; style=&amp;quot;width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;&amp;quot; |&lt;br /&gt;
{| id=&amp;quot;mp-left&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5fffa;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px;&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Linear Programming (LP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;&amp;quot; | &amp;lt;div id=&amp;quot;mp-tfa&amp;quot; style=&amp;quot;padding:2px 5px 5px 15px&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simplex algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Computational complexity]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Network flow problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for LP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization with absolute values]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Matrix game (LP for game theory)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;NonLinear Programming (NLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Line search methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Trust-region methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Interior-point method for NLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Conjugate gradient methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quasi-Newton methods]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sequential quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Subgradient optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mathematical programming with equilibrium constraints]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Dynamic optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Geometric programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nondifferentiable Optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Evolutionary multimodal optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stackelberg leadership model]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic constrained quadratic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Derivative free optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Deterministic Global Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Exponential transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Logarithmic transformation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[McCormick envelopes]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Piecewise linear approximation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Spatial branch and bound method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Dynamic Programming&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Markov decision process]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bellman equation]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Eight step procedures]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic dynamic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; style=&amp;quot;margin:3px; background:#cef2e0; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Traditional Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Facility location problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Traveling salesman problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Set covering problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quadratic assignment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Job shop scheduling]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Newsvendor problem]]&amp;lt;/li&amp;gt; &lt;br /&gt;
      &amp;lt;li&amp;gt;[[Unit commitment problem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Portfolio optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border:1px solid transparent;&amp;quot; |&lt;br /&gt;
| class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; style=&amp;quot;width:100%; vertical-align:top; background:#f5faff;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer Linear Programming (MILP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer cuts]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Disjunctive inequalities]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lagrangean duality]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Column generation algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Heuristic algorithms]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Local branching]]&amp;lt;/li&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Mixed-Integer NonLinear Programming (MINLP)&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-otd&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Signomial problems]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Mixed-integer linear fractional programming (MILFP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Convex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nonconvex generalized disjunctive programming (GDP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and bound (BB) for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Branch and cut for MINLP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Generalized Benders decomposition (GBD)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Outer-approximation (OA)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Extended cutting plane (ECP)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization under Uncertainty&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Chance-constraint method]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Fuzzy programming]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Classical robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adaptive robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Data driven robust optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Optimization for Machine Learning and Data Analytics&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Stochastic gradient descent]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Momentum]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdaGrad]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[RMSProp]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Frank-Wolfe]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Sparse Reconstruction with Compressed Sensing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adadelta]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adafactor]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[AdamW]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Adamax]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[FTRL algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Lion algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[LossScaleOptimizer]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Nadam]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Black-box Optimization&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Bayesian optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Genetic algorithm]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Simulated annealing]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Particle swarm optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Differential evolution]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;padding:2px&amp;quot; | &amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; style=&amp;quot;margin:3px; background:#cedff2; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;&amp;gt;Emerging Applications&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#000;padding:2px 5px 5px 15px&amp;quot; | &amp;lt;div id=&amp;quot;mp-dyk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Wing shape optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Optimization in game theory]]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;[[Quantum computing for optimization]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sponsor ==&lt;br /&gt;
[[File:Peese-logo.jpg|Cornell Prof. Fengqi You Research Group |link=https://www.peese.org]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2743</id>
		<title>Adam</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2743"/>
		<updated>2020-12-21T11:43:09Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Nicholas Kincaid (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Adam &amp;lt;ref name=&amp;quot;adam&amp;quot;&amp;gt; Kingma, Diederik P., and Jimmy Lei Ba. Adam: A Method for Stochastic Optimization. 3rd International Conference on Learning Representations, ICLR 2015 - Conference Track Proceedings, 2015, pp. 1–15.&amp;lt;/ref&amp;gt; is a variant of gradient descent that has become widely popular in the machine learning community. Presented in 2015, the Adam algorithm is often recommended as the default algorithm for training neural networks as it has shown improved performance over other variants of gradient descent algorithms for a wide range of problems. Adam&#039;s name is derived from adaptive moment estimation because uses estimates of the first and second moments of the gradient to perform updates, which can be seen as incorporating gradient descent with momentum (the first-order moment) and [https://optimization.cbe.cornell.edu/index.php?title=RMSProp RMSProp] algorithm&amp;lt;ref&amp;gt;Tieleman, Tijmen, and Hinton, Geoffrey. Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent magnitude, COURSERA: Neural Networks for Machine Learning, 2012.&amp;lt;/ref&amp;gt; (the second-order moment).&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Batch Gradient Descent ===&lt;br /&gt;
In standard batch gradient descent, the parameters, &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, of the objective function &amp;lt;math&amp;gt;f(\theta)&amp;lt;/math&amp;gt;, are updated based on the gradient of &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; with respect to &lt;br /&gt;
&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; for the entire training dataset, as&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; g_t =\nabla_{\theta_{t-1}} f \big(\theta_{t-1} \big) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha g_t , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; is defined as the learning rate and is a hyper-parameter of the optimization algorithm, and &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; is the iteration number. Key challenges of the standard gradient descent method are the tendency to get stuck in local minima and/or saddle points of the objective function, as well as choosing a proper learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, which can lead to poor convergence.&amp;lt;ref&amp;gt;Ruder, Sebastian. An Overview of Gradient Descent Optimization Algorithms, 2016, pp. 1–14, http://arxiv.org/abs/1609.04747.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Gradient Descent ===&lt;br /&gt;
Another variant of gradient descent is [https://optimization.cbe.cornell.edu/index.php?title=Stochastic_gradient_descent stochastic gradient descent (SGD)], the gradient is computed and parameters are updated as in equation 1, but for each training sample in the training set. &lt;br /&gt;
=== Mini-Batch Gradient Descent ===&lt;br /&gt;
In between batch gradient descent and stochastic gradient descent, mini-batch gradient descent computes parameters updates on the gradient computed from a subset of the training set, where the size of the subset is often referred to as the batch size.&lt;br /&gt;
&lt;br /&gt;
== Adam Algorithm ==&lt;br /&gt;
The Adam algorithm first computes the gradient, &amp;lt;math&amp;gt;g_t&amp;lt;/math&amp;gt; of the objective function with respect to the parameters &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, but then computes and stores first and second order moments of the gradient, &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;&lt;br /&gt;
respectively, as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2, &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt; are hyper-parameters that are &amp;lt;math&amp;gt;\in [0,1]&amp;lt;/math&amp;gt;. These parameters can seen as exponential decay rates of the estimated moments, as the previous value is successively multiplied by the value less than 1 in each iteration. The authors of the original paper suggest values &amp;lt;math&amp;gt;\beta_1 = 0.9&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2 = 0.999&amp;lt;/math&amp;gt;. In the current notation, the first iteration of the algorithm is at &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; and both, &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; are initialized to zero. Since both moments are initialized to zero, at early time steps, these values are biased towards zero. To counter this, the authors proposed a corrected update to &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt; as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_t = m_t / (1-\beta_1 ^t) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_t = v_t / (1-\beta_2 ^t). &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Finally, the parameter update is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha \cdot \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon), &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; is a small constant for stability. The authors recommend a value of &amp;lt;math&amp;gt;\epsilon=10^{-8}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
&lt;br /&gt;
[[File:Contour.png|thumb|Contour plot of the loss function showing the trajectory of Adam algorithm from the initial point]]&lt;br /&gt;
&lt;br /&gt;
[[File:Model fit .png|thumb|Plot showing original data points and resulting model fit from the Adam algorithm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To illustrate how updates occur in the Adam algorithm, consider a linear, least-squares regression problem formulation. The table below shows a sample data-set of student exam grades and the number of hours spent studying for the exam. The goal of this example will be to generate a linear model to predict exam grades as a function of time spent studying.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Hours Studying || 9.0 || 4.9 || 1.6 || 1.9 || 7.9 || 2.0 || 11.5 || 3.9 || 1.1 || 1.6 || 5.1 || 8.2 || 7.3 || 10.4 || 11.2&lt;br /&gt;
|-&lt;br /&gt;
| Exam Grad || 88.0 || 72.3 || 66.5 || 65.1 || 79.5 || 60.8 || 94.3, || 66.7 || 65.4 || 63.8 || 68.4 || 82.5 || 75.9 || 87.8 || 85.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The hypothesized model function will be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_\theta(x) = \theta_0 + \theta_1 x.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cost function is defined as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; J({\theta}) =  \frac{1}{2}\sum_i^n \big(f_\theta(x_i) - y_i \big)^2, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt; coefficient is used only to make the derivatives cleaner. The optimization problem can then be formulated as trying to find the values of &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; that minimize the squared residuals of &amp;lt;math&amp;gt;f_\theta(x)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \mathrm{argmin}_{\theta} \quad \frac{1}{n}\sum_{i}^n \big(f_\theta(x_i) - y_i \big) ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, parameters will be updated after every data point i.e. a batch size of 1. For a single data point the derivatives of the cost function with respect to &amp;lt;math&amp;gt;\theta_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big(f_\theta(x) - y \big)   &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big(f_\theta(x) - y \big) x &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial values of &amp;lt;math&amp;gt;{\theta}&amp;lt;/math&amp;gt; will be set to [50, 1] and  The learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, is set to 0.1 and the suggested parameters for &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; are used. With the first data sample of &amp;lt;math&amp;gt; (x,y)=[8.98, 88.01]&amp;lt;/math&amp;gt;, the computed gradients are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big((50 + 1\cdot 9 - 88.01 \big) = -29.0  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big((50 + 1\cdot 9 - 88.01 \big)\cdot 9.0 = -261  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; being initialized to zero, the calculations of &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_1 = 0.9 \cdot 0 + (1-0.9) \cdot \begin{bmatrix} -29\\ -261 \end{bmatrix} = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_1 = 0.999\cdot 0 + (1-0.999) \cdot \begin{bmatrix} -29^2\\-261^2 \end{bmatrix} = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix} , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bias-corrected terms are computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_1 = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} \frac{1}{ (1-0.9^1)} =  \begin{bmatrix} -29.0\\-261.1\end{bmatrix}&amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_1 = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix}  \frac{1} {(1-0.999^1)} = \begin{bmatrix} 851.5\\68168\end{bmatrix}. &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the parameter update is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_0 = 50 - 0.1 \cdot -29 / (\sqrt{851.5} + 10^{-8}) = 50.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_1 = 1 - 0.1 \cdot -261 / (\sqrt{68168} + 10^{-8}) = 1.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This procedure is repeated until the parameters have converged, giving &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; values of &amp;lt;math&amp;gt;[58.98, 2.72]&amp;lt;/math&amp;gt;. The figures to the right show the trajectory of the Adam algorithm over a contour plot of the objective function and the resulting model fit. It should be noted that the stochastic gradient descent algorithm with a learning rate of 0.1 diverges and with a rate of 0.01, SGD oscillates around the global minimum due to the large magnitudes of the gradient in the &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
[[File:Adam training.png|thumb|Comparison of training a multilayer neural network on MNIST images for different gradient descent algorithms published in the original Adam paper (Kingma, 2015)&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
The Adam optimization algorithm has been widely used in machine learning applications to train model parameters. When used with backpropagation, the Adam algorithm has been shown to be a very robust and efficient method for training artificial neural networks and is capable of working well with a variety of structures and applications. In their original paper, the authors present three different training examples, logistic regression, multi-layer neural networks for classification of MNIST images, and a convolutional neural network (CNN). The training results from the original Adam paper showing the objective function cost vs. the iteration over the entire data set for the multi-layer neural network is shown to the right.&lt;br /&gt;
&lt;br /&gt;
== Variants of Adam ==&lt;br /&gt;
=== AdaMax ===&lt;br /&gt;
AdaMax&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt; is a variant of the Adam algorithm proposed in the original Adam paper that uses an exponentially weighted infinity norm instead of the second-order moment estimate. The weighted infinity norm updated &amp;lt;math&amp;gt;u_t&amp;lt;/math&amp;gt;, is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; u_t = \max(\beta_2 \cdot u_{t-1}, |g_t|). &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter update then becomes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - (\alpha / (1-\beta_1^t)) \cdot m_t / u_t. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nadam ===&lt;br /&gt;
The Nadam algorithm&amp;lt;ref&amp;gt;Dozat, Timothy. Incorporating Nesterov Momentum into Adam. ICLR Workshop, no. 1, 2016, pp. 2013–16. &amp;lt;/ref&amp;gt; was proposed in 2016 and incorporates the Nesterov Accelerate Gradient (NAG)&amp;lt;ref&amp;gt;Nesterov, Yuri. A method of solving a convex programming problem with convergence rate O(1/k^2). In Soviet Mathematics Doklady, 1983, pp. 372-376.&amp;lt;/ref&amp;gt;, a popular momentum like SGD variation, into the first-order moment term. &lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Adam is a variant of the gradient descent algorithm that has been widely adopted in the machine learning community. Adam can be seen as the combination of two other variants of gradient descent, SGD with momentum and RMSProp. Adam uses estimations of the first and second-order moments of the gradient to adapt the parameter update. These moment estimations are computed via moving averages,&amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;, of the gradient and the squared gradient respectfully. In a variety of neural network training applications, Adam has shown increased convergence and robustness over other gradient descent algorithms and is often recommended as the default optimizer for training.&amp;lt;ref&amp;gt; &amp;quot;Neural Networks Part 3: Learning and Evaluation,&amp;quot; CS231n: Convolutional Neural Networks for Visual Recognition, Stanford Unversity, 2020&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2742</id>
		<title>Adam</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2742"/>
		<updated>2020-12-21T11:42:55Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Nicholas Kincaid (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Adam &amp;lt;ref name=&amp;quot;adam&amp;quot;&amp;gt; Kingma, Diederik P., and Jimmy Lei Ba. Adam: A Method for Stochastic Optimization. 3rd International Conference on Learning Representations, ICLR 2015 - Conference Track Proceedings, 2015, pp. 1–15.&amp;lt;/ref&amp;gt; is a variant of gradient descent that has become widely popular in the machine learning community. Presented in 2015, the Adam algorithm is often recommended as the default algorithm for training neural networks as it has shown improved performance over other variants of gradient descent algorithms for a wide range of problems. Adam&#039;s name is derived from adaptive moment estimation because uses estimates of the first and second moments of the gradient to perform updates, which can be seen as incorporating gradient descent with momentum (the first-order moment) and [https://optimization.cbe.cornell.edu/index.php?title=RMSProp RMSProp] algorithm&amp;lt;ref&amp;gt;Tieleman, Tijmen, and Hinton, Geoffrey. Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent magnitude, COURSERA: Neural Networks for Machine Learning, 2012.&amp;lt;/ref&amp;gt; (the second-order moment).&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Batch Gradient Descent ===&lt;br /&gt;
In standard batch gradient descent, the parameters, &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, of the objective function &amp;lt;math&amp;gt;f(\theta)&amp;lt;/math&amp;gt;, are updated based on the gradient of &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; with respect to &lt;br /&gt;
&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; for the entire training dataset, as&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; g_t =\nabla_{\theta_{t-1}} f \big(\theta_{t-1} \big) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha g_t , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; is defined as the learning rate and is a hyper-parameter of the optimization algorithm, and &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; is the iteration number. Key challenges of the standard gradient descent method are the tendency to get stuck in local minima and/or saddle points of the objective function, as well as choosing a proper learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, which can lead to poor convergence.&amp;lt;ref&amp;gt;Ruder, Sebastian. An Overview of Gradient Descent Optimization Algorithms, 2016, pp. 1–14, http://arxiv.org/abs/1609.04747.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Gradient Descent ===&lt;br /&gt;
Another variant of gradient descent is [https://optimization.cbe.cornell.edu/index.php?title=Stochastic_gradient_descent stochastic gradient descent (SGD)], the gradient is computed and parameters are updated as in equation 1, but for each training sample in the training set. &lt;br /&gt;
=== Mini-Batch Gradient Descent ===&lt;br /&gt;
In between batch gradient descent and stochastic gradient descent, mini-batch gradient descent computes parameters updates on the gradient computed from a subset of the training set, where the size of the subset is often referred to as the batch size.&lt;br /&gt;
&lt;br /&gt;
== Adam Algorithm ==&lt;br /&gt;
The Adam algorithm first computes the gradient, &amp;lt;math&amp;gt;g_t&amp;lt;/math&amp;gt; of the objective function with respect to the parameters &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, but then computes and stores first and second order moments of the gradient, &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;&lt;br /&gt;
respectively, as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2, &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt; are hyper-parameters that are &amp;lt;math&amp;gt;\in [0,1]&amp;lt;/math&amp;gt;. These parameters can seen as exponential decay rates of the estimated moments, as the previous value is successively multiplied by the value less than 1 in each iteration. The authors of the original paper suggest values &amp;lt;math&amp;gt;\beta_1 = 0.9&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2 = 0.999&amp;lt;/math&amp;gt;. In the current notation, the first iteration of the algorithm is at &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; and both, &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; are initialized to zero. Since both moments are initialized to zero, at early time steps, these values are biased towards zero. To counter this, the authors proposed a corrected update to &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt; as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_t = m_t / (1-\beta_1 ^t) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_t = v_t / (1-\beta_2 ^t). &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Finally, the parameter update is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha \cdot \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon), &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; is a small constant for stability. The authors recommend a value of &amp;lt;math&amp;gt;\epsilon=10^{-8}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
&lt;br /&gt;
[[File:Contour.png|thumb|Contour plot of the loss function showing the trajectory of Adam algorithm from the initial point]]&lt;br /&gt;
&lt;br /&gt;
[[File:Model fit .png|thumb|Plot showing original data points and resulting model fit from the Adam algorithm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To illustrate how updates occur in the Adam algorithm, consider a linear, least-squares regression problem formulation. The table below shows a sample data-set of student exam grades and the number of hours spent studying for the exam. The goal of this example will be to generate a linear model to predict exam grades as a function of time spent studying.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Hours Studying || 9.0 || 4.9 || 1.6 || 1.9 || 7.9 || 2.0 || 11.5 || 3.9 || 1.1 || 1.6 || 5.1 || 8.2 || 7.3 || 10.4 || 11.2&lt;br /&gt;
|-&lt;br /&gt;
| Exam Grad || 88.0 || 72.3 || 66.5 || 65.1 || 79.5 || 60.8 || 94.3, || 66.7 || 65.4 || 63.8 || 68.4 || 82.5 || 75.9 || 87.8 || 85.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The hypothesized model function will be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_\theta(x) = \theta_0 + \theta_1 x.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cost function is defined as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; J({\theta}) =  \frac{1}{2}\sum_i^n \big(f_\theta(x_i) - y_i \big)^2, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt; coefficient is used only to make the derivatives cleaner. The optimization problem can then be formulated as trying to find the values of &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; that minimize the squared residuals of &amp;lt;math&amp;gt;f_\theta(x)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \mathrm{argmin}_{\theta} \quad \frac{1}{n}\sum_{i}^n \big(f_\theta(x_i) - y_i \big) ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, parameters will be updated after every data point i.e. a batch size of 1. For a single data point the derivatives of the cost function with respect to &amp;lt;math&amp;gt;\theta_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big(f_\theta(x) - y \big)   &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big(f_\theta(x) - y \big) x &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial values of &amp;lt;math&amp;gt;{\theta}&amp;lt;/math&amp;gt; will be set to [50, 1] and  The learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, is set to 0.1 and the suggested parameters for &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; are used. With the first data sample of &amp;lt;math&amp;gt; (x,y)=[8.98, 88.01]&amp;lt;/math&amp;gt;, the computed gradients are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big((50 + 1\cdot 9 - 88.01 \big) = -29.0  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big((50 + 1\cdot 9 - 88.01 \big)\cdot 9.0 = -261  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; being initialized to zero, the calculations of &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_1 = 0.9 \cdot 0 + (1-0.9) \cdot \begin{bmatrix} -29\\ -261 \end{bmatrix} = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_1 = 0.999\cdot 0 + (1-0.999) \cdot \begin{bmatrix} -29^2\\-261^2 \end{bmatrix} = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix} , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bias-corrected terms are computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_1 = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} \frac{1}{ (1-0.9^1)} =  \begin{bmatrix} -29.0\\-261.1\end{bmatrix}&amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_1 = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix}  \frac{1} {(1-0.999^1)} = \begin{bmatrix} 851.5\\68168\end{bmatrix}. &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the parameter update is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_0 = 50 - 0.1 \cdot -29 / (\sqrt{851.5} + 10^{-8}) = 50.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_1 = 1 - 0.1 \cdot -261 / (\sqrt{68168} + 10^{-8}) = 1.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This procedure is repeated until the parameters have converged, giving &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; values of &amp;lt;math&amp;gt;[58.98, 2.72]&amp;lt;/math&amp;gt;. The figures to the right show the trajectory of the Adam algorithm over a contour plot of the objective function and the resulting model fit. It should be noted that the stochastic gradient descent algorithm with a learning rate of 0.1 diverges and with a rate of 0.01, SGD oscillates around the global minimum due to the large magnitudes of the gradient in the &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
[[File:Adam training.png|thumb|Comparison of training a multilayer neural network on MNIST images for different gradient descent algorithms published in the original Adam paper (Kingma, 2015)&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
The Adam optimization algorithm has been widely used in machine learning applications to train model parameters. When used with backpropagation, the Adam algorithm has been shown to be a very robust and efficient method for training artificial neural networks and is capable of working well with a variety of structures and applications. In their original paper, the authors present three different training examples, logistic regression, multi-layer neural networks for classification of MNIST images, and a convolutional neural network (CNN). The training results from the original Adam paper showing the objective function cost vs. the iteration over the entire data set for the multi-layer neural network is shown to the right.&lt;br /&gt;
&lt;br /&gt;
== Variants of Adam ==&lt;br /&gt;
=== AdaMax ===&lt;br /&gt;
AdaMax&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt; is a variant of the Adam algorithm proposed in the original Adam paper that uses an exponentially weighted infinity norm instead of the second-order moment estimate. The weighted infinity norm updated &amp;lt;math&amp;gt;u_t&amp;lt;/math&amp;gt;, is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; u_t = \max(\beta_2 \cdot u_{t-1}, |g_t|). &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter update then becomes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - (\alpha / (1-\beta_1^t)) \cdot m_t / u_t. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nadam ===&lt;br /&gt;
The Nadam algorithm&amp;lt;ref&amp;gt;Dozat, Timothy. Incorporating Nesterov Momentum into Adam. ICLR Workshop, no. 1, 2016, pp. 2013–16. &amp;lt;/ref&amp;gt; was proposed in 2016 and incorporates the Nesterov Accelerate Gradient (NAG)&amp;lt;ref&amp;gt;Nesterov, Yuri. A method of solving a convex programming problem with convergence rate O(1/k^2). In Soviet Mathematics Doklady, 1983, pp. 372-376.&amp;lt;/ref&amp;gt;, a popular momentum like SGD variation, into the first-order moment term. &lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Adam is a variant of the gradient descent algorithm that has been widely adopted in the machine learning community. Adam can be seen as the combination of two other variants of gradient descent, SGD with momentum and RMSProp. Adam uses estimations of the first and second-order moments of the gradient to adapt the parameter update. These moment estimations are computed via moving averages,&amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;, of the gradient and the squared gradient respectfully. In a variety of neural network training applications, Adam has shown increased convergence and robustness over other gradient descent algorithms and is often recommended as the default optimizer for training.&amp;lt;ref&amp;gt; &amp;quot;Neural Networks Part 3: Learning and Evaluation,&amp;quot; CS231n: Convolutional Neural Networks for Visual Recognition, Stanford Unversity, 2020&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Stochastic_gradient_descent&amp;diff=2741</id>
		<title>Stochastic gradient descent</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Stochastic_gradient_descent&amp;diff=2741"/>
		<updated>2020-12-21T11:41:40Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Jonathon Price, Alfred Wong, Tiancheng Yuan, Joshua Mathews, Taiwo Olorunniwo (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&#039;&#039;&#039;Stochastic gradient descent&#039;&#039;&#039; (abbreviated as &#039;&#039;&#039;SGD&#039;&#039;&#039;) is an iterative method often used for [https://en.wikipedia.org/wiki/Machine_learning machine learning], optimizing the [https://en.wikipedia.org/wiki/Gradient_descent gradient descent] during each search once a random weight vector is picked. The gradient descent is a strategy that searches through a large or infinite hypothesis space whenever 1) there are hypotheses continuously being parameterized and 2) the errors are differentiable based on the parameters. The problem with gradient descent is that [https://en.wikipedia.org/wiki/Convergence_(logic) converging] to a [https://en.wikipedia.org/wiki/Maxima_and_minima local minimum] takes extensive time and determining a global minimum is not guaranteed.&amp;lt;ref name=McGrawHill2003&amp;gt;Mitchell, T. M. (1997). Machine Learning (1st ed.). McGraw-Hill Education. Page 92. ISBN 0070428077.&amp;lt;/ref&amp;gt; In SGD, the user initializes the weights and the process updates the weight vector using one data point&amp;lt;ref name=&amp;quot;bishop&amp;quot; /&amp;gt;. The gradient descent continuously updates it incrementally when an error calculation is completed to improve convergence.&amp;lt;ref name=&amp;quot;Needell=&amp;quot;&amp;gt;Needell, D., Srebro, N., &amp;amp; Ward, R. (2015, January). Stochastic gradient descent weighted sampling, and the randomized Kaczmarz algorithm. https://arxiv.org/pdf/1310.5715.pdf&amp;lt;/ref&amp;gt; The method seeks to determine the steepest descent and it reduces the number of [https://en.wikipedia.org/wiki/Iteration iterations] and the time taken to search large quantities of data points. Over the recent years, the data sizes have increased immensely such that current processing capabilities are not enough.&amp;lt;ref name=Bottou1991&amp;gt;Bottou, L. (1991) Stochastic gradient learning in neural networks. Proceedings of Neuro-Nımes, 91. https://leon.bottou.org/publications/pdf/nimes-1991.pdf&amp;lt;/ref&amp;gt; Stochastic gradient descent is being used in [https://en.wikipedia.org/wiki/Neural_network neural networks] and decreases machine computation time while increasing complexity and performance for large-scale problems.&amp;lt;ref name=bottou2012&amp;gt;Bottou, L. (2012) Stochastic gradient descent tricks. In Neural Networks: Tricks of the Trade, 421– 436. Springer.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
[[File:Gradient Descent Visualization.png|alt=Visualization of the gradient descent algorithm|thumb|Visualization of the gradient descent algorithm&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;Lau, S., Gonzalez, J., Nolan, D. (2020) &amp;lt;nowiki&amp;gt;https://www.textbook.ds100.org/ch/11/gradient_stochastic.html&amp;lt;/nowiki&amp;gt;&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
SGD is a variation on gradient descent, also called batch gradient descent. As a review, gradient descent seeks to minimize an objective function &amp;lt;math&amp;gt;J(\theta)&amp;lt;/math&amp;gt; by iteratively updating each parameter &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; by a small amount based on the negative gradient of a given data set. The steps for performing gradient descent are as follows:&amp;lt;blockquote&amp;gt;Step 1: Select a learning rate &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 2: Select initial parameter values &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; as the starting point&lt;br /&gt;
&lt;br /&gt;
Step 3: Update all parameters from the gradient of the training data set, i.e. compute &amp;lt;math&amp;gt;\theta_{i+1}=\theta_i-\alpha\times{\nabla_\theta}J(\theta)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4: Repeat Step 3 until a local minima is reached&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under batch gradient descent, the gradient, &amp;lt;math&amp;gt;{\nabla_\theta}J(\theta)&amp;lt;/math&amp;gt;, is calculated at every step against a full [[wikipedia:Data_set|data set]]. When the training data is large, [[wikipedia:Computation|computation]] may be slow or require large amounts of [[wikipedia:Computer_memory#:~:text=In%20computing%2C%20memory%20refers%20to,or%20related%20computer%20hardware%20device.&amp;amp;text=Examples%20of%20non%2Dvolatile%20memory,storing%20firmware%20such%20as%20BIOS).|computer memory]].&amp;lt;ref name=&amp;quot;bishop&amp;quot;&amp;gt;Bishop, C. M. (2006). Pattern Recognition and Machine Learning (Information Science and Statistics). Springer.&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:Visualization of stochastic gradient descent.png|alt=Visualization of the stochastic gradient descent algorithm|thumb|Visualization of the stochastic gradient descent algorithm&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
===== Stochastic Gradient Descent Algorithm =====&lt;br /&gt;
SGD modifies the batch gradient descent [https://en.wikipedia.org/wiki/Algorithm algorithm] by calculating the gradient for only one training example at every iteration.&amp;lt;ref name=ruder&amp;gt;Ruder, S. (2020, March 20). An overview of gradient descent optimization algorithms. Sebastian Ruder. https://ruder.io/optimizing-gradient-descent/index.html#batchgradientdescent&amp;lt;/ref&amp;gt; The steps for performing SGD are as follows: &amp;lt;blockquote&amp;gt;Step 1: Randomly shuffle the data set of size m &lt;br /&gt;
&lt;br /&gt;
Step 2: Select a learning rate &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Step 3: Select initial parameter values &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; as the starting point &lt;br /&gt;
&lt;br /&gt;
Step 4: Update all parameters from the gradient of a single training example &amp;lt;math&amp;gt;x^j, y^j&amp;lt;/math&amp;gt;, i.e. compute &amp;lt;math&amp;gt;\theta_{i+1}=\theta_i-\alpha\times{\nabla_\theta}J(\theta;x^j;y^j)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Step 5: Repeat Step 4 until a local minimum is reached &amp;lt;/blockquote&amp;gt;By calculating the gradient for one data set per iteration, SGD takes a less direct route towards the local minimum. However, SGD has the advantage of having the ability to [https://en.wikipedia.org/wiki/Increment_and_decrement_operators incrementally] update an objective function &amp;lt;math&amp;gt;J(\theta)&amp;lt;/math&amp;gt; when new training data is available at minimum cost.&lt;br /&gt;
&lt;br /&gt;
===== Learning Rate =====&lt;br /&gt;
The [https://en.wikipedia.org/wiki/Learning_rate learning rate] is used to calculate the step size at every iteration. Too large a learning rate and the step sizes may overstep too far past the optimum value. Too small a learning rate may require many iterations to reach a [https://en.wikipedia.org/wiki/Maxima_and_minima local minimum]. A good starting point for the learning rate is 0.1 and adjust as necessary.&amp;lt;ref&amp;gt;Srinivasan, A. (2019, September) Stochastic Gradient Descent — Clearly Explained. https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53d239905d31&amp;lt;/ref&amp;gt;&lt;br /&gt;
===== Mini-Batch Gradient Descent =====&lt;br /&gt;
A variation on stochastic gradient descent is the mini-batch gradient descent. In SGD, the gradient is computed on only one training example and may result in a large number of iterations required to converge on a local minimum. Mini-batch gradient descent offers a compromise between batch gradient descent and SGD by splitting the training data into smaller batches. The steps for performing mini-batch gradient descent are identical to SGD with one exception - when updating the parameters from the gradient, rather than calculating the gradient of a single training example, the gradient is calculated against a batch size of &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; training examples, i.e. compute &amp;lt;math&amp;gt;\theta_{i+1}=\theta_i-\alpha\times{\nabla_\theta}J(\theta;x^{j:j+n};y^{j:j+n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
===== Data preparation =====&lt;br /&gt;
Consider a simple 2-D data set with only 6 data points (each point has &amp;lt;math&amp;gt;x_1, x_2&amp;lt;/math&amp;gt;), and each data point have a label value &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; assigned to them.&lt;br /&gt;
===== Model overview =====&lt;br /&gt;
For the purpose of demonstrating the computation of the SGD process, simply employ a linear regression model:  &amp;lt;math&amp;gt;y = w_1\ x_1 + w_2\ x_2 + b &amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;w_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;w_2&amp;lt;/math&amp;gt; are weights and &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; is the constant term.  In this case, the goal of this model is to find the best value for &amp;lt;math&amp;gt;w_1, w_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, based on the datasets.&lt;br /&gt;
===== Definition of loss function =====&lt;br /&gt;
In this example, the loss function should be l2 norm square, that is  &amp;lt;math&amp;gt;L = (\widehat{y} - y)^2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
===== Forward =====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Initial Weights:&#039;&#039;&#039;&lt;br /&gt;
The linear regression model starts by [https://en.wikipedia.org/wiki/Initialization_(programming) initializing] the weights &amp;lt;math&amp;gt;w_1, w_2&amp;lt;/math&amp;gt; and setting the bias term at 0.  In this case, initiate [&amp;lt;math&amp;gt;w_1, w_2&amp;lt;/math&amp;gt;] = [-0.044, -0.042].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dataset:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For this problem, the batch size is set to 1 and the entire dataset of [ &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;] is given by:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 8 || -14&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 2 || -1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 4 || -7&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 7 || -8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Gradient Computation and Parameter Update =====&lt;br /&gt;
The purpose of BP is to obtain the impact of the weights and bias terms for the entire model.  The update of the model is entirely dependent on the gradient values. To minimize the loss during the process, the model needs to ensure the gradient is dissenting so that it could finally converge to a global optimal point.  All the 3 partial differential equations are shown as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\omega_1^&#039; = \omega_1 - \eta\ {\partial L\over\partial \omega_1} = \omega_1 - \eta\ {\partial L\over\partial \widehat{y}}\cdot {\partial \widehat{y}\over\partial \omega_1} = \omega_1 - \eta\ [2(\widehat{y} - y)\cdot x_1] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\omega_2^&#039; = \omega_2 - \eta\ {\partial L\over\partial \omega_2} = \omega_2 - \eta\ {\partial L\over\partial \widehat{y}}\cdot {\partial \widehat{y}\over\partial \omega_2} = \omega_2 - \eta\ [2(\widehat{y} - y)\cdot x_2]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b^&#039; = b - \eta\ {\partial L\over\partial b} = b - \eta\ {\partial L\over\partial \widehat{y}}\cdot {\partial \widehat{y}\over\partial b} = b - \eta\ [2(\widehat{y} - y)\cdot 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt; stands for the learning rate and in this model, is set to be 0.05.  To update each parameter, simply substitute the value of resulting &amp;lt;math&amp;gt;\widehat{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Use the first data point [&amp;lt;math&amp;gt;x_1, x_2&amp;lt;/math&amp;gt;] = [4, 1] and the corresponding &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; being 2.  The &amp;lt;math&amp;gt;\widehat{y}&amp;lt;/math&amp;gt; the model gave should be -0.2.  Now with &amp;lt;math&amp;gt;\widehat{y}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; value, update the new parameters as [0.843, 0.179, 0.222] = [&amp;lt;math&amp;gt;w&#039;_1, w&#039;_2, b&#039;&amp;lt;/math&amp;gt;].  That marks the end of iteration 1.&lt;br /&gt;
&lt;br /&gt;
Now, iteration 2 begins, with the next data point [2, 8] and the label -14.  The estimation , &amp;lt;math&amp;gt;\widehat{y}&amp;lt;/math&amp;gt; is now 3.3.  With the new &amp;lt;math&amp;gt;\widehat{y}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; value, once again, we update the weight as [-2.625, -13.696, 1.513]. And that marks the end of iteration 2.&lt;br /&gt;
&lt;br /&gt;
Keep on updating the model through additional iterations to output [&amp;lt;math&amp;gt;w_1, w_2, b&amp;lt;/math&amp;gt;] = [-19.021, -35.812, -1.232].&lt;br /&gt;
&lt;br /&gt;
This is just a simple demonstration of the SGD process.  In actual practice, more epochs can be utilized to run through the entire dataset enough times to ensure the best learning results based on the training dataset&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Lawrence, S., &amp;amp; Giles, C. L. (2000). Overfitting and neural networks: conjugate gradient and backpropagation. Proceedings of the IEEE-INNS-ENNS International Joint Conference on Neural Networks. IJCNN 2000. Neural Computing: New Challenges and Perspectives for the New Millennium, 1, 114–119. https://doi.org/10.1109/ijcnn.2000.857823&amp;lt;/ref&amp;gt;.  But learning overly specific with the training dataset could sometimes also expose the model to the risk of overfitting&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;.  Therefore, tuning such parameters is quite tricky and often costs days or even weeks before finding the best results.&lt;br /&gt;
&lt;br /&gt;
==Application==&lt;br /&gt;
SGD, often referred to as the cornerstone for deep learning, is an algorithm for training a wide range of models in machine learning. [[wikipedia:Deep_learning|Deep learning]] is a machine learning technique that teaches computers to do what comes naturally to humans. In deep learning, a computer model learns to perform classification tasks directly from images, text, or sound. Models are trained by using a large set of labeled data and neural network architectures that contain many layers. Neural networks make up the backbone of deep learning algorithms. A neural network that consists of more than three layers which would be inclusive of the inputs and the output can be considered a deep learning algorithm. Due to SGD’s efficiency in dealing with large scale datasets, it is the most common method for training [https://en.wikipedia.org/wiki/Deep_learning#Deep_neural_networks deep neural networks]. Furthermore, SGD has received considerable attention and is applied to text classification and [https://en.wikipedia.org/wiki/Natural_language_processing natural language processing]. It is best suited for unconstrained optimization problems and is the main way to train large linear models on very large data sets. Implementation of stochastic gradient descent include areas in [https://en.wikipedia.org/wiki/Tikhonov_regularization ridge regression] and regularized [https://en.wikipedia.org/wiki/Logistic_regression logistic regression]. Other problems, such as Lasso&amp;lt;ref name=&amp;quot;Shwartz&amp;quot;&amp;gt;Shalev-Shwartz, S. and Tewari, A. (2011) Stochastic methods for ℓ&amp;lt;math&amp;gt;_1&amp;lt;/math&amp;gt;-regularized loss minimization. The Journal of Machine Learning Research, 12, 1865–1892. https://www.jmlr.org/papers/volume12/shalev-shwartz11a/shalev-shwartz11a.pdf&amp;lt;/ref&amp;gt; and support vector machines&amp;lt;ref name=Menon&amp;gt;Menon, A. (2009, February). Large-Scale Support Vector Machines: Algorithms and Theory. http://cseweb.ucsd.edu/~akmenon/ResearchExamTalk.pdf&amp;lt;/ref&amp;gt; can be solved by stochastic gradient descent.&lt;br /&gt;
&lt;br /&gt;
===Support Vector Machine===&lt;br /&gt;
SGD is a simple yet very efficient approach to fitting linear classifiers and regressors under convex functions such as (linear) [https://en.wikipedia.org/wiki/Support_vector_machine Support Vector Machines] (SVM). A support vector machine is a supervised machine learning model that uses classification algorithms for two-group classification problems. An SVM finds what is known as a separating hyperplane: a hyperplane (a line, in the two-dimensional case) which separates the two classes of points from one another. It is a fast and dependable classification algorithm that performs very well with a limited amount of data to analyze. However, because SVM is computationally costly, software applications often do not provide sufficient performance in order to meet time requirements for large amounts of data. To improve SVM scalability regarding the size of the data set, SGD algorithms are used as a simplified procedure for evaluating the gradient of a function.&amp;lt;ref name=lopes&amp;gt;Lopes, F.F.; Ferreira, J.C.; Fernandes, M.A.C. Parallel Implementation on FPGA of Support Vector Machines Using Stochastic Gradient Descent. Electronics 2019, 8, 631.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logistic regression===&lt;br /&gt;
Logistic regression models the [https://en.wikipedia.org/wiki/Probability probabilities] for classification problems with two possible outcomes. It&#039;s an extension of the linear regression model for classification problems. It is a statistical technique with the input variables as continuous variables and the output variable as a binary variable. It is a class of regression where the independent variable is used to predict the dependent variable. The objective of training a machine learning model is to minimize the loss or error between ground truths and predictions by changing the trainable parameters. Logistic regression has two phases: training, and testing. The system, specifically the weights w and b, is trained using stochastic gradient descent and the cross-entropy loss. &lt;br /&gt;
&lt;br /&gt;
===Full Waveform Inversion (FWI)===&lt;br /&gt;
The Full Waveform Inversion (FWI) is a [https://en.wikipedia.org/wiki/Geophysical_imaging seismic imaging] process by drawing information from the physical parameters of samples. Companies use the process to produce high-resolution high velocity depictions of subsurface activities. SGD supports the process because it can identify the minima and the overall global minimum in less time as there are many local minimums.&amp;lt;ref name=witte&amp;gt;Witte, P., Louboutin, M., Lensink, K., Lange, M., Kukreja, N., Luporini, F., Gorman, G., Herrmann, F.J.; Full-waveform inversion, Part 3: Optimization. The Leading Edge ; 37 (2): 142–145. doi: https://doi.org/10.1190/tle37020142.1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
SGD is an algorithm that seeks to find the steepest descent during each iteration.  The process decreases the time it takes to search large data sets and determine local minima immensely. The SGD provides many applications in machine learning, geophysics, least mean squares (LMS), and other areas.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Adaptive_robust_optimization&amp;diff=2740</id>
		<title>Adaptive robust optimization</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Adaptive_robust_optimization&amp;diff=2740"/>
		<updated>2020-12-21T11:41:15Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Ralph Wang (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Adaptive Robust Optimization (ARO), also known as adjustable robust optimization, models situations where decision makers make two types of decisions: here-and-now decisions that must be made immediately, and wait-and-see decisions that can be made at some point in the future.&amp;lt;ref&amp;gt;Yanikognlu, I., Gorissen, B. L., den Hertog, D. (2019) A Survey of Adjustable Robust Optimization. &amp;lt;i&amp;gt;European Journal of Operational Research&amp;lt;/i&amp;gt;, (277)3:799-813.&amp;lt;/ref&amp;gt; ARO improves on the robust optimization framework by accounting for any information the decision maker does not know now, but may learn before making future decisions. In the real-world, ARO is applicable whenever past decisions and new information together influence future decisions. Common applications include power systems control, inventory management, shift scheduling, and other resource allocation problems.&amp;lt;ref&amp;gt;B. Hu and L. Wu, &amp;quot;Robust SCUC Considering Continuous/Discrete Uncertainties and Quick-Start Units: A Two-Stage Robust Optimization With Mixed-Integer Recourse,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 2, pp. 1407-1419, March 2016, doi: 10.1109/TPWRS.2015.2418158.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;J. Warrington, C. Hohl, P. J. Goulart and M. Morari, &amp;quot;Rolling Unit Commitment and Dispatch With Multi-Stage Recourse Policies for Heterogeneous Devices,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 1, pp. 187-197, Jan. 2016, doi: 10.1109/TPWRS.2015.2391233.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Chuen-Teck See, Melvyn Sim, (2010) Robust Approximation to Multiperiod Inventory Management. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 58(3):583-594.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Marcus Ang, Yun Fong Lim, Melvyn Sim, (2012) Robust Storage Assignment in Unit-Load Warehouses. &amp;lt;i&amp;gt;Management Science&amp;lt;/i&amp;gt; 58(11):2114-2130.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Mattia, S., Rossi, F., Servilio, M., Smriglio, S. (2017). Staffing and Scheduling Flexible Call Centers by Two-Stage Robust Optimization. &amp;lt;i&amp;gt;Omega&amp;lt;/i&amp;gt; 72:25-37.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Gong, J. and You, F. (2017), Optimal processing network design under uncertainty for producing fuels and value‐added bioproducts from microalgae: Two‐stage adaptive robust mixed integer fractional programming model and computationally efficient solution algorithm. &amp;lt;i&amp;gt;AIChE J.&amp;lt;/i&amp;gt;, 63: 582-600.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compared to traditional robust optimization models, ARO gives less conservative and more realistic solutions, however, this improvement comes at the cost of computation time. Indeed, even the general linear ARO with linear uncertainty is proven computationally intractable.&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt; However, researchers have developed a wide variety of solution and approximation methods for specific types of industrial ARO problems over the past 15 years and the field continues to grow rapidly.&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Zhao, L., &amp;amp; Zeng, B. (2012). An Exact Algorithm for Two-stage Robust Optimization with Mixed Integer Recourse Problems.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Chen, Bokan, &amp;quot;A new trilevel optimization algorithm for the two-stage robust unit commitment problem&amp;quot; (2013). Graduate Theses and Dissertations. 13065.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Shi, H. and You, F. (2016), A computational framework and solution algorithms for two‐stage adaptive robust scheduling of batch manufacturing processes under uncertainty. &amp;lt;i&amp;gt;AIChE J.&amp;lt;/i&amp;gt;, 62: 687-703.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Bertsimias, D., Georghiou, A. (2015). Design of Near Optimal Decision Rules in Multistage Adaptive Mixed-Integer Optimization. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 63(3): 610-627.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Formulation ==&lt;br /&gt;
Suppose, for an optimization problem of interest, &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; is the set of allowed decisions and &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; is a decision in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; be a vector representing the set of parameters of interest in this problem. If the goal is to minimize some function &amp;lt;math&amp;gt;f(u, x)&amp;lt;/math&amp;gt;, and we want &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; to adhere to a set of constraints &amp;lt;math&amp;gt;g(u, x) \leq 0&amp;lt;/math&amp;gt;, then the problem may be formulated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{minimize, choosing x:  } f&amp;amp;(u, x)\\&lt;br /&gt;
&lt;br /&gt;
\text{under constraints:    } g&amp;amp;(u, x) \leq 0\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or more simply:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x) \; &amp;amp;f(u, x)\\&lt;br /&gt;
\text{s.t.  } \; &amp;amp;g(u, x) \leq 0\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this formulation, we call &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; the objective function and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; the constraint function.&lt;br /&gt;
If &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is known, then the problem can be solved using methods such as branch and cut or Karush-Kuhn-Tucker conditions. However, in many real world scenarios, &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is not known. To address this uncertainty, the robust optimization approach generates the set of possible values of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, called the uncertainty set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;, and solves for the decision &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; such that the constraint &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; is satisfied in all cases and &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is optimized for the worst case. The problem can be written as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x)\text{ max}(u)\;&amp;amp;f(u, x)\\&lt;br /&gt;
\text{s.t.}\;&amp;amp;g(u, x) \leq 0 \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adaptive robust optimization expands this robust optimization framework by separating the decision &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; into multiple stages. For simplicity, assume there are two stages of decisions. In the first stage, only the urgent, here-and-now decisions are made. After these decisions are made, the true values of the parameters &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; are revealed, then the remaining, wait-and-see decisions are decided. The model is like a game of poker: the player needs to make initial bets based on incomplete information (the cards in his hand), then makes further bets as more and more cards are dealt. Mathematically, let the set of possible decisions in the first stage be &amp;lt;math&amp;gt;S_1&amp;lt;/math&amp;gt; and the set of possible decisions in the second stage be &amp;lt;math&amp;gt;S_2&amp;lt;/math&amp;gt;, so that the objective and constraint functions become functions of the parameters &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, the first stage decision &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S_1&amp;lt;/math&amp;gt;), and the second stage decision &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S_2&amp;lt;/math&amp;gt;). Then, we can formulate the problem as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \text{min}(x_1)\text{ max}(u)\text{ min}(x_2)\;&amp;amp;f(u, x_1, x_2)\\&lt;br /&gt;
\text{s.t.}\;\;\;&amp;amp;g(u, x_1, x_2) \leq 0 \; \text{for all } u \text{ in } U\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reasoning used in this construction can be extended to multi-stage formulations.&lt;br /&gt;
&lt;br /&gt;
In the literature, adaptive robust optimization problems are usually formulated differently but equivalently. Note that because &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; is selected only after the uncertain parameter &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is revealed, &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; is a function of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;. Expressing &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; as a function of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; allows us to choose the function &amp;lt;math&amp;gt;x_2(u)&amp;lt;/math&amp;gt; before learning &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, which allows the problem to be rewritten as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x_1, x_2(u))\text{ max}(u) \; &amp;amp;f(u, x_1, x_2(u))\\&lt;br /&gt;
\text{s.t.} \; &amp;amp;g(u, x_1, x_2(u)) \leq 0 \; \text{for all } u \text{ in } U \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And if we introduce a variable &amp;lt;math&amp;gt;t = \text{max}(u)\;f(u, x_1, x_2(u))&amp;lt;/math&amp;gt;, then we can rewrite the problem as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x_1, x_2(u), t)\;\;&amp;amp;t\\&lt;br /&gt;
\text{s.t.} \; &amp;amp;f(u, x_1, x_2(u)) \leq t \text{ for all }u\text{ in }U\\&lt;br /&gt;
&amp;amp;g(u, x_1, x_2(u)) \leq 0 \text{ for all }u\text{ in }U\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which allows us to remove &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; from the objective function. Since &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; represents all the variables the decide immediately, &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; can be collapsed into &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;; similarly, the first constraint can be collapsed into the second. This generates the formulation most commonly seen in the literature (up to a change of variable names and functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x_1, x_2(u)) \;&amp;amp;f(x_1)\\&lt;br /&gt;
\text{s.t.}\; &amp;amp;g(u, x_1, x_2(u)) \leq 0 \text{ for all }u\text{ in }U\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;f(x_1)&amp;lt;/math&amp;gt; was redefined to be the part of &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; representing &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For many problems of interest, the functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; vary linearly with &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;, that is, they are affine functions of &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;gt;B. Hu and L. Wu, &amp;quot;Robust SCUC Considering Continuous/Discrete Uncertainties and Quick-Start Units: A Two-Stage Robust Optimization With Mixed-Integer Recourse,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 2, pp. 1407-1419, March 2016, doi: 10.1109/TPWRS.2015.2418158.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;J. Warrington, C. Hohl, P. J. Goulart and M. Morari, &amp;quot;Rolling Unit Commitment and Dispatch With Multi-Stage Recourse Policies for Heterogeneous Devices,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 1, pp. 187-197, Jan. 2016, doi: 10.1109/TPWRS.2015.2391233.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Chuen-Teck See, Melvyn Sim, (2010) Robust Approximation to Multiperiod Inventory Management. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 58(3):583-594.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Marcus Ang, Yun Fong Lim, Melvyn Sim, (2012) Robust Storage Assignment in Unit-Load Warehouses. &amp;lt;i&amp;gt;Management Science&amp;lt;/i&amp;gt; 58(11):2114-2130.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Mattia, S., Rossi, F., Servilio, M., Smriglio, S. (2017). Staffing and Scheduling Flexible Call Centers by Two-Stage Robust Optimization. &amp;lt;i&amp;gt;Omega&amp;lt;/i&amp;gt; 72:25-37.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Gong, J. and You, F. (2017), Optimal processing network design under uncertainty for producing fuels and value‐added bioproducts from microalgae: Two‐stage adaptive robust mixed integer fractional programming model and computationally efficient solution algorithm. &amp;lt;i&amp;gt;AIChE J.&amp;lt;/i&amp;gt;, 63: 582-600.&amp;lt;/ref&amp;gt; In such cases, if &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; are treated as vectors, then we can write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x_1) = c^Tx_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; is some vector, and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;g(u, x_1, x_2) = A_1(u)x_1 + A_2(u)x_2(u) - b(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the &amp;lt;math&amp;gt;A(u)&amp;lt;/math&amp;gt;&#039;s are matrices and &amp;lt;math&amp;gt;b(u)&amp;lt;/math&amp;gt; is a vector, to give the linear, two-stage ARO (&amp;lt;i&amp;gt;L2ARO&amp;lt;/i&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x_1, x_2(u))\;&amp;amp;c^Tx_1\\&lt;br /&gt;
\text{s.t.}\;&amp;amp;A_1(u)x_1 + A_2(u)x_2(u) \leq b(u)\;\text{ for all }u\text{ in }U\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This L2ARO will be the primary focus of the Algorithms section.&lt;br /&gt;
&lt;br /&gt;
==Algorithms and Methodology==&lt;br /&gt;
General ARO problems are computationally intractable.&amp;lt;ref&amp;gt;Guslitser, E. (2002). Uncertainty-Immunized Solutions in Linear Programming (Master’s Thesis, Technion-Israel Institute of Technology).&amp;lt;/ref&amp;gt; Taking the L2ARO for example, deriving the optimal function &amp;lt;math&amp;gt;x_2(u)&amp;lt;/math&amp;gt; poses a tremendous challenge for many choices of uncertainty set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;. If &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is large or infinite, or is non convex, deciding what &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; should be for each &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; may take a long time. In real world applications, then, the uncertainty set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; must be chosen carefully to include a representative set of possible parameter values for &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, but it must not be too large or complex and render the problem intractable. &lt;br /&gt;
The L2ARO model has been proven tractable only for simple uncertainty sets &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; or with restrictions imposed on the function &amp;lt;math&amp;gt;x_2(u)&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;gt;Yanikognlu, I., Gorissen, B. L., den Hertog, D. (2019) A Survey of Adjustable Robust Optimization. &amp;lt;i&amp;gt;European Journal of Operational Research&amp;lt;/i&amp;gt;, (277)3:799-813.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt; Therefore, ARO problems are usually solved on a case by case basis, using methods such as multi-level optimization, branch-and-cut, and decomposition.&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Zhao, L., &amp;amp; Zeng, B. (2012). An Exact Algorithm for Two-stage Robust Optimization with Mixed Integer Recourse Problems.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Chen, Bokan, &amp;quot;A new trilevel optimization algorithm for the two-stage robust unit commitment problem&amp;quot; (2013). Graduate Theses and Dissertations. 13065.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Shi, H. and You, F. (2016), A computational framework and solution algorithms for two‐stage adaptive robust scheduling of batch manufacturing processes under uncertainty. &amp;lt;i&amp;gt;AIChE J.&amp;lt;/i&amp;gt;, 62: 687-703.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Bertsimias, D., Georghiou, A. (2015). Design of Near Optimal Decision Rules in Multistage Adaptive Mixed-Integer Optimization. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 63(3): 610-627.&amp;lt;/ref&amp;gt; This section will first present the L2ARO solution method using the &amp;lt;i&amp;gt;affine decision rule&amp;lt;/i&amp;gt; approximation under &amp;lt;i&amp;gt;fixed recourse&amp;lt;/i&amp;gt; conditions from Ben-Tal&#039;s 2004 paper&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt;, then discuss how this method might be extended to other L2ARO problems.&lt;br /&gt;
&lt;br /&gt;
General L2ARO problems were first proven intractable by Guslitser, in his master&#039;s thesis.&amp;lt;ref&amp;gt;Guslitser, E. (2002). Uncertainty-Immunized Solutions in Linear Programming (Master’s Thesis, Technion-Israel Institute of Technology).&amp;lt;/ref&amp;gt; Ben-Tal took this result and suggested simplifying the problem by restricting &amp;lt;math&amp;gt;x_2(u)&amp;lt;/math&amp;gt; to vary linearly with &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, that is, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_2(u) = w + Wu&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; is a vector and &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; is a matrix, both variable. This simplification is known as the &amp;lt;i&amp;gt;affine decision rule&amp;lt;/i&amp;gt; (ADR). To further simplify the problem, Ben-Tal proposed that the matrix &amp;lt;math&amp;gt;A_2(u)&amp;lt;/math&amp;gt; be fixed to some matrix &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (&amp;lt;i&amp;gt;fixed recourse conditions&amp;lt;/i&amp;gt;), and make &amp;lt;math&amp;gt;A_1(u)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;b(u)&amp;lt;/math&amp;gt; affine functions of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1(u) = m + M(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b(u) = b + Bu&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; are fixed vectors and &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; are fixed matrices. Then, the overall problem can be rewritten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\text{min}(x_1, w, W) \; &amp;amp;c^Tx_1\\&lt;br /&gt;
\text{s.t.}\;&amp;amp;(m + Mu)x_1 + V(w + Wu) \leq b + Bu \; \text{ for all }u\text{ in }U\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, both the objective function and constraint function are affine functions of &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt;, so the problem has been reduced to a simple robust linear program, for which solution methods already exist.&lt;br /&gt;
&lt;br /&gt;
The above solution method, although simple and tractable, suffers from potential sub optimality of ADR. Indeed, Ben-Tal motivates this assumption citing only the tractability of the result. In real world scenarios, this sub optimality can be mitigated by using ADR to make the initial decision, then resolving the problem after &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is revealed. That is, if solving the L2ARO gives &amp;lt;math&amp;gt;x_1^*&amp;lt;/math&amp;gt; as the optimal &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2^*(u)&amp;lt;/math&amp;gt; as the optimal &amp;lt;math&amp;gt;x_2(u)&amp;lt;/math&amp;gt;, decision &amp;lt;math&amp;gt;x_1^*&amp;lt;/math&amp;gt; is implemented immediately; when &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is revealed (to be, say, &amp;lt;math&amp;gt;u^*&amp;lt;/math&amp;gt;), decision &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; is decided not by computing &amp;lt;math&amp;gt;x_2^*(u^*)&amp;lt;/math&amp;gt;, but by re-solving the whole problem fixing &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;x_1^*&amp;lt;/math&amp;gt; and fixing &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;u^*&amp;lt;/math&amp;gt;. This method reflects the wait-and-see nature of the decision &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; - ADR is used to find a pretty-good &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;, then &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; is revealed, then the information is used to solve for the optimal &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; in that circumstance.&amp;lt;ref&amp;gt;Ben-Tal, A., Golany, B., Nemirovski, A., Vial, J. (2005). Retailer-Supplier Flexible Commitments Contracts: A Robust Optimization Approach. &amp;lt;i&amp;gt;Manufacturing and Service Operations Management&amp;lt;/i&amp;gt; 7(3):248-271.&amp;lt;/ref&amp;gt; This iterative, stage-by-stage solution performs better than using only ADR, but is feasible only when there is enough time between stages to re-solve the problem. Further, numerical experiments indicate that classical robust optimization models yield equally good, if not better initial decisions than ADR on L2ARO, limiting ADR on L2ARO to situations where the problem cannot be feasibly re-solved, or in the special cases where the ADR approximation actually generates the optimal solution.&amp;lt;ref&amp;gt;Gorissen, B., Yanikognlu, I., den Hertog, D. (2015). A Practical Guide to Robust Optimization. &amp;lt;i&amp;gt;Omega&amp;lt;/i&amp;gt; 53:124-137.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This leads to the natural question, under what conditions are ADRs optimal? Bertsimias and Goyal showed in 2012 that if both &amp;lt;math&amp;gt;A(u)&amp;lt;/math&amp;gt; matrices are independent of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; are restricted to vectors with nonnegative entries, and &amp;lt;math&amp;gt;b(u)&amp;lt;/math&amp;gt; is restricted to be vectors with nonpositive entries, then ADRs are optimal if &amp;lt;math&amp;gt;b(u)&amp;lt;/math&amp;gt; is restricted to a polyhedral set with a number of vertices one more than &amp;lt;math&amp;gt;b(u)&amp;lt;/math&amp;gt;&#039;s dimension.&amp;lt;ref&amp;gt;Bertsimas, D., Goyal, V. On the power and limitations of affine policies in two-stage adaptive optimization. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt; 134, 491–531 (2012).&amp;lt;/ref&amp;gt; In a 2016 paper, Ben-Tal and colleagues noted that whenever the &amp;lt;math&amp;gt;A(u)&amp;lt;/math&amp;gt; matrices are independent of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, then a &amp;lt;i&amp;gt;piecewise&amp;lt;/i&amp;gt; ADR can be optimal, albeit one with a large number of pieces.&amp;lt;ref&amp;gt;Ben-Tal, A., El Housni, O. &amp;amp; Goyal, V. A tractable approach for designing piecewise affine policies in two-stage adjustable robust optimization. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt; 182, 57–102 (2020).&amp;lt;/ref&amp;gt; ADRs can be optimal in other, more specific cases, but these cases will not be discussed here.&amp;lt;ref&amp;gt;Iancu, D.A., Parrilo, P.A.(2010). Optimality of Affine Policies in Multistage Robust Optimization. &amp;lt;i&amp;gt;Mathematics of Operations Research&amp;lt;/i&amp;gt; 35(2):363-394&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Dan A. Iancu, Mayank Sharma, Maxim Sviridenko (2013) Supermodularity and Affine Policies in Dynamic Robust Optimization. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 61(4):941-956&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In most cases, however, ADRs are suboptimal, and it becomes useful to characterize its degree of suboptimality. The most common approach is to generate upper and lower bounds on the optimal value of the objective function. If the goal is to minimize the objective function, then any valid solution (via ADRs or some other method) gives an upper bound, so the problem reduces to computing lower bounds. A simple approach to doing so is to approximate the uncertainty set using a small number of well-chosen points (“sampling” the uncertainty set), solve the model at each of these points, and find the worst case among these sampled solutions. Since the true worst case scenario must be at least as bad as one of the selected points, this sampling approach must generate a solution no worse than the true optimal, or a lower bound to the objective.&amp;lt;ref&amp;gt;M. J. Hadjiyiannis, P. J. Goulart and D. Kuhn, &amp;quot;A scenario approach for estimating the suboptimality of linear decision rules in two-stage robust optimization,&amp;quot; 2011 50th IEEE Conference on Decision and Control and European Control Conference, Orlando, FL, 2011, pp. 7386-7391.&amp;lt;/ref&amp;gt; This method, although simple, generates excessively optimistic lower bounds unless a large number of points are sampled, but solving the model at many such points can take a long time. Thus, authors have investigated methods for choosing fewer points that can better represent the whole uncertainty set to improve both the lower bound quality and computation time for this method.&amp;lt;ref&amp;gt;Ayoub, J., Poss, M. Decomposition for adjustable robust linear optimization subject to uncertainty polytope. &amp;lt;i&amp;gt;Comput Manag Sci&amp;lt;/i&amp;gt; 13, 219–239 (2016).&amp;lt;/ref&amp;gt; For example, Bertsimias and De Ruiter discovered that constructing the dual and sampling the dual uncertainty set gives better bounds and faster computation time.&amp;lt;ref&amp;gt;Bertsimias, D., deRuiter, F. J. C. T. (2016). Duality in Two-Stage Adaptive Linear Optimization: Faster Computation and Stronger Bounds. &amp;lt;i&amp;gt;INFORMS Journal on Computing&amp;lt;/i&amp;gt; 28(3):500-511.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important assumption in the given solution methodology is the &amp;lt;i&amp;gt;fixed recourse condition&amp;lt;/i&amp;gt;, that &amp;lt;math&amp;gt;A_2(u)&amp;lt;/math&amp;gt; is fixed to some matrix &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. If this is not true, that &amp;lt;math&amp;gt;A_2(u)&amp;lt;/math&amp;gt; is instead some affine function of &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;, then even under the ADR assumption, the problem is intractable.&amp;lt;ref&amp;gt;Guslitser, E. (2002). Uncertainty-Immunized Solutions in Linear Programming (Master’s Thesis, Technion-Israel Institute of Technology).&amp;lt;/ref&amp;gt; However, Ben-Tal has proposed a tight approximation method for cases where the uncertainty set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the intersection of ellipsoidal sets, an approximation that becomes exact if &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; itself is an ellipsoidal set.&amp;lt;ref&amp;gt;Ben-Tal, A., Goryashko, A., Guslitzer, E. et al. Adjustable robust solutions of uncertain linear programs. &amp;lt;i&amp;gt;Math. Program.&amp;lt;/i&amp;gt;, Ser. A 99, 351–376 (2004).&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
Consider a simple inventory management problem over two business periods involving one product that loses all value at the end of the second period. Let the storage cost of every unused unit of product be &amp;lt;math&amp;gt;$10&amp;lt;/math&amp;gt; per business period. Let the unit price of the product be &amp;lt;math&amp;gt;$40&amp;lt;/math&amp;gt; be in the first business period and &amp;lt;math&amp;gt;$55&amp;lt;/math&amp;gt; in the second period. Let the demand in each period be uncertain, but given the following information:&lt;br /&gt;
#Both demands are between &amp;lt;math&amp;gt;50&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;100&amp;lt;/math&amp;gt; units.&lt;br /&gt;
#The total demand over the two periods is &amp;lt;math&amp;gt;150&amp;lt;/math&amp;gt; units.&lt;br /&gt;
The problem is that the manager must decide the quantity of each product to purchase at the start of each business period minimizing storage and purchasing costs. If we denote the demand in the first business period &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; (so the demand in the second period is &amp;lt;math&amp;gt;150 - d&amp;lt;/math&amp;gt;) and the quantity purchased in the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;th period &amp;lt;math&amp;gt;n_i&amp;lt;/math&amp;gt;, then we can formulate this as an L2ARO as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \text{min} \; &amp;amp;cost\\&lt;br /&gt;
\text{s.t.} \; &amp;amp;cost \geq 10(n_1-d) + 10(n_1+n_2-150) + 40n_1 + 55n_2 \;\text{ for all }d\\&lt;br /&gt;
&amp;amp;n_1 - d \geq 0 \;\text{ for all }d\\&lt;br /&gt;
&amp;amp;n_1 + n_2 \geq 150\\&lt;br /&gt;
&amp;amp;n_1 \geq 0\\&lt;br /&gt;
&amp;amp;n_2 \geq 0\\&lt;br /&gt;
&amp;amp;50 \leq d \leq 100&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The uncertain parameter is &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;, and the uncertainty set is the closed interval from &amp;lt;math&amp;gt;50&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;100&amp;lt;/math&amp;gt;. The first stage decision is for &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;cost&amp;lt;/math&amp;gt;; the second stage decision is &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt;. Rewriting &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; as a function of &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; and rearranging into matrix form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{min}(n_1, cost, n_2(d)) \; cost&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{s.t.}\;\begin{bmatrix} -60 &amp;amp; 1 \\ 1 &amp;amp; 0 \\ 1 &amp;amp; 0 \\ 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &lt;br /&gt;
\end{bmatrix}\begin{bmatrix}n_1 \\ cost\end{bmatrix} + &lt;br /&gt;
\begin{bmatrix} -65 \\ 0 \\ 1 \\ 0 \\ 1\end{bmatrix}n_2(u) \geq&lt;br /&gt;
\begin{bmatrix} -1500 \\ 0 \\ 150 \\ 0 \\ 0\end{bmatrix} + &lt;br /&gt;
\begin{bmatrix} -10 \\ 1 \\ 0 \\ 0 \\ 0\end{bmatrix}d\;\text{ for all }d&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the affine decision rule &amp;lt;math&amp;gt;n_2(d) = w + Wd&amp;lt;/math&amp;gt;, noting that &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; are &amp;lt;math&amp;gt;1\times1&amp;lt;/math&amp;gt; matrices, gives:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{min}(n_1, cost, w, W) \; cost&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{s.t.}\;\begin{bmatrix} -60 &amp;amp; 1 \\ 1 &amp;amp; 0 \\ 1 &amp;amp; 0 \\ 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &lt;br /&gt;
\end{bmatrix}\begin{bmatrix}n_1 \\ cost\end{bmatrix} + &lt;br /&gt;
\begin{bmatrix} -65 \\ 0 \\ 1 \\ 0 \\ 1\end{bmatrix}(w + Wd) \geq&lt;br /&gt;
\begin{bmatrix} -1500 \\ 0 \\ 150 \\ 0 \\ 0\end{bmatrix} + &lt;br /&gt;
\begin{bmatrix} -10 \\ 1 \\ 0 \\ 0 \\ 0\end{bmatrix}d\;\text{ for all }d&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which rearranges to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{min}(n_1, cost, w, W) \; cost&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{s.t.}\;&lt;br /&gt;
\begin{bmatrix} -60 &amp;amp; 1 &amp;amp; -65 &amp;amp; -65d \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; d \\ &lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; d\end{bmatrix}&lt;br /&gt;
\begin{bmatrix}n_1 \\ cost \\ w \\ W\end{bmatrix} \geq&lt;br /&gt;
\begin{bmatrix}-1500 \\ 0 \\ 150 \\ 0 \\ 0\end{bmatrix} +&lt;br /&gt;
\begin{bmatrix}-10 \\ 1 \\ 0 \\ 0 \\ 0\end{bmatrix}d\;&lt;br /&gt;
\text{ for all }d&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which is a robust linear program. Since the constraints are linear inequalities in &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; is bounded between &amp;lt;math&amp;gt;50&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;100&amp;lt;/math&amp;gt;, it suffices to check the constraint only for &amp;lt;math&amp;gt;d = 50&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;d = 100&amp;lt;/math&amp;gt;. Writing down the constraints for both values gives a deterministic linear program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{min}(n_1, cost, w, W) \; cost&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{s.t.}\;&lt;br /&gt;
\begin{bmatrix} -60 &amp;amp; 1 &amp;amp; -65 &amp;amp; -3250 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 50 \\ &lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 50 \\ -60 &amp;amp; 1 &amp;amp; -65 &amp;amp; -6500 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 100 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 100\end{bmatrix}&lt;br /&gt;
\begin{bmatrix}n_1 \\ cost \\ w \\ W\end{bmatrix} \geq&lt;br /&gt;
\begin{bmatrix}-2000 \\ 50 \\ 150 \\ 0 \\ 0 \\ -2500 \\ 100 \\ 150 \\ 0 \\ 0\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be solved using the Simplex Algorithm. The solution to this linear program is &amp;lt;math&amp;gt;(n_1, cost, w, W) = (150, 7000, 0, 0)&amp;lt;/math&amp;gt;, corresponding to a worst-case cost of &amp;lt;math&amp;gt;7000&amp;lt;/math&amp;gt;. The solution corresponds to buying all 150 demand units for the two periods at start of the first period, but only having a demand of 50 units in the first business period. This solution makes intuitive sense because the purchase price for the second period is &amp;lt;math&amp;gt;$15&amp;lt;/math&amp;gt; more than for the first period, but storing any extra units from the first period costs &amp;lt;math&amp;gt;$10&amp;lt;/math&amp;gt;, so in any case, the price increase outweighs the storage cost. This is indeed the optimal solution to the problem.&lt;br /&gt;
&lt;br /&gt;
Note that the ADR approximation found the optimal solution. This is not surprising because the optimal strategy as described above does not depend on the first period demand.&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
Applications of adaptive robust optimization typically involve multi-stage allocation of resources under uncertain supply or demand, including problems in energy systems, inventory management, and shift scheduling.&amp;lt;ref&amp;gt;B. Hu and L. Wu, &amp;quot;Robust SCUC Considering Continuous/Discrete Uncertainties and Quick-Start Units: A Two-Stage Robust Optimization With Mixed-Integer Recourse,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 2, pp. 1407-1419, March 2016, doi: 10.1109/TPWRS.2015.2418158.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;J. Warrington, C. Hohl, P. J. Goulart and M. Morari, &amp;quot;Rolling Unit Commitment and Dispatch With Multi-Stage Recourse Policies for Heterogeneous Devices,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 1, pp. 187-197, Jan. 2016, doi: 10.1109/TPWRS.2015.2391233.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Chuen-Teck See, Melvyn Sim, (2010) Robust Approximation to Multiperiod Inventory Management. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 58(3):583-594.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Marcus Ang, Yun Fong Lim, Melvyn Sim, (2012) Robust Storage Assignment in Unit-Load Warehouses. &amp;lt;i&amp;gt;Management Science&amp;lt;/i&amp;gt; 58(11):2114-2130.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Mattia, S., Rossi, F., Servilio, M., Smriglio, S. (2017). Staffing and Scheduling Flexible Call Centers by Two-Stage Robust Optimization. &amp;lt;i&amp;gt;Omega&amp;lt;/i&amp;gt; 72:25-37.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Energy Systems===&lt;br /&gt;
Energy systems aim to meet energy demand while minimizing costs. An energy system may involve multiple units that can each be turned on or off, with corresponding startup, shut down, and operation costs. A coal plant may be expensive to start up and shut down, but be cheap to operate, for example, while a solar farm may be easier to start up and shut down but more difficult to maintain. Let each day be partitioned into &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; different blocks of time, and suppose the problem was to determine the optimal combination of units to run during each time block on a given day. The unit combination for the first block of time must be decided immediately, but decisions for the subsequent time blocks can wait until after learning the energy demand in preceding time blocks. However, past decisions influence future decisions - starting up the coal plant in the first time block allows it to produce cheap energy all day, potentially reducing a reliance on other energy sources. Such a decision structure, where past decisions and new information guide future decisions, lends itself naturally to an ARO model. The decision is the combination of units to run in each time block, the uncertainty set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the set of possible energy demands for each time block, the constraint is that the power produced meets demand for each time block, and the objective would be to minimize the total startup, shut down, and operation costs for the day. For more detailed treatments of ARO applied to energy systems, we refer the reader to the references.&amp;lt;ref&amp;gt;B. Hu and L. Wu, &amp;quot;Robust SCUC Considering Continuous/Discrete Uncertainties and Quick-Start Units: A Two-Stage Robust Optimization With Mixed-Integer Recourse,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 2, pp. 1407-1419, March 2016, doi: 10.1109/TPWRS.2015.2418158.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;J. Warrington, C. Hohl, P. J. Goulart and M. Morari, &amp;quot;Rolling Unit Commitment and Dispatch With Multi-Stage Recourse Policies for Heterogeneous Devices,&amp;quot; in &amp;lt;i&amp;gt;IEEE Transactions on Power Systems&amp;lt;/i&amp;gt;, vol. 31, no. 1, pp. 187-197, Jan. 2016, doi: 10.1109/TPWRS.2015.2391233.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inventory Management===&lt;br /&gt;
The inventory management problem seeks to purchase goods at regular intervals and store them such that there’s always enough product on hand to satisfy demand while minimizing purchase and storage costs. Purchasing large amounts when the prices are low saves on purchasing costs later on, but this incurs large storage costs. On the other extreme, keeping too little inventory risks running out of stock or requiring large purchases at inconvenient times. If an inventory planner wanted to plan purchases for the next &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; time blocks (for simplicity assuming purchases take place only at the start of each time block), then he must immediately decide how much to purchase for the first time block, then use each past time block’s prices and demands to decide how much to buy at future time blocks. As in the case of energy systems, the inventory management problem has a staggered decision structure where past decisions and new information inform future decisions, and can be translated naturally into an ARO model. The decisions are the quantities of product to purchase at the start of each time block, the uncertainty set is the set of possible prices and demands for each of the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; time blocks, the constraint is that the inventory has enough stock to meet demand in every time block, and the objective is to minimize purchasing and storage costs. For more detailed analyses of the inventory management problem, we refer again readers to the references.&amp;lt;ref&amp;gt;Chuen-Teck See, Melvyn Sim, (2010) Robust Approximation to Multiperiod Inventory Management. &amp;lt;i&amp;gt;Operations Research&amp;lt;/i&amp;gt; 58(3):583-594.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Marcus Ang, Yun Fong Lim, Melvyn Sim, (2012) Robust Storage Assignment in Unit-Load Warehouses. &amp;lt;i&amp;gt;Management Science&amp;lt;/i&amp;gt; 58(11):2114-2130.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Shift Scheduling===&lt;br /&gt;
The shift scheduling problem involves carefully choosing a shift for each employee such that the operation center has enough staff at all times. For example, a customer service line would ideally like to predict the frequency and length of calls at every hour of the day so it employs exactly enough operators to handle the calls, however, call volume is hard to predict and call centers often end up overstaffed or understaffed, so that the company may spend excess on paying workers or deliver unsatisfactory customer service. However, Mattia and colleagues note that consecutive periods of high volume calls are not independent, so that past call volumes help predict future call volumes, so they formulated the shift scheduling problem as a two-stage ARO. In the first stage (over the weekend), employees shifts are laid out for the workweek; in the second stage (during the week), employees are allocated to different jobs in the office. The uncertainty set is the set of possible call volume distributions through the week (represented as the deviations in the number of staff for handling all other jobs), the constraint is that enough staff is present to handle the various office jobs, and the objective is to minimize the total cost of hiring the employees for the hours they work. For more detail on this problem, we refer readers to the paper by Mattia and colleagues.&amp;lt;ref&amp;gt;Mattia, S., Rossi, F., Servilio, M., Smriglio, S. (2017). Staffing and Scheduling Flexible Call Centers by Two-Stage Robust Optimization. &amp;lt;i&amp;gt;Omega&amp;lt;/i&amp;gt; 72:25-37.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Adaptive robust optimization models multi-stage decision making where past decisions affect future decision making, but new information is learned between decision stages. It finds less conservative solutions than traditional robust optimization without sacrificing robustness, at the expense of simplicity and computation time. Many ARO problems are computationally intractable, but ARO problems have also been solved for many specific problems in the field, and will continue to grow in the coming decades.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Convex_generalized_disjunctive_programming_(GDP)&amp;diff=2739</id>
		<title>Convex generalized disjunctive programming (GDP)</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Convex_generalized_disjunctive_programming_(GDP)&amp;diff=2739"/>
		<updated>2020-12-21T11:40:30Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Nicholas Schafhauser, Blerand Qeriqi, Ryan Cuppernull (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Generalized disjunctive programming (GDP) involves logic propositions (Boolean variables) and sets of constraints that are chained together using the logical OR operator ( II ). GDP is an extension of linear disjunctive programming&amp;lt;ref&amp;gt;Balas, Egon. &amp;quot;Disjunctive Programming.&amp;quot; Annals of Discrete Mathematics, 1979.&amp;lt;/ref&amp;gt; that can be applied to Mixed Integer Non-Linear Programming (MINLP). GDP&amp;lt;ref&amp;gt;Raman and Grossman. &amp;quot;Modelling and Computational Techniques for Logic Based Integer Programming.&amp;quot; Computers &amp;amp; Chemical Engineering, 1994.&amp;lt;/ref&amp;gt;, is a generalization of disjunctive convex programming in the sense that it also allows the use of logic propositions that are expressed in terms of Boolean variables. In order to take advantage of current mixed-integer nonlinear programming solvers (e.g. DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt;GAMS. DICOPT, https://www.gams.com/latest/docs/S_DICOPT.html&amp;lt;/ref&amp;gt;, SBB&amp;lt;ref name=&amp;quot;:4&amp;quot; /&amp;gt;, α-ECP&amp;lt;ref name=&amp;quot;:5&amp;quot;&amp;gt;GAMS. AlphaECP, 1995, https://www.gams.com/latest/docs/S_ALPHAECP.html&amp;lt;/ref&amp;gt;, BARON&amp;lt;ref name=&amp;quot;:6&amp;quot;&amp;gt;BARON, 1996, https://minlp.com/baron&amp;lt;/ref&amp;gt;, Couenne&amp;lt;ref name=&amp;quot;:7&amp;quot;&amp;gt;Couenne, 2006, https://projects.coin-or.org/Couenne&amp;lt;/ref&amp;gt; etc.), GDPs are often reformulated as MINLPs.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;P. Ruiz, Juan; Grossmann, Ignacio E. (2012): A hierarchy of relaxations for nonlinear convex generalized disjunctive programming. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6466535.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:GDP Intro.jpg|none|thumb|523x523px|Figure 1: Generalized Disjunctive Programming Methods&amp;lt;ref&amp;gt;Grossman, Ignacio E: Overview of Generalized Disjunctive Programming. Carnegie Mellon University.https://www.minlp.org/pdf/GBDEWOGrossmann.pdf&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
The general form of an MINLP model is as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           x \in X\\&lt;br /&gt;
           y \in Y\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where  f(x) and g(x) are twice differentiable functions, x are the continuous variables and y are the discrete variables. There are three main types of sub problems that arise from the MINLP: Continuous Relaxation, NLP subproblem for a fix &lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
Y_p&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt; &lt;br /&gt;
and the feasibility problem.&lt;br /&gt;
&lt;br /&gt;
==== Continuous Relaxation ====&lt;br /&gt;
The sub problem of continuous relaxation takes the form of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           x \in X\\&lt;br /&gt;
           y \in Y_R\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;Y_R&amp;lt;/math&amp;gt; is the continuous relaxation of Y. Not that in this sub-problem all of the integer variables y are treated as continuous. This also returns a Lower Bound when it returns a feasible solution&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Grossmann, Ignacio. Review of Mixed-Integer Nonlinear and Generalized Disjunctive Programming Applications in Process Systems Engineering.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NLP Subproblem for a fixed &amp;lt;math&amp;gt;Y_p&amp;lt;/math&amp;gt; ====&lt;br /&gt;
The subproblem for a fixed &amp;lt;math&amp;gt;Y_p&amp;lt;/math&amp;gt; is shown in the form below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y^p)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.    g(x,y^p) \leq 0\\&lt;br /&gt;
           x \in \Re^n\\&lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this sub problem you return an upper bound for the MINLP program when it has a feasible solution. So with that being said you can fix a integer variables and continuously relax the others in order to get a range of feasible values.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feasibility Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the fixed MINLP subproblem is not feasible the following feasibility problem is considered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           j \in J\\&lt;br /&gt;
           u \in \Re\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where J is the index set for inequalities and the feasibility problem attempts to minimize the infeasibility of the solution with the most violated constraints.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GDP ====&lt;br /&gt;
GDP provides a high level framework for solving the mixed non-linear integer programs. By provide a methodology for converting the disjunctive problems into a MINLP the problem becomes simplified and easier to solve using current processing and algorithmic capabilities. These methodologies that can not only solve both the Convex and Non-Convex Problems. A Convex GDP is when both f(x) and g(x) are convex functions. Which is defined as a graph where any line segment that passes through any 2 points of the plot will always be greater than the plot itself. This allows for simple relaxations/approximations to occur which will create a faster solving methodology.&amp;lt;ref&amp;gt;Grossmann, Ignacio. Review of Mixed-Integer Nonlinear and Generalized Disjunctive Programming Applications in Process Systems Engineering.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Methodology ==&lt;br /&gt;
&lt;br /&gt;
Below is a GDP problem that will be used for demonstration purposes in this section. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
s.t. g(x) \leq 0\\&lt;br /&gt;
\bigvee_ {i \in D_k}  \begin{bmatrix} Y_{ki} \\&lt;br /&gt;
r_{ki}(x) \leq 0 &lt;br /&gt;
\end{bmatrix} \quad k \in K \\&lt;br /&gt;
\underline{\bigvee}_ {i \in D_k} Y_{ki} \quad k \in K\\&lt;br /&gt;
 \Omega(Y)=True\\&lt;br /&gt;
x^{lo} \leq x \leq x^{up}\\&lt;br /&gt;
x \in  \Re^n\\&lt;br /&gt;
y_{ki} \in {True,False}&lt;br /&gt;
\quad k \in K, i \in D_k \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The two most common ways of reformulating a GDP problem into an MINLP are through Big-M (BM) and Hull Reformulation (HR). BM is the simpler of the two, while HR results in tighter relaxation (smaller feasible region) and faster solution times.&amp;lt;ref&amp;gt;Trespalacios, Francisco; Grossmann, Ignacio E. (2018): Improved Big-M Reformulation for Generalized Disjunctive Programs. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6467063.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an example of the the GDP problem from above reformulated into an MINLP by using the BM method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x) \leq 0\\&lt;br /&gt;
            r_{ki}(x) \leq M^{ki}(1-y_{ki})\quad k \in K,i \in D_k\\ &lt;br /&gt;
&lt;br /&gt;
       \sum_{i \in D_k} y_{ki} = 1\quad k \in K\\&lt;br /&gt;
       Hy \geq h\\&lt;br /&gt;
       x^{lo} \leq x \leq x^{up}\\&lt;br /&gt;
       x \in \Re^n\\&lt;br /&gt;
       &lt;br /&gt;
       y_{ki} \in {0,1} \quad k \in K, i \in D_k \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice that the boolean term from the original GDP has been converted into a numerical {0,1}. The logic relations have also been converted into linear integer constraints (Hy)&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This MINLP reformulation can now be used in well-known solvers to calculate a solution.  &lt;br /&gt;
&lt;br /&gt;
The same GDP form will now be reformulated into an MINLP by using the HR method.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
s.t. g(x) \leq 0\\&lt;br /&gt;
x = \sum_{i \in D_k} v^{ki}\quad k \in K\\&lt;br /&gt;
y_{ki}r_{ki}(v^{ki}/y_{ki}) \leq 0\quad k \in K, i \in D_k\\&lt;br /&gt;
\sum_{i \in D_k} y_{ki} = 1\quad k \in K\\&lt;br /&gt;
Hy  \geq h\\&lt;br /&gt;
x^{lo}y_{ki} \leq v^{ki} \leq x^{up}y_{ki}\quad k \in K, i \in D_k\\&lt;br /&gt;
x \in  \Re^n\\&lt;br /&gt;
y_{ki} \in {0,1} \quad k \in K, i \in D_k\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
HR significantly increases the number of variables that are required in the same BM variant. The decrease in time needed to solve computations could very well be argued to be worth the reduced simplicity that one can get from BM.&amp;lt;ref&amp;gt;Trespalacios, Francisco; Grossmann, Ignacio E. (2015): Algorithmic Approach for Improved Mixed-Integer Reformulations of Convex Generalized Disjunctive Programs. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6466700.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Solvers: ====&lt;br /&gt;
&lt;br /&gt;
* DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot; /&amp;gt;&lt;br /&gt;
* SBB&amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;GAMS. &#039;&#039;SBB&#039;&#039;, 2020, www.gams.com/latest/docs/S_SBB.html.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* BARON&amp;lt;ref name=&amp;quot;:6&amp;quot; /&amp;gt;&lt;br /&gt;
* Couenne&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
The following example was taken from the paper titled &#039;&#039;Generalized Disjunctive Programming: A Framework For Formulation and Alternative Algorithms For MINLP Optimization&#039;&#039;.&#039;&#039;&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;P. Ruize, Juan; Grossmann, Ignacio E.: Generalized Disjunctive Programming: A Framework For Formulation And Alternative Algorithms For MINLP Optimization. Carnegie Mellon University. http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf&amp;lt;/ref&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 3.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 4.png|alt=http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf|frameless|661x661px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 5.png|alt=http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
GDP formulations are useful for real-world applications where multiple branches are available when making decisions. Solving the GDP in these instances will allow the user to calculate which decisions should be made at each branching point in order to get the optimal solution. This disjunctive formulation is common in complex chemical reactions and production planning.&lt;br /&gt;
[[File:Process network example.png|none|thumb|600x600px|Figure 2: Process Network Example. Each decision point represents another disjunctive set. &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;]]&lt;br /&gt;
The process network depicted in the Figure 2 depicts multiple decisions that could be made to all end up at the goal (B) in a chemical reaction. This problem is able to be formulated into a GDP in order to figure out which route should be taken in order to maximize the profit. &lt;br /&gt;
[[File:GDP numeric example 1.png|none|thumb|600x600px|Figure 3: A more complex process network.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;]]&lt;br /&gt;
This same idea can be scaled to larger problems with more complex branching. Figure 3 illustrates a larger process network and all of the different decision points. This problem is able to be formulated into a GDP so that the most optimal route can be calculated to take through the network.&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
GDP is a programming method that applies disjunctive programming to MINLP problems. This method facilitates modeling discrete or continuous optimization problems by implementing algebraic constraints and logic expressions. The formulation of a GDP consists of Boolean and continuous variables and disjunctions and logic propositions. In the case of convex functions, GDPs can be reformulated using the BM and the HR methods. Formulation methods also include logic based methods disjunctive branch and bound and decomposition. Once reformulated into a standard MINLP, standard MILNP solvers, such as DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot; /&amp;gt;, SBB&amp;lt;ref name=&amp;quot;:4&amp;quot; /&amp;gt;, α-ECP&amp;lt;ref name=&amp;quot;:5&amp;quot; /&amp;gt; and BARON&amp;lt;ref name=&amp;quot;:6&amp;quot; /&amp;gt;, can be used to determine optimal solutions&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;. The GDP method has important applications that include the optimization of complex chemical reactions and process planning. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Fuzzy_programming&amp;diff=2738</id>
		<title>Fuzzy programming</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Fuzzy_programming&amp;diff=2738"/>
		<updated>2020-12-21T11:40:08Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Kyle Clark, Matt Schweider, Tommy Sheehan, Jarred Melancon (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Fuzzy Programming is an optimization model that deals with performing optimization in the presence of uncertainty. This optimization technique is used when determining the exactness of a system&#039;s performance criteria/parameters and decision variables is not possible. Specifically, the truth values associated with the system can be completely false (0), completely true (1), or some value between the two extremes. This aims to capture the concept of partial truth. One approach to account for uncertainty in a system is to model the uncertainty using probability distributions, also known as statistical analysis. However, sometimes uncertainty is sometimes described using qualitative adjectives, or &#039;Fuzzy&#039; statements, such as young or old and hot or cold, because exact boundaries do not necessarily exist [1].   &lt;br /&gt;
&lt;br /&gt;
Fuzzy Programming is built on the concept of Fuzzy Logic. The motivation for Fuzzy Logic, or more precisely Fuzzy Set Theory, is to accurately model and represent real world data which is often &#039;Fuzzy&#039; due to uncertainty. This uncertainty can be introduced into a system by a number of factors such as imprecision in measurement tools or due to the use of vague language [2]. &lt;br /&gt;
&lt;br /&gt;
== Fuzzy Logic ==&lt;br /&gt;
While Boolean Logic is used to describe situations as completely true or completely false, Fuzzy Logic allows for a mathematical representation of partial truth or partial falsehood. Rather than having strict criteria for defining what is part of the set and what is not (e.g. hot or cold, young or old), we allow data to have a degree of membership (u) to each set. A membership function defines how each input value is mapped to a degree of membership (u) between the two extremes, 0 and 1. Membership functions can be several different types of functions. However, they are often Piece-Wise Linear Functions [3]. Below is an example of an L-Function.                    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_A(x) = \begin{cases} 0,\qquad x\leq b \\ \frac{x-a}{b-a},\quad a\leq x \leq b \\ 1,\qquad x&amp;gt;b \end{cases}&amp;lt;/math&amp;gt;                    &lt;br /&gt;
&lt;br /&gt;
For instance, let&#039;s say that we have a set of values that describe temperatures over the course of a week. In Boolean logic, we could create two sets, a cold set and a hot set. We could say that temperatures [0°F, 60°F)  belong to the cold set and temperatures [60°F, 100°F] belong to the hot set. However, it is not very accurate to say that 60°F is cold, but 60.1°F is hot. Instead, we could use Fuzzy Logic to describe temperatures 0°F - 50°F as not hot (u=0). As temperatures increase from 50°F, they are given a higher degree of membership (u &amp;gt; 0) to describe that they are &amp;quot;hotter&amp;quot; or warmer. Lastly, temperatures above 70°F are definitely hot (u=1) [3]. &lt;br /&gt;
&lt;br /&gt;
== Flexible Mathematical Programming Method ==&lt;br /&gt;
An optimization technique used to implement Fuzzy Programming is Flexible Mathematical Programming. This kind of problem takes on the form of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} \tilde{min} f(x) \\ s.t. \ g_i(x)  \leq \sim b_i; i=1,...,m \\ x \in X = \{ x \in \reals^2 | x \geq 0 \} \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the &amp;quot;~&amp;quot; conveys the concept that the objective statement and constraints have some freedom in how they are satisfied. This approach is useful when strict satisfaction of the constraints creates an empty feasible set. Relaxing the constraints with the &amp;quot;~&amp;quot; allows for maneuverability within the potential solutions. &lt;br /&gt;
&lt;br /&gt;
An easier way to represent the constraints is through the use of membership functions which are fuzzy sets of &amp;lt;math&amp;gt;\reals&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_i(x) = 0 \qquad \  \ \ if \ g_i(x) &amp;gt; b_i + d_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_i(x) \in (0,1) \quad if \ b_i &amp;lt; g_i(x) \leq b_i + d_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_i(x) = 1 \qquad \ \  if \ g_i(x) \leq b_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;d_i(i = 1,...,m)&amp;lt;/math&amp;gt; represents the set of constraints which have a certain threshold that can be violated. The above membership functions are used to determine the degree of membership or how violated a certain constraint is. If &amp;lt;math&amp;gt;u_i(x) = 1&amp;lt;/math&amp;gt;, then the constraint is not violation. If &amp;lt;math&amp;gt;u_i(x) = 0&amp;lt;/math&amp;gt;, then the constraint is violated. The in between case of &amp;lt;math&amp;gt;u_i(x) \in (0,1)&amp;lt;/math&amp;gt; allows for partial violation of a constraint. The values of &amp;lt;math&amp;gt;d_i(i = 1,...,m)&amp;lt;/math&amp;gt; can be carefully selected to create constraints that allow for the desired amount of flexibility. &lt;br /&gt;
&lt;br /&gt;
The above membership functions can be combined into a single piecewise function like the function shown within the Fuzzy Logic section of this page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_i(x) = \begin{cases} 1, \qquad \qquad \quad \ if \ g_i(x) \leq b_i \\ 1- \frac{g_i(x)-b_i}{d_i},\quad if \ b_i &amp;lt; g_i(x) \leq b_i + d_i \\ 0,\qquad \qquad \quad \ if \ g_i(x) &amp;gt; b_i + d_i \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimal solution then becomes the value of x that provides the highest degree of membership while satisfying all constraints expressed by the above fuzzy sets or &amp;lt;math&amp;gt;maximize \ u_D(x) = min \ u_i(x)&amp;lt;/math&amp;gt; [4].     &lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
Fuzzy Programming can be applied in a number of fields including media selection in advertising, automated braking in cars, water resource management, and control systems in HVAC systems. HVAC (Heating, Ventilation, and Air Condition) Systems are used to maintain a comfortable environment with a building, such as an office or school. The system works to maintain a certain temperature/humidity according to a set schedule. The system monitors the environment closely to understand when it has reach a certain set point. Fuzzy programming is applied to the control systems to create a more cost efficient systems as these HVAC systems can often be expensive to run. This is because the system might be aiming for that specific temperature and so to reach and maintain that exact degree, it could repeatedly turn on and off either the heating or air conditioning. This can result in a lot of wasted energy as opposed to dealing with a range of temperatures, which gives the system more flexibility as to when a certain subsystem needs to turn on. Compared to the traditional PID (Proportional, Integral, Derivative) controller, the application of Fuzzy programming has been shown to be a more efficient way to run these systems [4].  &lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
An example that showcases fuzzy logic can be described by a simple water allocation problem [1]. Suppose we have a scenario where we have 3 firms wishing to receive a certain amount of water from the flow of a river. Each firm has its own benefit from the water allocation and the amount of water allocated to all of the firms can&#039;t exceed the amount in the river or the amount of flow Q. &lt;br /&gt;
[[File:Tps94 water allocation.png|thumb|712x712px|Water Allocation Scenario|alt=|center]]&lt;br /&gt;
&lt;br /&gt;
Our goal in this problem is to maximize the water allocation to three separate firms from a single source, in this case being a river. Therefore we get this optimization problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt; max \  \ TB(X)=(6x_1-x_1^2)+(7x_2-1.5x_2^2)+(8x_3-0.5x_3^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. \ x_1+x_2+x_3\leq K&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x_i \geq 0  \ \ i=1,2,3 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we mentioned before, the total allocation of water for these three firms cannot exceed the total amount of water available, which will be represented by the variable Q. This value deducted from that total will be the amount of water that has to remain in the river, R, which gives us our value: &amp;lt;math&amp;gt;Q-R=K &amp;lt;/math&amp;gt;. Using this will give us an idea of the water that can be allocated to the firms. For our case, we will assume that the value &amp;lt;math&amp;gt;K = 6&amp;lt;/math&amp;gt;. Thus our new optimization function becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt; max \ \ TB(X)=(6x_1-x_1^2)+(7x_2-1.5x_2^2)+(8x_3-0.5x_3^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s.t. \ x_1+x_2+x_3\leq 6&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x_i \geq 0  \ \ i=1,2,3 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With that constraint, the optimal solution will be &amp;lt;math&amp;gt;x_1=1,x_2=1, x_3=4, &amp;lt;/math&amp;gt; giving a value of &amp;lt;math&amp;gt;TB(X)=34.5 &amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
The problem depicted above was an example of a crisp problem where we knew the exact value for the limit of water to allocate. However, in the real world, we don&#039;t always have exact values; therefore, we can apply fuzzy logic to make the problem more realistic. &lt;br /&gt;
&lt;br /&gt;
A fuzzy variant of this model would be when each firm&#039;s benefits are maximized. The first step for this fuzzy variant would be adding a new factor involving the membership function for each of the firms. The member function can be summed up into the equation below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m(X)= [(6x_1 - x_1^2) +(7x_2- 1.5x_2^2)+ (8x_3- 0.5x_3^2)]/ 49.17&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has a similar constraint to the linear version in regards to the total water, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x_1+x_2+x_3\leq 6&amp;lt;/math&amp;gt;. The optimal solution of this function is thus the same as the linear variant and the degree of satisfaction is &amp;lt;math&amp;gt;m(X)=0.7&amp;lt;/math&amp;gt;. However, things begin to change when the total amount of units of water becomes &#039;&#039;&#039;more or less 6 units&#039;&#039;&#039; instead of just a crisp 6. The nomenclature &amp;quot;more or less 6 &amp;quot; is where we start to apply the fuzzy logic implying that the value will be around 6. Therefore we  can classify the possibilities into membership functions around the values (5, 6, 7) adjusting the membership value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Adjusting the membership with these values yields the membership function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m_c(x) = \begin{cases} 1, \qquad \qquad \quad \ if \ x_{1}+x_{2}+x_{3}\leq 5\\ \frac{7-(x_{1}+x_{2}+x_{3})}{2},\quad\ if \ 5 &amp;lt; x_{1}+x_{2}+x_{3}\leq7 \\ 0,\qquad \qquad \quad \ if \ x_{1}+x_{2}+x_{3} &amp;gt; 7 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus the overall optimization problem changes to a maximum/minimum dilemma where we are maximizing &amp;lt;math&amp;gt;M_G(X)&amp;lt;/math&amp;gt; and minimizing &amp;lt;math&amp;gt;M_C(X)&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m_G(X)=[(6x_1-x_1^2)+(7x_2-1.5x_2^2)+(8x_3-0.5x_3^2)]/49.17&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m_C(X)=[7-(x_1+x_2+x_3)]/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in &amp;lt;math&amp;gt;x_1=0.91, x_2=0.94, x_3=3.81, m(X)=0.67&amp;lt;/math&amp;gt;, and the total benefit being &amp;lt;math&amp;gt;TB(X)=33.1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This result accounts for some uncertainty in our assumptions which is a common issue in a lot of real world problems which is why fuzzy programming is used in a lot of real world applications and controllers for various systems.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The optimization technique of Fuzzy Programming is useful when qualitative adjectives are the only available descriptors for a system&#039;s performance criteria/parameters and decision variables. It&#039;s a vital tool that can help characterize and solve optimization models in the presence of uncertainty which are very common in the real world. The premise of Fuzzy Programming centers around Fuzzy Logic which allows for a mathematical representation of partial truth or partial falsehood rather than strict Boolean Logic system. Incorporating this partial state introduces a flexibility or &amp;quot;fuzziness&amp;quot; to the problem to allow it to better interpret imprecisions and unknowns we encounter in the real world data. Instead of fixed categories, we define degrees of membership to our function where we apply certain ranges or criteria which relate to different membership functions within our Fuzzy Set. Therefore, instead of the basic black and white scenario, we also consider the gray area between the two sets. Strict sets and precise measurements are nearly impossible to find in the real world so the use of Fuzzy Programming is essential to get optimal solutions that can accurately relate to real world situations. The versatility that it provides is precisely why it is so widely used in numerous controllers in all industries from HVAC systems to automated breaking systems. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] Daniel P. Loucks, Eelco van Beek, Jery R. Stedinger, Jozef P.M. Dijkman, Monique T. Villars, [https://ecommons.cornell.edu/bitstream/handle/1813/2804/05_chapter05.pdf?sequence=16&amp;amp;isAllowed=y &#039;&#039;Water Resources Systems Planning and Management: An Introduction to Methods, Models, and Applications&#039;&#039;], UNESCO, p.135-142, 2005. &lt;br /&gt;
&lt;br /&gt;
[2] Nitin A. Bansod, Vaishali Kulkerni and S.H. Paul, [https://books.google.com/books?id=IkajJC9iGxMC&amp;amp;pg=PA73#v=onepage&amp;amp;q&amp;amp;f=false &#039;&#039;Soft Computing-A Fuzzy Logic Approach&#039;&#039;], Bharati Vidyapeeth College of Engineering,  p.73-74, 2005. &lt;br /&gt;
&lt;br /&gt;
[3]  MathWorks, (2020). &#039;&#039;Foundations of Fuzzy Logic&#039;&#039;, Retrieved November 6th, 2020 from https://www.mathworks.com/help/fuzzy/foundations-of-fuzzy-logic.html#:~:text=northern%20hemisphere%20climates).-,Membership%20Functions,name%20for%20a%20simple%20concept &lt;br /&gt;
&lt;br /&gt;
[4] M.K. Luhandjula,  [http://www.worldacademicunion.com/journal/jus/jusVol01No2paper03.pdf &#039;&#039;Fuzzy Mathematical Programming: Theory, Applications, and Extension&#039;&#039;], University of South Africa Department of Decision Sciences, Journal of Uncertain Systems, Vol.1, No.2, p.124-136, 2007.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Convex_generalized_disjunctive_programming_(GDP)&amp;diff=2737</id>
		<title>Convex generalized disjunctive programming (GDP)</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Convex_generalized_disjunctive_programming_(GDP)&amp;diff=2737"/>
		<updated>2020-12-21T11:39:42Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Nicholas Schafhauser, Blerand Qeriqi, Ryan Cuppernull (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Generalized disjunctive programming (GDP) involves logic propositions (Boolean variables) and sets of constraints that are chained together using the logical OR operator ( II ). GDP is an extension of linear disjunctive programming&amp;lt;ref&amp;gt;Balas, Egon. &amp;quot;Disjunctive Programming.&amp;quot; Annals of Discrete Mathematics, 1979.&amp;lt;/ref&amp;gt; that can be applied to Mixed Integer Non-Linear Programming (MINLP). GDP&amp;lt;ref&amp;gt;Raman and Grossman. &amp;quot;Modelling and Computational Techniques for Logic Based Integer Programming.&amp;quot; Computers &amp;amp; Chemical Engineering, 1994.&amp;lt;/ref&amp;gt;, is a generalization of disjunctive convex programming in the sense that it also allows the use of logic propositions that are expressed in terms of Boolean variables. In order to take advantage of current mixed-integer nonlinear programming solvers (e.g. DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt;GAMS. DICOPT, https://www.gams.com/latest/docs/S_DICOPT.html&amp;lt;/ref&amp;gt;, SBB&amp;lt;ref name=&amp;quot;:4&amp;quot; /&amp;gt;, α-ECP&amp;lt;ref name=&amp;quot;:5&amp;quot;&amp;gt;GAMS. AlphaECP, 1995, https://www.gams.com/latest/docs/S_ALPHAECP.html&amp;lt;/ref&amp;gt;, BARON&amp;lt;ref name=&amp;quot;:6&amp;quot;&amp;gt;BARON, 1996, https://minlp.com/baron&amp;lt;/ref&amp;gt;, Couenne&amp;lt;ref name=&amp;quot;:7&amp;quot;&amp;gt;Couenne, 2006, https://projects.coin-or.org/Couenne&amp;lt;/ref&amp;gt; etc.), GDPs are often reformulated as MINLPs.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;P. Ruiz, Juan; Grossmann, Ignacio E. (2012): A hierarchy of relaxations for nonlinear convex generalized disjunctive programming. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6466535.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:GDP Intro.jpg|none|thumb|523x523px|Figure 1: Generalized Disjunctive Programming Methods&amp;lt;ref&amp;gt;Grossman, Ignacio E: Overview of Generalized Disjunctive Programming. Carnegie Mellon University.https://www.minlp.org/pdf/GBDEWOGrossmann.pdf&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
The general form of an MINLP model is as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           x \in X\\&lt;br /&gt;
           y \in Y\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where  f(x) and g(x) are twice differentiable functions, x are the continuous variables and y are the discrete variables. There are three main types of sub problems that arise from the MINLP: Continuous Relaxation, NLP subproblem for a fix &lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
Y_p&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt; &lt;br /&gt;
and the feasibility problem.&lt;br /&gt;
&lt;br /&gt;
==== Continuous Relaxation ====&lt;br /&gt;
The sub problem of continuous relaxation takes the form of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           x \in X\\&lt;br /&gt;
           y \in Y_R\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;Y_R&amp;lt;/math&amp;gt; is the continuous relaxation of Y. Not that in this sub-problem all of the integer variables y are treated as continuous. This also returns a Lower Bound when it returns a feasible solution&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Grossmann, Ignacio. Review of Mixed-Integer Nonlinear and Generalized Disjunctive Programming Applications in Process Systems Engineering.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NLP Subproblem for a fixed &amp;lt;math&amp;gt;Y_p&amp;lt;/math&amp;gt; ====&lt;br /&gt;
The subproblem for a fixed &amp;lt;math&amp;gt;Y_p&amp;lt;/math&amp;gt; is shown in the form below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y^p)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.    g(x,y^p) \leq 0\\&lt;br /&gt;
           x \in \Re^n\\&lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this sub problem you return an upper bound for the MINLP program when it has a feasible solution. So with that being said you can fix a integer variables and continuously relax the others in order to get a range of feasible values.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feasibility Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the fixed MINLP subproblem is not feasible the following feasibility problem is considered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x,y)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x,y) \leq 0\\&lt;br /&gt;
           j \in J\\&lt;br /&gt;
           u \in \Re\\ &lt;br /&gt;
&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where J is the index set for inequalities and the feasibility problem attempts to minimize the infeasibility of the solution with the most violated constraints.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GDP ====&lt;br /&gt;
GDP provides a high level framework for solving the mixed non-linear integer programs. By provide a methodology for converting the disjunctive problems into a MINLP the problem becomes simplified and easier to solve using current processing and algorithmic capabilities. These methodologies that can not only solve both the Convex and Non-Convex Problems. A Convex GDP is when both f(x) and g(x) are convex functions. Which is defined as a graph where any line segment that passes through any 2 points of the plot will always be greater than the plot itself. This allows for simple relaxations/approximations to occur which will create a faster solving methodology.&amp;lt;ref&amp;gt;Grossmann, Ignacio. Review of Mixed-Integer Nonlinear and Generalized Disjunctive Programming Applications in Process Systems Engineering.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Methodology ==&lt;br /&gt;
&lt;br /&gt;
Below is a GDP problem that will be used for demonstration purposes in this section. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
s.t. g(x) \leq 0\\&lt;br /&gt;
\bigvee_ {i \in D_k}  \begin{bmatrix} Y_{ki} \\&lt;br /&gt;
r_{ki}(x) \leq 0 &lt;br /&gt;
\end{bmatrix} \quad k \in K \\&lt;br /&gt;
\underline{\bigvee}_ {i \in D_k} Y_{ki} \quad k \in K\\&lt;br /&gt;
 \Omega(Y)=True\\&lt;br /&gt;
x^{lo} \leq x \leq x^{up}\\&lt;br /&gt;
x \in  \Re^n\\&lt;br /&gt;
y_{ki} \in {True,False}&lt;br /&gt;
\quad k \in K, i \in D_k \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The two most common ways of reformulating a GDP problem into an MINLP are through Big-M (BM) and Hull Reformulation (HR). BM is the simpler of the two, while HR results in tighter relaxation (smaller feasible region) and faster solution times.&amp;lt;ref&amp;gt;Trespalacios, Francisco; Grossmann, Ignacio E. (2018): Improved Big-M Reformulation for Generalized Disjunctive Programs. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6467063.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an example of the the GDP problem from above reformulated into an MINLP by using the BM method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
&lt;br /&gt;
       s.t.g(x) \leq 0\\&lt;br /&gt;
            r_{ki}(x) \leq M^{ki}(1-y_{ki})\quad k \in K,i \in D_k\\ &lt;br /&gt;
&lt;br /&gt;
       \sum_{i \in D_k} y_{ki} = 1\quad k \in K\\&lt;br /&gt;
       Hy \geq h\\&lt;br /&gt;
       x^{lo} \leq x \leq x^{up}\\&lt;br /&gt;
       x \in \Re^n\\&lt;br /&gt;
       &lt;br /&gt;
       y_{ki} \in {0,1} \quad k \in K, i \in D_k \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice that the boolean term from the original GDP has been converted into a numerical {0,1}. The logic relations have also been converted into linear integer constraints (Hy)&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This MINLP reformulation can now be used in well-known solvers to calculate a solution.  &lt;br /&gt;
&lt;br /&gt;
The same GDP form will now be reformulated into an MINLP by using the HR method.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \min z=f(x)\\&lt;br /&gt;
s.t. g(x) \leq 0\\&lt;br /&gt;
x = \sum_{i \in D_k} v^{ki}\quad k \in K\\&lt;br /&gt;
y_{ki}r_{ki}(v^{ki}/y_{ki}) \leq 0\quad k \in K, i \in D_k\\&lt;br /&gt;
\sum_{i \in D_k} y_{ki} = 1\quad k \in K\\&lt;br /&gt;
Hy  \geq h\\&lt;br /&gt;
x^{lo}y_{ki} \leq v^{ki} \leq x^{up}y_{ki}\quad k \in K, i \in D_k\\&lt;br /&gt;
x \in  \Re^n\\&lt;br /&gt;
y_{ki} \in {0,1} \quad k \in K, i \in D_k\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
HR significantly increases the number of variables that are required in the same BM variant. The decrease in time needed to solve computations could very well be argued to be worth the reduced simplicity that one can get from BM.&amp;lt;ref&amp;gt;Trespalacios, Francisco; Grossmann, Ignacio E. (2015): Algorithmic Approach for Improved Mixed-Integer Reformulations of Convex Generalized Disjunctive Programs. Carnegie Mellon University. Journal contribution. &amp;lt;nowiki&amp;gt;https://doi.org/10.1184/R1/6466700.v1&amp;lt;/nowiki&amp;gt; &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Solvers: ====&lt;br /&gt;
&lt;br /&gt;
* DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot; /&amp;gt;&lt;br /&gt;
* SBB&amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;GAMS. &#039;&#039;SBB&#039;&#039;, 2020, www.gams.com/latest/docs/S_SBB.html.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* BARON&amp;lt;ref name=&amp;quot;:6&amp;quot; /&amp;gt;&lt;br /&gt;
* Couenne&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
The following example was taken from the paper titled &#039;&#039;Generalized Disjunctive Programming: A Framework For Formulation and Alternative Algorithms For MINLP Optimization&#039;&#039;.&#039;&#039;&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;P. Ruize, Juan; Grossmann, Ignacio E.: Generalized Disjunctive Programming: A Framework For Formulation And Alternative Algorithms For MINLP Optimization. Carnegie Mellon University. http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf&amp;lt;/ref&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 3.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 4.png|alt=http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf|frameless|661x661px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GDP numeric example 5.png|alt=http://egon.cheme.cmu.edu/Papers/IMAGrossmannRuiz.pdf|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
GDP formulations are useful for real-world applications where multiple branches are available when making decisions. Solving the GDP in these instances will allow the user to calculate which decisions should be made at each branching point in order to get the optimal solution. This disjunctive formulation is common in complex chemical reactions and production planning.&lt;br /&gt;
[[File:Process network example.png|none|thumb|600x600px|Figure 2: Process Network Example. Each decision point represents another disjunctive set. &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;]]&lt;br /&gt;
The process network depicted in the Figure 2 depicts multiple decisions that could be made to all end up at the goal (B) in a chemical reaction. This problem is able to be formulated into a GDP in order to figure out which route should be taken in order to maximize the profit. &lt;br /&gt;
[[File:GDP numeric example 1.png|none|thumb|600x600px|Figure 3: A more complex process network.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;]]&lt;br /&gt;
This same idea can be scaled to larger problems with more complex branching. Figure 3 illustrates a larger process network and all of the different decision points. This problem is able to be formulated into a GDP so that the most optimal route can be calculated to take through the network.&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
GDP is a programming method that applies disjunctive programming to MINLP problems. This method facilitates modeling discrete or continuous optimization problems by implementing algebraic constraints and logic expressions. The formulation of a GDP consists of Boolean and continuous variables and disjunctions and logic propositions. In the case of convex functions, GDPs can be reformulated using the BM and the HR methods. Formulation methods also include logic based methods disjunctive branch and bound and decomposition. Once reformulated into a standard MINLP, standard MILNP solvers, such as DICOPT&amp;lt;ref name=&amp;quot;:3&amp;quot; /&amp;gt;, SBB&amp;lt;ref name=&amp;quot;:4&amp;quot; /&amp;gt;, α-ECP&amp;lt;ref name=&amp;quot;:5&amp;quot; /&amp;gt; and BARON&amp;lt;ref name=&amp;quot;:6&amp;quot; /&amp;gt;, can be used to determine optimal solutions&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;. The GDP method has important applications that include the optimization of complex chemical reactions and process planning. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Mixed-integer_linear_fractional_programming_(MILFP)&amp;diff=2736</id>
		<title>Mixed-integer linear fractional programming (MILFP)</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Mixed-integer_linear_fractional_programming_(MILFP)&amp;diff=2736"/>
		<updated>2020-12-21T11:38:35Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Xiang Zhao (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The mixed-integer linear fractional programming (MILFP) is a kind of mixed-integer nonlinear programming (MINLP) that is widely applied in chemical engineering,&amp;lt;sup&amp;gt;[https://aiche.onlinelibrary.wiley.com/doi/full/10.1002/btpr.2479]&amp;lt;/sup&amp;gt; environmental engineering,&amp;lt;sup&amp;gt;[http://ourspace.uregina.ca/handle/10294/5449]&amp;lt;/sup&amp;gt; and their hybrid field ranging from cyclic-scheduling problems to the life cycle optimization (LCO).&amp;lt;sup&amp;gt;[https://pubs.acs.org/doi/abs/10.1021/acssuschemeng.7b00002?casa_token=hJNBUOc-zyIAAAAA:8gqZM144_Hjovhq_fLHXRQT66FGp0tf6oZ3rWiuRJLD4YKp4f1S44UkUspsNZuCCrcCFIWYME1v0dGPYLA]&amp;lt;/sup&amp;gt; Specifically, the objective function of the MINFP is shown as a ratio of two linear functions formed by various continuous variables and discrete variables. However, the pseudo-convexity and the combinatorial nature of the fractional objective function can cause computational challenges to the general-purpose global optimizers, such as [[wikipedia:BARON|BARON]], to solve this MILFP problem.&amp;lt;sup&amp;gt;[https://www.sciencedirect.com/science/article/pii/S0098135413003396?casa_token=Y6pefF84TQAAAAAA:ALrnGQIOGXr3SA-oqbD3FmlFsMyjp_z4zgmY8LkWscSWtbO8pMjFGix35FsroEVxI9ut0mWjffZc]&amp;lt;/sup&amp;gt; In this regard, we introduce the basic knowledge and solution steps of three algorithms, namely the Parametric Algorithm,  Reformulation-Linearization method, and Branch-and-Bound with Charnes-Cooper Transformation Method, to efficiently and effectively tackle this computational challenge.&lt;br /&gt;
&lt;br /&gt;
==Standard Form and Properties==&lt;br /&gt;
Consider such standard form of the MILFP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \max T(x,y)={c_0+\sum_{i}c_{1,i}m_i+\sum_{j}c_{2,j}y_j \over d_0+\sum_{i}d_{1,i}m_i+\sum_{j}d_{2,j}y_j}\\&lt;br /&gt;
&lt;br /&gt;
       s.t.\quad\ a_{0,k}+\sum_{i}a_{1,i}m_i+\sum_{j}a_{2,j}y_j=0,\quad   \forall k \in K\\&lt;br /&gt;
&lt;br /&gt;
       m_i\ge0,\quad \forall i \in I\\&lt;br /&gt;
       &lt;br /&gt;
       y_j\in {0,1},\quad \forall j \in J \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The properties of the objective function &amp;lt;math&amp;gt;T(x,y)&amp;lt;/math&amp;gt; are shown as follows:&amp;lt;sup&amp;gt;[https://www.sciencedirect.com/science/article/pii/S0098135409001367?casa_token=Sj60B1tEjccAAAAA:kMeO3BLDWNBd7jkBDqcpR5nTrB3yryQ8_CNqyN1mMooiuZxSiLfoVwtkDuU3cTWu4e0FsmeWN_uw]&amp;lt;/sup&amp;gt; &lt;br /&gt;
# &amp;lt;math&amp;gt;T(x,y)&amp;lt;/math&amp;gt; is (strictly) pseudoconcave and pseudoconvex over its domain.&lt;br /&gt;
# The local optimality of &amp;lt;math&amp;gt;T(x,y)&amp;lt;/math&amp;gt; is the same as its global optimality.&lt;br /&gt;
&lt;br /&gt;
Notably, several nonlinear solvers that can deal with the pseudoconvexity, such as the spatial branch-and-bound (SBB),&amp;lt;sup&amp;gt;[https://link.springer.com/article/10.1007/BF01106605]&amp;lt;/sup&amp;gt; are capable of solving the MILFP. However, the memory usage of these solvers is enormous when solving a large-scale problem that is applied in industrial scheduling or [[wikipedia:supply chain|supply chain]] optimization project. Hence, we introduce the parametric algorithm, and reformulation-linearization method, which can reformulate the MILFP into the mixed-integer linear programming (MILP) problem, to reduce the memory usage and enhance solution efficiency.&lt;br /&gt;
&lt;br /&gt;
==Parametric Algorithm==&lt;br /&gt;
One way to successively reformulate and solve the MILFP is to apply the parametric algorithm, which can find the global optimality within finite iterations. The linearly [[wikipedia:parametric form|parametric form]] of the reformulated objective function has the advantage of directly finding the [[wikipedia:global optimum|global optimum]], while the size of the sub-problem remains the same. The reformulation approach is shown as follows:&lt;br /&gt;
&lt;br /&gt;
The original form of the objective function is:&lt;br /&gt;
&amp;lt;math&amp;gt;T(x,y)={c_0+\sum_{i}c_{1,i}m_i+\sum_{j}c_{2,j}y_j \over d_0+\sum_{i}d_{1,i}m_i+\sum_{j}d_{2,j}y_j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use a parametric parameter &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; to reformulate the objective function &amp;lt;math&amp;gt;T(x,y)&amp;lt;/math&amp;gt; into &amp;lt;math&amp;gt;M(x,y,q)&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max T(x,y)={A(x,y) \over B(x,y)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is reformulated into &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max M(x,y,q)=A(x,y)-q*B(x,y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A(x,y)={c_0+\sum_{i}c_{1,i}m_i+\sum_{j}c_{2,j}y_j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B(x,y)={d_0+\sum_{i}d_{1,i}m_i+\sum_{j}d_{2,j}y_j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notably, the optimal solution of the parametric objective function &amp;lt;math&amp;gt;M(x,y,q)&amp;lt;/math&amp;gt; has only one zero-point, which is the same as its global optimal solution. Hence, we need to find the zero-point iteratively following the approaches below:&amp;lt;sup&amp;gt;[https://ieeexplore.ieee.org/abstract/document/6858622?casa_token=jvj28BEMe0cAAAAA:utpZe4zST7nz0SVcdNUoX-CjmqmtU_v3CZnU-oTAxvR8B7ZV2iBjyhqDy3s-228w7Aw4_lcJjFw]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Initialize the parametric parameter &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt;. Set the tolerance &amp;lt;math&amp;gt;tol=10^{-6}&amp;lt;/math&amp;gt;  &lt;br /&gt;
# Solve the sub-problem via using [[wikipedia:CPLEX|CPLEX]], whose objective function is &amp;lt;math&amp;gt;M(x,y,q)&amp;lt;/math&amp;gt; with the same original constraints. The optimal solution is &amp;lt;math&amp;gt;x^{*},y^{*}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# Calculate the value of parametric objective function &amp;lt;math&amp;gt;M(x^{*},y^{*},q)=A(x^{*},y^{*})-q*B(x^{*},y^{*})&amp;lt;/math&amp;gt;, if the value is within the tolerance &amp;lt;math&amp;gt;tol&amp;lt;/math&amp;gt;, then the optimality &amp;lt;math&amp;gt;(x^{*},y^{*})&amp;lt;/math&amp;gt; is found.&lt;br /&gt;
# Update the parametric parameter &amp;lt;math&amp;gt;q={A(x^{*},y^{*}) \over B(x^{*},y^{*})}&amp;lt;/math&amp;gt; and redo step 1.&lt;br /&gt;
&lt;br /&gt;
==Reformulation-Linearization Method==&lt;br /&gt;
The reformulation-linearization method, which incorporates the Glover’s linearization into the Charnes-Cooper transformation,&amp;lt;sup&amp;gt;[https://onlinelibrary.wiley.com/doi/abs/10.1002/nav.3800200308?casa_token=BsaOkI0dilIAAAAA:wPELPH83o1FuB9xHW8rRDhwInT3xsGjqqqk6LWID7WYpLexkAhgiymU-4-ew7c0nEoC3wM49-oFHa1m5]&amp;lt;/sup&amp;gt; introduce auxiliary variables to reformulate the MILFP into equivalent MINLP. The resulting MINLP is subsequently transformed into MILP, which can be efficiently solved by typical MILP solvers like [[wikipedia:CPLEX|CPLEX]], via using Glover’s linearization.The reformulation approach is shown as follows:&lt;br /&gt;
&lt;br /&gt;
The original form of the optimization model is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align} \max T(x,y)={c_0+\sum_{i}c_{1,i}m_i+\sum_{j}c_{2,j}y_j \over d_0+\sum_{i}d_{1,i}m_i+\sum_{j}d_{2,j}y_j}\\&lt;br /&gt;
&lt;br /&gt;
       s.t.\quad\ a_{0,k}+\sum_{i}a_{1,i}m_i+\sum_{j}a_{2,j}y_j=0,\quad   \forall k \in K\\&lt;br /&gt;
&lt;br /&gt;
       m_i\ge0,\quad \forall i \in I\\&lt;br /&gt;
       &lt;br /&gt;
       y_j\in {0,1},\quad \forall j \in J \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firstly, we convert the fractional objective function into a bilinear constraint, as well as a substutional term &amp;lt;math&amp;gt;g_i&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u={1\over d_0+\sum_{i}d_{1,i}m_i+\sum_{j}d_{2,j}y_j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;g_i={m_i*u}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j={y_j*u}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the MILP equivalent model, we use the Glover&#039;s Linearization to transform the bilinear constraint (&amp;lt;math&amp;gt;h_j={y_j*u}&amp;lt;/math&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j={y_j*u}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j\leq u,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j\leq M*y_j,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j\geq u-M*y_j,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j\geq 0,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u\geq 0,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;g_i\geq 0,\quad \forall i \in I&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j\geq 0,\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_j\in {0,1},\quad \forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this regard, we reformulate the original MILFP model into MILP model, which can be effectively solved by a typical [[wikipedia:branch and cut|branch-and-cut]] solver like [[wikipedia:CPLEX|CPLEX]]. To summarize, the reformulated MILP model is shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}\max W(u,g,h)={c_0*u+\sum_{i}c_{1,i}g_i+\sum_{j}c_{2,j}h_j}\\&lt;br /&gt;
&lt;br /&gt;
       s.t.\quad\ a_{0,k}*u+\sum_{i}a_{1,i}g_i+\sum_{j}a_{2,j}h_j=0,\quad   \forall k \in K\\&lt;br /&gt;
         &lt;br /&gt;
                  d_0*u+\sum_{i}d_{1,i}g_i+\sum_{j}d_{2,j}h_j=1\\&lt;br /&gt;
&lt;br /&gt;
                  h_j\leq u,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  h_j\leq M*y_j,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  h_j\geq u-M*y_j,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  h_j\geq 0,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  u\geq 0,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  g_i\geq 0,\quad \forall i \in I\\&lt;br /&gt;
&lt;br /&gt;
                  h_j\geq 0,\quad \forall j \in J\\&lt;br /&gt;
&lt;br /&gt;
                  y_j\in {0,1},\quad \forall j \in J\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Branch-and-Bound with Charnes-Cooper Transformation Method==&lt;br /&gt;
The integration of the Charnes-Cooper transformation method with the [[wikipedia:Branch and Bound|Branch-and-Bound (B&amp;amp;B)]] algorithm can reformulate the relaxation form of the fractional objective problem in each node into an LP subproblem, which can reach its global optimality via using MILP solvers like [[wikipedia:CPLEX|CPLEX]]. Since solution steps are similar to those of B&amp;amp;B and the reformulation step is shown in Reformulation-Linearization Method, we encourage readers to search for B&amp;amp;B algorithm and paper of Gao et al.&amp;lt;sup&amp;gt;[https://aiche.onlinelibrary.wiley.com/doi/full/10.1002/aic.14705]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Application and Modeling for Numerical Examples==&lt;br /&gt;
&lt;br /&gt;
=== Applications of MILFP ===&lt;br /&gt;
&lt;br /&gt;
Two typical applications are introduced in this section, namely [[wikipedia:cyclic scheduling|cyclic scheduling]] and life-cycle optimization.&amp;lt;sup&amp;gt;[https://pubs.acs.org/doi/abs/10.1021/acssuschemeng.7b00631#:~:text=Life%20cycle%20optimization%20(LCO)%20enables,and%20optimization%20of%20process%20alternatives.]&amp;lt;/sup&amp;gt; One typical cyclic scheduling problem was illustrated in Yue et al.&amp;lt;sup&amp;gt;[https://www.sciencedirect.com/science/article/pii/S0098135413000781]&amp;lt;/sup&amp;gt;, the fractional objective was optimized to reflect both the absolute profit and scheduling aspect, which were shown in the numerator and denominator, respectively. The combination of Reformulation-Linearization method and [[wikipedia:CPLEX|CPLEX]] were regarded as solution algorithm and the optimization framework was applied in a case study corresponding to a multiproduct batch plant that used 14 processing stages for producing three acrylic fiber formulations with a time horizon of 100 h.  &lt;br /&gt;
&lt;br /&gt;
In the life-cycle optimization problem of a certain processing system, the unreasonably maximum or minimum treatment amount from optimizing linear objective functions can be avoided via optimizing the fractional objective, and thus the balanced processing amount can be obtained to address the sustainable design and synthesis of this processing system.&amp;lt;sup&amp;gt;[https://pubs.acs.org/doi/abs/10.1021/acssuschemeng.7b03198?casa_token=dokyfl7kzigAAAAA:Z6riBbyfYZgakqA0Qw6du37ClfOFBuBKQxcuExnuWUvniwFWEjx17ivfLo4uvTgsl4eMBukRxfLYXW6dsA]&amp;lt;/sup&amp;gt; Notably, the functional unit is shown in the denominator, while the total economic and environmental performances are denoted as numerators in fractional objective functions. Specifically as illustrated in Gong et al.,&amp;lt;sup&amp;gt;[https://aiche.onlinelibrary.wiley.com/doi/full/10.1002/aic.15882]&amp;lt;/sup&amp;gt; the sustainable design and synthesis of the shale gas processing system was obtained via optimizing the unit net present value (NPV), unit global warming potential (GWP), and unit freshwater consumption simultaneously. The optimization framework was applied in the Marcella Shale gas site. &lt;br /&gt;
&lt;br /&gt;
In the next two numerical examples, we present a “simple form” of MILFP that can be used for selecting optimal processing pathways via maximizing unit NPV or minimizing unit GWP, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Numerical Examples of MILFP ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction of Numerical Examples ====&lt;br /&gt;
&lt;br /&gt;
[[File:Opti wiki.jpg|thumb|right|Figure 1. Superstructure of the chemical processing system]]&lt;br /&gt;
Let’s consider a simple chemical plant, whose superstructure is shown on the right side. The superstructure denotes all technology options, and only one of them in each level can be chosen simultaneously. To find the optimal processing pathway on the basis of economic and environmental aspects, we consider maximizing the [[wikipedia:net present value|net present value (NPV)]] or minimizing unit greenhouse gas (GHG) emissions, respectively. Notably, the unit NPV equals the ratio of the NPV with the total mass flow rate of product I within the project lifespan of ten years. The discount rate is 10%.&lt;br /&gt;
&lt;br /&gt;
==== Input Parameters of Numerical Examples ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Conversion Rate of each Chemical&lt;br /&gt;
|-&lt;br /&gt;
! Processing Level !! Conversion Rate !! Conversion Rate !! Conversion Rate&lt;br /&gt;
|-&lt;br /&gt;
| Level 1 || D to E: 0.8 || D to F: 0.9&lt;br /&gt;
|-&lt;br /&gt;
| Level 2 || E to G: 0.7 || E to H: 0.8 || F to H: 0.4&lt;br /&gt;
|-&lt;br /&gt;
| Level 3 || G to I: 0.5 || H to I: 0.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Fixed Capital Cost for each Technology Alternative ($)&lt;br /&gt;
|-&lt;br /&gt;
! A1 !! A2 !! A3 !! B1 !! B2 !! B3 !! C1 !! C2 !! C3&lt;br /&gt;
|-&lt;br /&gt;
| 6,000,000 || 7,000,000 || 7,500,000 || 5,000,000 || 6,000,000 || 7,500,000 || 11,000,000 || 10,000,000 || 10,500,000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Variable Capital Cost for each Technology Alternative ($/(ton/yr))&lt;br /&gt;
|-&lt;br /&gt;
! A1 !! A2 !! A3 !! B1 !! B2 !! B3 !! C1 !! C2 !! C3&lt;br /&gt;
|-&lt;br /&gt;
| 50 || 40 || 35 || 60 || 55 || 45 || 30 || 35 || 33&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Operating Cost for each Technology Alternative ($/(ton/yr))&lt;br /&gt;
|-&lt;br /&gt;
! A1 !! A2 !! A3 !! B1 !! B2 !! B3 !! C1 !! C2 !! C3&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 30 || 20 || 30 || 28 || 50 || 27 || 25 || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Feedstock Supply and Demand of Product (ton/yr)/Feedstock and Product Price ($/(ton/yr))&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Supply/Demand !! Feedstock/Product Price&lt;br /&gt;
|-&lt;br /&gt;
| D || 2,000,000  || 100&lt;br /&gt;
|-&lt;br /&gt;
| I || 200,000  || 2000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ GHG Emissions from each Technology Option (ton CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-eq/ton inlet chemicals)&lt;br /&gt;
|-&lt;br /&gt;
! A1 !! A2 !! A3 !! B1 !! B2 !! B3 !! C1 !! C2 !! C3&lt;br /&gt;
|-&lt;br /&gt;
| 1.2 || 0.9 || 0.7 || 1.4 || 1.6 || 1.3 || 2.1 || 2.4 || 2.7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Nomenclatures for the Mathematical Model of the Numerical Examples ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Nomenclature&lt;br /&gt;
|-&lt;br /&gt;
! Nomenclature !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;&#039;&#039; || Set of production stages indexed by &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt;&#039;&#039; || Set of process alternatives &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&#039;&#039; || Demand of product I.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;CAV_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Unit variable capital cost in the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;CV_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Conversion rate from input flow to output flow in the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;FIXI_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Fixed capital cost in the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;GHG_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Unit GHG emissions from the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;OPERI_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Unit operating cost in the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;PRI&amp;lt;/math&amp;gt;&#039;&#039; || Price of product I.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;PRID&amp;lt;/math&amp;gt;&#039;&#039; || Price of chemical D.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039; || Supply of chemical D.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;y_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || 0-1 variable. Equals to one if the process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is selected. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;ca_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Capacity of process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;fec&amp;lt;/math&amp;gt;&#039;&#039; || Total feedstock cost. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;fix&amp;lt;/math&amp;gt;&#039;&#039; || Total fixed capital cost. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;ghgt&amp;lt;/math&amp;gt;&#039;&#039; || Total GHG emissions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;mi_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Mass flow rate of the feedstock flow to process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;mo_{i,j}&amp;lt;/math&amp;gt;&#039;&#039; || Mass flow rate of the output flow to process alternative &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; at the production stage &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;oper&amp;lt;/math&amp;gt;&#039;&#039; || Total operating cost. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;objc&amp;lt;/math&amp;gt;&#039;&#039; || Unit net present value (NPV).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;obje&amp;lt;/math&amp;gt;&#039;&#039; || Unit GHG emissions (within one operating year).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;npv&amp;lt;/math&amp;gt;&#039;&#039; || Net present value.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;sale&amp;lt;/math&amp;gt;&#039;&#039; || Total sales.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&amp;lt;math&amp;gt;vai&amp;lt;/math&amp;gt;&#039;&#039; || Total variable capital cost. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Mass Balance Constraints =====&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;mi_{i,j} \leq ca_{i,j},\quad \forall i \in I,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint denotes that the mass flow rate of the inlet flow should not exceed the treatment capacity.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;ca_{i,j} \leq M*y_{i,j},\quad \forall i \in I,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint represents that the treatment capacity would be zero if the corresponding technology option is not selected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;mo_{i,j} = mi_{i,j}*CV_{i,j},\quad \forall i \in I,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint illustrates the conversion of the inlet flow and the outlet flow.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;\sum_{j}mo_{(i-1),j} = \sum_{j}mi_{i,j},\quad \forall i \geq 2,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint denotes that the summation of mass flow rates of the outlet flows from the previous processing level equals to those of the inlet flows in the next processing level.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;\sum_{j}mo_{3,j} \geq D,\quad \forall i \in I,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint represents that the summation of mass flow rates of the technology options in the third processing level should be larger than the demand of the product I.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;\sum_{j}mi_{1,j} \leq S,\quad \forall i \in I,\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This aforementioned constraint represents that the summation of mass flow rates of the technology options in the first processing level should be less than the supply of the chemical D.&lt;br /&gt;
&lt;br /&gt;
===== Superstructure Configuration Constraints =====&lt;br /&gt;
&lt;br /&gt;
Notably, the superstructure configuration constraints illustrate the logic relationship between each technology option within the superstructure. If the binary variable &amp;lt;math&amp;gt;y_{i,j}&amp;lt;/math&amp;gt; equals to 1, than the technology option &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; in the process level &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is selected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;y_{1,1}+y_{1,2}+y_{1,3} = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;y_{1,1}+y_{1,2}=y_{2,1}+y_{2,2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;y_{1,3}=y_{2,3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;y_{2,1}=y_{3,1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;y_{2,2}+y_{2,3}=y_{3,2}+y_{3,3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Economic Evaluation Constraints =====&lt;br /&gt;
&lt;br /&gt;
We consider the fixed capital cost (&amp;lt;math&amp;gt;fix&amp;lt;/math&amp;gt;), variable capital cost (&amp;lt;math&amp;gt;vai&amp;lt;/math&amp;gt;), operating cost (&amp;lt;math&amp;gt;oper&amp;lt;/math&amp;gt;), and feedstock cost (&amp;lt;math&amp;gt;fec&amp;lt;/math&amp;gt;) as the expenses for the chemical processing system. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;fix=\sum_{i}{\sum_{j}FIXI_{i,j}*y_{i,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;vai=\sum_{i}{\sum_{j}CAV_{i,j}*ca_{i,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;oper=\sum_{i}{\sum_{j}OPERI_{i,j}*mo_{i,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;fec=PRID*\sum_{j}mi_{1,j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;sale=PRI*\sum_{j}mo_{3,j}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The net present value is calculated in the constraint below (&amp;lt;math&amp;gt;fix&amp;lt;/math&amp;gt;), where we account for the total discounted cash flow and &amp;lt;math&amp;gt;SP&amp;lt;/math&amp;gt; represents for the lifespan of the this project. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;npv={DR*(1+DR)^{SP} \over (1+DR)^{SP}-1}*(sale-(vai+oper+fec))-fix&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Environmental Evaluation Constraint =====&lt;br /&gt;
&lt;br /&gt;
The total GHG emissions from the chemical processing system is calculated in the constraint below.&lt;br /&gt;
  &amp;lt;math&amp;gt;ghgt=\sum_{i}{\sum_{j}GHG_{i,j}*mi_{i,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Objective Functions =====&lt;br /&gt;
&lt;br /&gt;
Two numerical examples are presented as optimizing each fractional objective function, which is shown as below. Since all constraints denote the relationship between various continuous and discrete variables, two aforementioned numerical problems can be regarded as MILFPs. We consider maximizing unit NPV (&amp;lt;math&amp;gt;obje&amp;lt;/math&amp;gt;) or minimizing unit global warming potential [[wikipedia:global warming potential|global warming potential (GWP)]] (&amp;lt;math&amp;gt;objc&amp;lt;/math&amp;gt;) in two numerical examples, respectively. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;obje={npv \over \sum_{j}mo_{3,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;objc={ghgt \over \sum_{j}mo_{3,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Solution for Numerical Examples==&lt;br /&gt;
&lt;br /&gt;
===Maximizing Unit NPV===&lt;br /&gt;
&lt;br /&gt;
We consider the first objective function (&amp;lt;math&amp;gt;obje&amp;lt;/math&amp;gt;) and all constraints in the mathematical model, where we can reformulate the objective function into a parametric form (&amp;lt;math&amp;gt;obj_1&amp;lt;/math&amp;gt;) using parametric parameter &amp;lt;math&amp;gt;q_1&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;\max \quad\ obj_1={npv-q_1*\sum_{j}mo_{3,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;s.t.\quad\ Mass \ \ Balance\ \ Constraints, Superstructure\ \ Configuration\ \ Constraints, Economic\ \ Evaluation\ \ Constraints&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This reformulated model can be solved by the [[wikipedia:CPLEX|CPLEX]] iteratively, and the solution is shown as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Process to be built&lt;br /&gt;
|-&lt;br /&gt;
! Level 1 !! Level 2 !! Level 3&lt;br /&gt;
|-&lt;br /&gt;
| A1 || - || -&lt;br /&gt;
|-&lt;br /&gt;
| - || B2 || -&lt;br /&gt;
|-&lt;br /&gt;
| - || - || C3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Performance&lt;br /&gt;
|-&lt;br /&gt;
! Production Amount (ton/yr) !! Unit NPV ($/ton) !! Unit GHG Emissions (ton CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-eq/ton products)&lt;br /&gt;
|-&lt;br /&gt;
| 768,000 || 187.75 || 10.18&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Minimizing Unit GHG Emissions===&lt;br /&gt;
&lt;br /&gt;
We consider the first objective function (&amp;lt;math&amp;gt;objc&amp;lt;/math&amp;gt;) and all constraints in the mathematical model, where we can reformulate the objective function into a parametric form (&amp;lt;math&amp;gt;obj_2&amp;lt;/math&amp;gt;) using parametric parameter &amp;lt;math&amp;gt;q_2&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;\min \quad\ obj_2={ghgt-q_2*\sum_{j}mo_{3,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;s.t.\quad\ Mass\ \ Balance\ \ Constraints, Superstructure\ \ Configuration\ \ Constraints, Environmental\ \ Evaluation\ \ Constraints&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This reformulated model can be solved by the [[wikipedia:CPLEX|CPLEX]] iteratively, and the solution is shown as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Process to be built&lt;br /&gt;
|-&lt;br /&gt;
! Level 1 !! Level 2 !! Level 3&lt;br /&gt;
|-&lt;br /&gt;
| - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| A2 || B2 || C2&lt;br /&gt;
|-&lt;br /&gt;
| - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Performance&lt;br /&gt;
|-&lt;br /&gt;
! Production Amount (ton/yr) !! Unit NPV ($/ton) !! Unit GHG Emissions (ton CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-eq/ton products)&lt;br /&gt;
|-&lt;br /&gt;
| 768,000 || 186.23 || 9.68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Computational performance===&lt;br /&gt;
The computational performances of branch-and-refine algorithm and BARON are shown in the table below, where we find that the former algorithm has advantage over the latter one. The optimal solutions for both algorithm are the same, which illustrates the global optimality of the solution from branch-and-refine algorithm.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Computational Performance for maximizing unit NPV&lt;br /&gt;
|-&lt;br /&gt;
! CPUs for branch-and-refine (s) !! CPUs for BARON (s)&lt;br /&gt;
|-&lt;br /&gt;
| 0.125 || 98.2 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Performance for BARON algorithm&lt;br /&gt;
|-&lt;br /&gt;
! Production Amount (ton/yr) !! Unit NPV ($/ton) !! Unit GHG Emissions (ton CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-eq/ton products)&lt;br /&gt;
|-&lt;br /&gt;
| 768,000 || 187.75 || 10.18&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The mixed-integer linear fractional programming (MILFP) is a kind of mixed-integer nonlinear programming (MINLP) that is implemented into evaluating the average performance of a certain project. The Parametric Algorithm, Reformulation-Linearization Method, and Branch-and-Bound with Charnes-Cooper Transformation Method are three typical algorithms that aim to tackle the computational challenge caused by the fractional objective. The optimization framework can be applied to the chemical engineering, environmental engineering, and their combined area such as life-cycle optimization.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
# Liu, S., Gerontas, S., Gruber, D., Turner, R., Titchener‐Hooker, N. J., &amp;amp; Papageorgiou, L. G. (2017). Optimization‐based framework for resin selection strategies in biopharmaceutical purification process development. Biotechnology Progress, 33(4), 1116-1126.&lt;br /&gt;
# Zhu, H. (2014). Inexact fractional optimization for multicriteria resources and environmental management under uncertainty (Doctoral dissertation, Faculty of Graduate Studies and Research, University of Regina).&lt;br /&gt;
# Gao, J., &amp;amp; You, F. (2017). Economic and environmental life cycle optimization of noncooperative supply chains and product systems: modeling framework, mixed-integer bilevel fractional programming algorithm, and shale gas application. ACS Sustainable Chemistry &amp;amp; Engineering, 5(4), 3362-3381.&lt;br /&gt;
# Zhong, Z., &amp;amp; You, F. (2014). Globally convergent exact and inexact parametric algorithms for solving large-scale mixed-integer fractional programs and applications in process systems engineering. Computers &amp;amp; Chemical Engineering, 61, 90-101.&lt;br /&gt;
# You, F., Castro, P. M., &amp;amp; Grossmann, I. E. (2009). Dinkelbach&#039;s algorithm as an efficient method to solve a class of MINLP models for large-scale cyclic scheduling problems. Computers &amp;amp; Chemical Engineering, 33(11), 1879-1889.&lt;br /&gt;
# Quesada, I., &amp;amp; Grossmann, I. E. (1995). A global optimization algorithm for linear fractional and bilinear programs. Journal of Global Optimization, 6(1), 39-76.&lt;br /&gt;
# Zhong, Z., &amp;amp; You, F. (2014, June). Parametric algorithms for global optimization of mixed-integer fractional programming problems in process engineering. In 2014 American Control Conference (pp. 3609-3614). IEEE.&lt;br /&gt;
# Charnes, A., &amp;amp; Cooper, W. W. (1973). An explicit general solution in linear fractional programming. Naval Research Logistics Quarterly, 20(3), 449-467.&lt;br /&gt;
# Gao, J., &amp;amp; You, F. (2015). Optimal design and operations of supply chain networks for water management in shale gas production: MILFP model and algorithms for the water‐energy nexus. AIChE Journal, 61(4), 1184-1208.&lt;br /&gt;
# Gong, J., &amp;amp; You, F. (2017). Consequential life cycle optimization: general conceptual framework and application to algal renewable diesel production. ACS Sustainable Chemistry &amp;amp; Engineering, 5(7), 5887-5911.&lt;br /&gt;
# Yue, D., &amp;amp; You, F. (2013). Sustainable scheduling of batch processes under economic and environmental criteria with MINLP models and algorithms. Computers &amp;amp; Chemical Engineering, 54, 44-59.&lt;br /&gt;
# Gao, J., &amp;amp; You, F. (2018). Integrated hybrid life cycle assessment and optimization of shale gas. ACS Sustainable Chemistry &amp;amp; Engineering, 6(2), 1803-1824.&lt;br /&gt;
# Gong, J., &amp;amp; You, F. (2018). A new superstructure optimization paradigm for process synthesis with product distribution optimization: Application to an integrated shale gas processing and chemical manufacturing process. AIChE Journal, 64(1), 123-143.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Branch_and_cut&amp;diff=2735</id>
		<title>Branch and cut</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Branch_and_cut&amp;diff=2735"/>
		<updated>2020-12-21T11:38:14Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Lindsay Siegmundt, Peter Haddad, Chris Babbington, Jon Boisvert, Haris Shaikh (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Branch and Cut methodology was discovered in the 90s as a way to solve/optimize Mixed-Integer Linear Programs (Karamanov, Miroslav)&amp;lt;ref&amp;gt;Karamanov, Miroslav. “Branch and Cut: An Empirical Study.” &#039;&#039;Carnegie Mellon University&#039;&#039; , Sept. 2006, https://www.cmu.edu/tepper/programs/phd/program/assets/dissertations/2006-operations-research-karamanov-dissertation.pdf.&amp;lt;/ref&amp;gt;. This concept is comprised of two known optimization methodologies - Branch and Bound and Cutting Planes. Utilizing these two tools allows for the Branch and Cut to find an optimal solution through relaxing the problem to produce the upper bound. Relaxing the problem allows for the complex problem to be simplified in order for it to be solve more easily. Furthermore, the upper bound represents the highest value the objective can take in order to be feasible. The optimal solution is found when the objective is equal to the upper bound (Luedtke, Jim)&amp;lt;ref&amp;gt;Luedtke, Jim. “The Branch-and-Cut Algorithm for Solving Mixed-Integer Optimization Problems.” &#039;&#039;Institute for Mathematicians and Its Applications&#039;&#039;, 10 Aug. 2016, https://www.ima.umn.edu/materials/2015-2016/ND8.1-12.16/25397/Luedtke-mip-bnc-forms.pdf.&amp;lt;/ref&amp;gt;. This methodology is critical to the future of optimization since it combines two common tools in order to utilize each component in order to find the optimal solution. Moving forward, the critical components of different methodologies could be combined in order to find optimality in a more simple and direct manner. &lt;br /&gt;
&lt;br /&gt;
== Methodology &amp;amp; Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Methodology ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Abbreviation Details&lt;br /&gt;
!Acronym&lt;br /&gt;
!Expansion&lt;br /&gt;
|-&lt;br /&gt;
|LP&lt;br /&gt;
|Linear Programming&lt;br /&gt;
|-&lt;br /&gt;
|B&amp;amp;B&lt;br /&gt;
|Branch and Bound&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Most Infeasible Branching: ====&lt;br /&gt;
Most infeasible branching is a very popular method that picks the variable with fractional part closest to &amp;lt;math&amp;gt;0:5&amp;lt;/math&amp;gt;, i.e.,&amp;lt;math&amp;gt; si = 0:5-|xA_i- xA_i-0:5|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Branching rules revisited Tobias Achterberga;∗, Thorsten Kocha, Alexander Martinb https://www-m9.ma.tum.de/downloads/felix-klein/20B/AchterbergKochMartin-BranchingRulesRevisited.pdf&amp;lt;/ref&amp;gt;. Most infeasible branching picks a variable where the least tendency can be recognized to which side the variable should be rounded. However, the performance of this method is not any superior to the rule of selecting a variable randomly.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Strong Branching:&#039;&#039;&#039; ====&lt;br /&gt;
For each fractional variable, strong branching tests the dual bound increase by computing the LP relaxations result from the branching on that variable. As a branching variable for the current node, the variable that leads to the largest increases is selected. Despite its obvious simplicity, strong branching is so far the most powerful branching technique in terms of the number of nodes available in the B&amp;amp;B tree, this effectiveness can however be accomplished only at the cost of computation.&amp;lt;ref&amp;gt;A Branch-and-Cut Algorithm for Mixed Integer Bilevel Linear Optimization Problems and Its Implementation&amp;lt;nowiki/&amp;gt;https://coral.ise.lehigh.edu/~ted/files/papers/MIBLP16.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pseudo Cost:&#039;&#039;&#039; ====&lt;br /&gt;
[[File:Image.png|thumb|Pure psuedo cost branching]]&lt;br /&gt;
&lt;br /&gt;
Another way to approximate a relaxation value is by utilizing a pseudo cost method. The pseudo-cost of a variable is an estimate of the per unit change in the objective function from making the value of the variable to be rounded up or down.  For each variable we choose variable with the largest estimated LP objective gain&amp;lt;ref&amp;gt;Advances in Mixed Integer Programming http://scip.zib.de/download/slides/SCIP-branching.ppt&amp;lt;/ref&amp;gt;.   &lt;br /&gt;
===&#039;&#039;&#039;Algorithm&#039;&#039;&#039;===&lt;br /&gt;
Branch and Cut for is a variation of the Branch and Bound algorithm. Branch and Cut incorporates Gomery cuts allowing the search space of the given problem. The standard Simplex Algorithm will be used to solve each Integer Linear Programming Problem (LP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min: c^tx&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. Ax &amp;lt; b&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x \geq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i = int, i = 1,2,3...,n&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Above is a mix-integer linear programming problem. x and c are a part of the n-vector. These variables can be set to 0 or 1 allow binary variables. The above problem can be denoted as &amp;lt;math&amp;gt;LP_n &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an Algorithm to utilize the Branch and Cut algorithm with Gomery cuts and Partitioning:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 0:&#039;&#039;&#039;&lt;br /&gt;
 Upper Bound = ∞&lt;br /&gt;
 Lower Bound = -∞&lt;br /&gt;
&#039;&#039;&#039;Step 1. Initialize:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the first node as &amp;lt;math&amp;gt;LP_0&amp;lt;/math&amp;gt; while setting the active nodes set as &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. The set can be accessed via &amp;lt;math&amp;gt;LP_n &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Step 2. Terminate:&#039;&#039;&#039;====&lt;br /&gt;
Step 3. Iterate through list L:&lt;br /&gt;
&lt;br /&gt;
While &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is not empty (i is the index of the list of L), then:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3.1. Convert to a Relaxation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solve 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Solve for the Relaxed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3.3.&#039;&#039;&#039;&lt;br /&gt;
 If Z is infeasible:&lt;br /&gt;
    Return to step 3.&lt;br /&gt;
 else:&lt;br /&gt;
    Continue with solution Z.&lt;br /&gt;
&#039;&#039;&#039;Step 4. Cutting Planes:&#039;&#039;&#039;&lt;br /&gt;
 If a cutting plane is found:&lt;br /&gt;
    then add to the Linear Relaxation problem (as a constraint) and return to step 3.2&lt;br /&gt;
 Else:&lt;br /&gt;
    Continue.&lt;br /&gt;
&#039;&#039;&#039;Step 5. Pruning and Fathoming:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(a)If ≥ Z:, then go to step 3.&lt;br /&gt;
 If Z^l &amp;lt;= Z AND X_i is an integral feasible:&lt;br /&gt;
    Z = Z^i&lt;br /&gt;
    Remove all Z^i from Set(L)&lt;br /&gt;
&#039;&#039;&#039;Step 6. Partition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;D^{lj=k}_{j=1}&amp;lt;/math&amp;gt; be a partition of the constraint set &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; of problem  &amp;lt;math&amp;gt;LP_l&amp;lt;/math&amp;gt;. Add problems &amp;lt;math&amp;gt;D^{lj=k}_{j=1}&amp;lt;/math&amp;gt; to L, where  &amp;lt;math&amp;gt;LP^l_j&amp;lt;/math&amp;gt; is &amp;lt;math&amp;gt;LP_l&amp;lt;/math&amp;gt; with feasible region restricted to &amp;lt;math&amp;gt;D^l_j&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Z_{lj}&amp;lt;/math&amp;gt; for j=1,...k is set to the value of &amp;lt;math&amp;gt;Z^l&amp;lt;/math&amp;gt; for the parent problem l. Go to step 3.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;Benders, J. F. (Sept. 1962), &amp;quot;Partitioning procedures for solving mixed-variables programming problems&amp;quot;, Numerische Mathematik 4(3): 238–252.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
First, list out the MILP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to original LP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-19.56, x_1=1.88, x_2=1.72 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Branch on x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; to generate sub-problems&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\geq2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to fist branch sub-problem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-15, x_1=2, x_2=1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\leq1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to second branch sub-problem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-14.5, x_1=1, x_2=1.5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adding a cut&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2x_1+x_2\leq 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\leq1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to cut LP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=-13.222,x_1=.778,x_2=1.444&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Application==&lt;br /&gt;
Several of the Branch and Cut applications are described below in more detail and how they can be used. These applications serve as methods in which Branch and Cut can be used to optimize various problems efficiently.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Combinatorial Optimization&#039;&#039;&#039; ===&lt;br /&gt;
Combinatorial Optimization is a great application for Branch and Cut. This style of optimization is the methodology of utilizing the finite known sets and information of the sets to optimize the solution. The original intent for this application was for maximizing flow as well as in the transportation industry (Maltby and Ross). This combinatorial optimization has also taken on some new areas where it is used often. Combinatorial Optimization is now an imperative component in studying artificial intelligence and machine learning algorithms to optimize solutions. The finite sets that Combinatorial Optimization tends to utilize and focus on includes graphs, partially ordered sets, and structures that define linear independence call matroids.&amp;lt;ref&amp;gt;[https://brilliant.org/wiki/combinatorial-optimization/ Maltby, Henry, and Eli Ross. “Combinatorial Optimization.” &#039;&#039;Brilliant Math &amp;amp; Science Wiki&#039;&#039;, https://brilliant.org/wiki/combinatorial-optimization/.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Bender’s Decomposition&#039;&#039;&#039; ===&lt;br /&gt;
Bender’s Decomposition is another Branch and Cut application that is utilized widely in Stochastic Programming. Bender’s Decomposition is where you take the initial problem and divide into two distinct subsets. By dividing the problem into two separate problems you are able to solve each set easier than the original instance (Benders). Therefore the first problem within the subset created can be solved for the first variable set. The second sub problem is then solved for, given that first problem solution. Doing this allows for the sub problem to be solved to determine whether the first problem is infeasible (Benders). Bender’s cuts can be added to constrain the problem until a feasible solution can be found.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Large-Scale Symmetric Traveling Salesmen Problem&#039;&#039;&#039; ===&lt;br /&gt;
The Large-Scale Symmetric Traveling Salesmen Problem is a common problem that was always looked into optimizing for the shortest route while visiting each city once and returning to the original city at the end. On a larger scale this style of problem must be broken down into subsets or nodes (SIAM). By constraining this style of problem such as the methods of Combinatorial Optimization, the Traveling Salesmen Problem can be viewed as partially ordered sets. By doing this on a large scale with finite cities you are able to optimize the shortest path taken and ensure each city is only visited once.&amp;lt;ref&amp;gt;Society for Industrial and Applied Mathematics. “SIAM Rev.” &#039;&#039;SIAM Review&#039;&#039;, 18 July 2006, https://epubs.siam.org/doi/10.1137/1033004&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Submodular Function&#039;&#039;&#039; ===&lt;br /&gt;
Submodular Function is another function in which is used throughout artificial intelligence as well as machine learning. The reason for this is because as inputs are increased into the function the value or outputs decrease. This allows for a great optimization features in the cases stated above because inputs are continually growing. This allows for machine learning and artificial intelligence to continue to grow based on these algorithms (Tschiatschek, Iyer, and Bilmes)&amp;lt;ref&amp;gt;S. Tschiatschek, R. Iyer, H. Wei and J. Bilmes, Learning Mixtures of Submodular Functions for Image Collection Summarization, NIPS-2014.&amp;lt;/ref&amp;gt;. By enforcing new inputs to the system the system will learn more and more to ensure it optimizes the solution that is to be made.&amp;lt;ref&amp;gt;A. Krause and C. Guestrin, Beyond Convexity: Submodularity in Machine Learning, Tutorial at ICML-2008&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The Branch and Cut is an optimization algorithm used to optimize integer linear programming. It combines two other optimization algorithms - branch and bound and cutting planes in order to utilize the results from each method in order to create the most optimal solution. There are three different methodologies used within the specific method - most infeasible branching, strong branching, and pseudo code. Furthermore, Branch and Cut can be utilized it multiple scenarios - Submodular function, large-scale symmetric traveling salesmen problem, bender&#039;s decomposition, and combination optimization which increases the impact of the methodology. &lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Heuristic_algorithms&amp;diff=2734</id>
		<title>Heuristic algorithms</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Heuristic_algorithms&amp;diff=2734"/>
		<updated>2020-12-21T11:37:33Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Anmol Singh (as2753) (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
In mathematical programming, a heuristic algorithm is a procedure that determines near-optimal solutions to an optimization problem. However, this is achieved by trading optimality, completeness, accuracy, or precision for speed.&amp;lt;ref&amp;gt; Eiselt, Horst A et al. Integer Programming and Network Models. Springer, 2011.&amp;lt;/ref&amp;gt; Nevertheless, heuristics is a widely used technique for a variety of reasons:&lt;br /&gt;
&lt;br /&gt;
*Problems that do not have an exact solution or for which the formulation is unknown&lt;br /&gt;
*The computation of a problem is computationally intensive&lt;br /&gt;
*Calculation of bounds on the optimal solution in branch and bound solution processes&lt;br /&gt;
==Methodology==&lt;br /&gt;
Optimization heuristics can be categorized into two broad classes depending on the way the solution domain is organized:&lt;br /&gt;
&lt;br /&gt;
===Construction methods (Greedy algorithms)===&lt;br /&gt;
The greedy algorithm works in phases, where the algorithm makes the optimal choice at each step as it attempts to find the overall optimal way to solve the entire problem.&amp;lt;ref&amp;gt;&lt;br /&gt;
&#039;&#039;Introduction to Algorithms&#039;&#039; (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 16 &amp;quot;Greedy Algorithms&amp;quot;.&amp;lt;/ref&amp;gt; It is a technique used to solve the famous “traveling salesman problem” where the heuristic followed is: &amp;quot;At each step of the journey, visit the nearest unvisited city.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
====Example: Scheduling Problem====&lt;br /&gt;
You are given a set of N schedules of lectures for a single day at a university. The schedule for a specific lecture is of the form (s time, f time) where s time represents the start time for that lecture, and similarly, the f time represents the finishing time. Given a list of N lecture schedules, we need to select a maximum set of lectures to be held out during the day such that none of the lectures overlaps with one another i.e. if lecture L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and L&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt; are included in our selection then the start time of j ≥ finish time of i or vice versa. The most optimal solution to this would be to consider the earliest finishing time first. We would sort the intervals according to the increasing order of their finishing times and then start selecting intervals from the very beginning. &lt;br /&gt;
&lt;br /&gt;
===Local Search methods===&lt;br /&gt;
The Local Search method follows an iterative approach where we start with some initial solution, explore the neighborhood of the current solution, and then replace the current solution with a better solution.&amp;lt;ref&amp;gt; Eiselt, Horst A et al. Integer Programming and Network Models. Springer, 2011.&amp;lt;/ref&amp;gt; For this method, the “traveling salesman problem” would follow the heuristic in which a solution is a cycle containing all nodes of the graph and the target is to minimize the total length of the cycle.&lt;br /&gt;
&lt;br /&gt;
==== Example Problem  ====&lt;br /&gt;
Suppose that the problem P is to find an optimal ordering of N jobs in a manufacturing system. A solution to this problem can be described as an N-vector of job numbers, in which the position of each job in the vector defines the order in which the job will be processed. For example, [3, 4, 1, 6, 5, 2] is a possible ordering of 6 jobs, where job 3 is processed first, followed by job 4, then job 1, and so on, finishing with job 2. Define now M as the set of moves that produce new orderings by the swapping of any two jobs. For example, [3, 1, 4, 6, 5, 2] is obtained by swapping the positions of jobs 4 and 1.&lt;br /&gt;
==Popular Heuristic Algorithms==&lt;br /&gt;
&lt;br /&gt;
===Genetic Algorithm===&lt;br /&gt;
The term Genetic Algorithm was first used by John Holland.&amp;lt;ref&amp;gt;J.H. Holland (1975) &#039;&#039;Adaptation in Natural and Artificial Systems,&#039;&#039; University of Michigan Press, Ann Arbor, Michigan; re-issued by MIT Press (1992).&amp;lt;/ref&amp;gt; They are designed to mimic the Darwinian theory of evolution, which states that populations of species evolve to produce more complex organisms and fitter for survival on Earth. Genetic algorithms operate on string structures, like biological structures, which are evolving in time according to the rule of survival of the fittest by using a randomized yet structured information exchange. Thus, in every generation, a new set of strings is created, using parts of the fittest members of the old set.&amp;lt;ref&amp;gt;Optimal design of heat exchanger networks, Editor(s): Wilfried Roetzel, Xing Luo, Dezhen Chen, Design and Operation of Heat Exchangers and their Networks, Academic Press, 2020, Pages 231-317, &amp;lt;nowiki&amp;gt;ISBN 9780128178942&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-12-817894-2.00006-6.&amp;lt;/ref&amp;gt; The algorithm terminates when the satisfactory fitness level has been reached for the population or the maximum generations have been reached. The typical steps are&amp;lt;ref&amp;gt;Wang FS., Chen LH. (2013) Genetic Algorithms. In: Dubitzky W., Wolkenhauer O., Cho KH., Yokota H. (eds) Encyclopedia of Systems Biology. Springer, New York, NY. https://doi.org/10.1007/978-1-4419-9863-7_412 &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1.     Choose an initial population of candidate solutions&lt;br /&gt;
&lt;br /&gt;
2.     Calculate the fitness, how well the solution is, of each individual&lt;br /&gt;
&lt;br /&gt;
3.     Perform crossover from the population. The operation is to randomly choose some pair of individuals like parents and exchange so parts from the parents to generate new individuals&lt;br /&gt;
&lt;br /&gt;
4.     Mutation is to randomly change some individuals to create other new individuals&lt;br /&gt;
&lt;br /&gt;
5.     Evaluate the fitness of the offspring&lt;br /&gt;
&lt;br /&gt;
6.     Select the survive individuals&lt;br /&gt;
&lt;br /&gt;
7.    Proceed from 3 if the termination criteria have not been reached&lt;br /&gt;
&lt;br /&gt;
===Tabu Search Algorithm===&lt;br /&gt;
Tabu search (TS) is a heuristic algorithm created by Fred Glover&amp;lt;ref&amp;gt;Fred Glover (1986). &amp;quot;Future Paths for Integer Programming and Links to Artificial Intelligence&amp;quot;. Computers and Operations Research. &#039;&#039;&#039;13&#039;&#039;&#039; (5): 533–549,https://doi.org/10.1016/0305-0548(86)90048-1&amp;lt;/ref&amp;gt; using a gradient-descent search with memory techniques to avoid cycling for determining an optimal solution. It does so by forbidding or penalizing moves that take the solution, in the next iteration, to points in the solution space previously visited. The algorithm spends some memory to keep a Tabu list of forbidden moves, which are the moves of the previous iterations or moves that might be considered unwanted. A general algorithm is as follows&amp;lt;ref&amp;gt;Optimization of Preventive Maintenance Program for Imaging Equipment in Hospitals, Editor(s): Zdravko Kravanja, Miloš Bogataj, Computer-Aided Chemical Engineering, Elsevier, Volume 38, 2016, Pages 1833-1838, ISSN 1570-7946, &amp;lt;nowiki&amp;gt;ISBN 9780444634283&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-444-63428-3.50310-6.&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
1.     Select an initial solution &#039;&#039;s&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ∈ &#039;&#039;S&#039;&#039;. Initialize the Tabu List &#039;&#039;L&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = ∅ and select a list tabu size. Establish &#039;&#039;k&#039;&#039; = 0.&lt;br /&gt;
&lt;br /&gt;
2.     Determine the neighborhood feasibility &#039;&#039;N&#039;&#039;(&#039;&#039;s&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;) that excludes inferior members of the tabu list &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3.     Select the next movement &#039;&#039;s&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; &amp;lt;sub&amp;gt;+ 1&amp;lt;/sub&amp;gt; from &#039;&#039;N&#039;&#039;(&#039;&#039;S&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;) or &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; if there is a better solution and update &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; &amp;lt;sub&amp;gt;+ 1&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.     Stop if a condition of termination is reached, else, &#039;&#039;k&#039;&#039; = &#039;&#039;k&#039;&#039; + 1 and return to 1&lt;br /&gt;
&lt;br /&gt;
==== Example: The Classical Vehicle Routing Problem  ====&lt;br /&gt;
&#039;&#039;Vehicle Routing Problems&#039;&#039; have very important applications in distribution management and have become some of the most studied problems in the combinatorial optimization literature. These include several Tabu Search implementations that currently rank among the most effective. The &#039;&#039;Classical Vehicle Routing Problem&#039;&#039; (CVRP) is the basic variant in that class of problems. It can formally be defined as follows. Let &#039;&#039;G&#039;&#039; = (&#039;&#039;V, A&#039;&#039;) be a graph where &#039;&#039;V&#039;&#039; is the vertex set and &#039;&#039;A&#039;&#039; is the arc set. One of the vertices represents the &#039;&#039;depot&#039;&#039; at which a fleet of identical vehicles of capacity &#039;&#039;Q&#039;&#039; is based, and the other vertices customers that need to be serviced. With each customer vertex v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are associated a demand q&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and a service time t&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;. With each arc (v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, v&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;) of &#039;&#039;A&#039;&#039; are associated a cost c&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; and a travel time t&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt;.&amp;lt;ref&amp;gt;Glover, Fred, and Gary A Kochenberger. Handbook Of Metaheuristics. Kluwer Academic Publishers, 2003.&amp;lt;/ref&amp;gt; The CVRP consists of finding a set of routes such that:&lt;br /&gt;
&lt;br /&gt;
1.     Each route begins and ends at the depot&lt;br /&gt;
&lt;br /&gt;
2.     Each customer is visited exactly once by exactly one route&lt;br /&gt;
&lt;br /&gt;
3.     The total demand of the customers assigned to each route does not exceed &#039;&#039;Q&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4.     The total duration of each route (including travel and service times) does not exceed a specified value &#039;&#039;L&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5.     The total cost of the routes is minimized&lt;br /&gt;
&lt;br /&gt;
A feasible solution for the problem thus consists of a partition of the customers into m groups, each of total demand no larger than &#039;&#039;Q&#039;&#039;, that are sequenced to yield routes (starting and ending at the depot) of duration no larger than &#039;&#039;L&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Simulated Annealing Algorithm===&lt;br /&gt;
The Simulated Annealing Algorithm was developed by Kirkpatrick et. al. in 1983&amp;lt;ref&amp;gt;Kirkpatrick, S., Gelatt, C., &amp;amp; Vecchi, M. (1983). Optimization by Simulated Annealing. &#039;&#039;Science,&#039;&#039; &#039;&#039;220&#039;&#039;(4598), 671-680. Retrieved November 25, 2020, from http://www.jstor.org/stable/1690046&amp;lt;/ref&amp;gt; and is based on the analogy of ideal crystals in thermodynamics. The annealing process in metallurgy can make particles arrange themselves in the position with minima potential as the temperature is slowly decreased. The Simulation Annealing algorithm mimics this mechanism and uses the objective function of an optimization problem instead of the energy of a material to arrive at a solution. A general algorithm is as follows&amp;lt;ref&amp;gt;Brief review of static optimization methods, Editor(s): Stanisław Sieniutycz, Jacek Jeżowski, Energy Optimization in Process Systems and Fuel Cells (Third Edition), Elsevier, 2018, Pages 1-41, &amp;lt;nowiki&amp;gt;ISBN 9780081025574&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-08-102557-4.00001-3.&amp;lt;/ref&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
1.    Fix initial temperature (&#039;&#039;T&#039;&#039;&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
2.    Generate starting point &#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; (this is the best point &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; at present)&lt;br /&gt;
&lt;br /&gt;
3.    Generate randomly point &#039;&#039;&#039;&#039;&#039;X&amp;lt;sup&amp;gt;S&amp;lt;/sup&amp;gt;&#039;&#039;&#039;&#039;&#039; (neighboring point)&lt;br /&gt;
&lt;br /&gt;
4.    Accept &#039;&#039;&#039;&#039;&#039;X&amp;lt;sup&amp;gt;S&amp;lt;/sup&amp;gt;&#039;&#039;&#039;&#039;&#039; as &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; (currently best solution) if an acceptance criterion is met. This must be such a condition that the probability of accepting a worse point is greater than zero, particularly at higher temperatures&lt;br /&gt;
&lt;br /&gt;
5.    If an equilibrium condition is satisfied, go to (6), otherwise jump back to (3).&lt;br /&gt;
&lt;br /&gt;
6.    If termination conditions are not met, decrease the temperature according to a certain cooling scheme and jump back to (1). If the termination conditions are satisfied, stop calculations accepting the current best value &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; as the final (‘optimal’) solution.  &lt;br /&gt;
&lt;br /&gt;
== Numerical Example: Knapsack Problem ==&lt;br /&gt;
One of the most common applications of the heuristic algorithm is the Knapsack Problem, in which a given set of items (each with a mass and a value) are grouped to have a maximum value while being under a certain mass limit. It uses the Greedy Approximation Algorithm to sort the items based on their value per unit mass and then includes the items with the highest value per unit mass if there is still space remaining.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Example&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following table specifies the weights and values per unit of five different products held in storage. The quantity of each product is unlimited. A plane with a weight capacity of 13 is to be used, for one trip only, to transport the products. We would like to know how many units of each product should be loaded onto the plane to maximize the value of goods shipped.   &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
Product (i) &lt;br /&gt;
!Weight per unit (w&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
!Value per unit (v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|7&lt;br /&gt;
|9&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|0.5&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Solution:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(a) Stages:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We view each type of product as a stage, so there are 5 stages. We can also add a sixth stage representing the endpoint after deciding&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(b) States:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can view the remaining capacity as states, so there are 14 states in each stage: 0,1, 2, 3, …13&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(c) Possible decisions at each stage:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose we are in state s in stage n (n &amp;lt; 6), hence there are s capacity remaining. Then the possible number of items we can pack is:&lt;br /&gt;
&lt;br /&gt;
j = 0, 1, …[s/w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For each such action j, we can have an arc going from the state s in stage n to the state n – j*w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; in stage n + 1. For each arc in the graph, there is a corresponding benefit j*v&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;. We are trying to find a maximum benefit path from state 13 in stage 1, to stage 6.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(d) Optimization function:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Let f&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;(s) be the value of the maximum benefit possible with items of type n or greater using total capacity at most s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(e) Boundary conditions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The sixth stage should have all zeros, that is, f&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(s) = 0 for each s = 0,1, … 13&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(f) Recurrence relation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
f&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;(s) = max {j*v&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;n+1&amp;lt;/sub&amp;gt;(s – j*w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;)}, j = 0, 1, …, [s/w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(g) Compute:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The solution will not show all the computations steps. Instead, only a few cases are given below to illustrate the idea.&lt;br /&gt;
&lt;br /&gt;
* For stage 5, f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(s) = max&amp;lt;sub&amp;gt;j=0, 1, …[s/1]&amp;lt;/sub&amp;gt; {j*0.5 + 0} = 0.5s because given the all zero states in stage 6, the maximum possible value is to use up all the remaining s capacity.&lt;br /&gt;
* For stage 4, state 7,&lt;br /&gt;
&lt;br /&gt;
f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(7) = max&amp;lt;sub&amp;gt;j=0,1, …, [7/w4]&amp;lt;/sub&amp;gt; = {j*v&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(7 - w&amp;lt;sub&amp;gt;4*&amp;lt;/sub&amp;gt;j)}&lt;br /&gt;
&lt;br /&gt;
= max {0 + 3.5; 2 + 2; 4 + 0.5}&lt;br /&gt;
&lt;br /&gt;
= 4.5&lt;br /&gt;
&lt;br /&gt;
Using the recurrence relation above, we get the following table:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Unused Capacity&lt;br /&gt;
s&lt;br /&gt;
!f&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 1 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 2 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 3 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 4 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 5 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|13.5&lt;br /&gt;
|1&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|9.5&lt;br /&gt;
|3&lt;br /&gt;
|8.5&lt;br /&gt;
|4&lt;br /&gt;
|6.5&lt;br /&gt;
|13&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|9&lt;br /&gt;
|2&lt;br /&gt;
|9&lt;br /&gt;
|3&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|6&lt;br /&gt;
|12&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|12&lt;br /&gt;
|1&lt;br /&gt;
|8.5&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|5.5&lt;br /&gt;
|11&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|11&lt;br /&gt;
|1&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|2&lt;br /&gt;
|6.5&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|10&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|10&lt;br /&gt;
|1&lt;br /&gt;
|7&lt;br /&gt;
|1&lt;br /&gt;
|6.5&lt;br /&gt;
|2&lt;br /&gt;
|6&lt;br /&gt;
|3&lt;br /&gt;
|4.5&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|9.5&lt;br /&gt;
|1&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|4.5&lt;br /&gt;
|2&lt;br /&gt;
|3.5&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|4.5&lt;br /&gt;
|0&lt;br /&gt;
|4.5&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|3.5&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|1&lt;br /&gt;
|2.5&lt;br /&gt;
|5&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|1&lt;br /&gt;
|2.5&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|1.5&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Optimal solution:&#039;&#039;&#039; The maximum benefit possible is 13.5. Tracing forward to get the optimal solution: the optimal decision corresponding to the entry 13.5 for f&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;(1) is 1, therefore we should pack 1 unit of type 1. After that we have 6 capacity remaining, so look at f&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(6) which is 4.5, corresponding to the optimal decision of packing 1 unit of type 2. After this, we have 6-5 = 1 capacity remaining, and f&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;(1) = f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(1) = 0, which means we are not able to pack any type 3 or type 4. Hence we go to stage 5 and find that f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(1) = 1, so we should pack 1 unit of type 5. This gives the entire optimal solution as can be seen in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Optimal solution&lt;br /&gt;
|-&lt;br /&gt;
!Product (i)&lt;br /&gt;
!Number of units&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
Heuristic algorithms have become an important technique in solving current real-world problems. Its applications can range from optimizing the power flow in modern power systems&amp;lt;ref&amp;gt; NIU, M., WAN, C. &amp;amp; Xu, Z. A review on applications of heuristic optimization algorithms for optimal power flow in modern power systems. J. Mod. Power Syst. Clean Energy 2, 289–297 (2014), https://doi.org/10.1007/s40565-014-0089-4&amp;lt;/ref&amp;gt; to groundwater pumping simulation models&amp;lt;ref&amp;gt; J. L. Wang, Y. H. Lin and M. D. Lin, &amp;quot;Application of heuristic algorithms on groundwater pumping source identification problems,&amp;quot; 2015 IEEE International Conference on Industrial Engineering and Engineering Management (IEEM), Singapore, 2015, pp. 858-862, https://doi.org/10.1109/IEEM.2015.7385770.&amp;lt;/ref&amp;gt;. Heuristic optimization techniques are increasingly applied in environmental engineering applications as well such as the design of a multilayer sorptive barrier system for landfill liner.&amp;lt;ref&amp;gt;Matott, L. Shawn, et al. “Application of Heuristic Optimization Techniques and Algorithm Tuning to Multilayered Sorptive Barrier Design.” Environmental Science &amp;amp;amp; Technology, vol. 40, no. 20, 2006, pp. 6354–6360., https://doi.org/10.1021/es052560+.&amp;lt;/ref&amp;gt; Heuristic algorithms have also been applied in the fields of bioinformatics, computational biology, and systems biology.&amp;lt;ref&amp;gt;Larranaga P, Calvo B, Santana R, Bielza C, Galdiano J, Inza I, Lozano JA, Armananzas R, Santafe G, Perez A, Robles V (2006) Machine learning in bioinformatics. Brief Bioinform 7(1):86–112 &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Heuristic algorithms are not a panacea, but they are handy tools to be used when the use of exact methods cannot be implemented. Heuristics can provide flexible techniques to solve hard problems with the advantage of simple implementation and low computational cost. Over the years, we have seen a progression in heuristics with the development of hybrid systems that combine selected features from various types of heuristic algorithms such as tabu search, simulated annealing, and genetic or evolutionary computing. Future research will continue to expand the capabilities of existing heuristics to solve complex real-world problems.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2733</id>
		<title>Column generation algorithms</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2733"/>
		<updated>2020-12-21T11:37:13Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Lorena Garcia Fernandez (lgf572) (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Column Generation techniques have the scope of solving large linear optimization problems by generating only the variables that will have an influence on the objective function. This is important for big problems with many variables where the formulation with these techniques would simplify the problem formulation, since not all the possibilities need to be explicitly listed.&amp;lt;ref&amp;gt;Desrosiers, Jacques &amp;amp; Lübbecke, Marco. (2006). A Primer in Column Generation.p7-p14 10.1007/0-387-25486-2_1. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory, methodology and algorithmic discussions ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Theory&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The way this method work is as follows; first, the original problem that is being solved needs to be split into two problems: the master problem and the sub-problem.&lt;br /&gt;
&lt;br /&gt;
* The master problem is the original column-wise (i.e: one column at a time) formulation of the problem with only a subset of variables being considered.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The sub-problem is a new problem created to identify a new promising variable. The objective function of the sub-problem is the reduced cost of the new variable with respect to the current dual variables, and the constraints require that the variable obeys the naturally occurring constraints. The subproblem is also referred to as the RMP or “restricted master problem”. From this we can infer that this method will be a good fit for problems whose constraint set admit a natural breakdown (i.e: decomposition) into sub-systems representing a well understood combinatorial structure.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To execute that decomposition from the original problem into Master and subproblems there are different techniques. The theory behind this method relies on the Dantzig-Wolfe decomposition.&amp;lt;ref&amp;gt;Dantzig-Wolfe decomposition. Encyclopedia of Mathematics. URL: http://encyclopediaofmath.org/index.php?title=Dantzig-Wolfe_decomposition&amp;amp;oldid=50750&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, when the master problem is solved, we are able to obtain dual prices for each of the constraints in the master problem. This information is then utilized in the objective function of the subproblem. The subproblem is solved. If the objective value of the subproblem is negative, a variable with negative reduced cost has been identified. This variable is then added to the master problem, and the master problem is re-solved. Re-solving the master problem will generate a new set of dual values, and the process is repeated until no negative reduced cost variables are identified. The subproblem returns a solution with non-negative reduced cost, we can conclude that the solution to the master problem is optimal.&amp;lt;ref&amp;gt;Wikipedia, the free encyclopeda. Column Generation. URL: https://en.wikipedia.org/wiki/Column_generation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Methodology&#039;&#039;&#039;&#039;&#039;&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:Column Generation.png|thumb|468x468px|Column generation schematics&amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;GERARD. (2005). Personnel and Vehicle scheduling, Column Generation, slide 12. URL: https://slideplayer.com/slide/6574/&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Consider the problem in the form:&lt;br /&gt;
&lt;br /&gt;
(IP)    &lt;br /&gt;
&amp;lt;math&amp;gt;z=max\left \{\sum_{k=1}^{K}c^{k}x^{k}:\sum_{k=1}^{K}A^{k}x^{k}=b,x^{k}\epsilon X^{k}\; \; \; for\; \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;X^{k}=\left \{x^{k}\epsilon Z_{+}^{n_{k}}: D^{k}x^{k}\leq d^{_{k}}   \right \}&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt;. Assuming that each set &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; contains a large but finite set of points &amp;lt;math&amp;gt;\left \{ x^{k,t} \right \}_{t=1}^{T_{k}}&amp;lt;/math&amp;gt;, we have that &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\left \{ x^{k}\epsilon R^{n_{k}}:x^{k}=\sum_{t=1}^{T_{k}}\lambda _{k,t}x^{k,t},\sum_{t=1}^{T_{k}}\lambda _{k,t}=1,\lambda _{k,t}\epsilon \left \{ 0,1 \right \}for \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that, on the assumption that each of the sets &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt; is bounded for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the approach will involve solving an equivalent problem of the form as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;max\left \{ \sum_{k=1}^{K}\gamma ^{k}\lambda ^{k}: \sum_{k=1}^{K}B^{k}\lambda ^{k}=\beta ,\lambda ^{k}\geq 0\; \; integer\; \; for\; \; k=1,...,K \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where each matrix &amp;lt;math&amp;gt;B^{k}&amp;lt;/math&amp;gt; has a very large number of columns, one for each of the feasible points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt;, and each vector &amp;lt;math&amp;gt;\lambda ^{k}&amp;lt;/math&amp;gt; contains the corresponding variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, substituting for &amp;lt;math&amp;gt;x^{k}=&amp;lt;/math&amp;gt; leads to an equivalent &#039;&#039;IP Master Problem (IPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(IPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left(c^{k}x^{k,t}\right )\lambda _{k,t} \\      \sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b\\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \; for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t}\epsilon \left \{ 0,1 \right \}\; \; for\; \; t=1,...,T_{k}\; \; and\; \; k=1,...,K.&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To solve the Master Linear Program, we use a column generation algorithm. This is in order to solve the linear programming relaxation of the Integer Programming Master Problem, called the &#039;&#039;Linear Programming Master Problem (LPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(LPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( c^{k}x^{k,t} \right )\lambda _{k,t}\\&lt;br /&gt;
\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b \\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \;for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t} \geq 0\; \; for\; \; t=1,...,T_{k},\; k=1,...,K&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where there is a column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; for each &#039;&#039;&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;X^{k}&amp;lt;/math&amp;gt;&#039;&#039;. On the next steps of this method, we will use &amp;lt;math&amp;gt;\left \{ \pi _{i} \right \}_{i=1}^{m}&amp;lt;/math&amp;gt; as the dual variables associated with the joint constraints, and &amp;lt;math&amp;gt;\left \{ \mu_{k} \right \}_{k=1}^{K}&amp;lt;/math&amp;gt; as dual variables for the second set of constraints.The latter are also known as convexity constraints.&lt;br /&gt;
The idea is to solve the linear program by the primal simplex algorithm. However, the pricing step of choosing a column to enter the basis must be modified because of the very big number of columns in play. Instead of pricing the columns one at a time, the question of finding a column with the biggest reduced price is itself a set of &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; optimization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Initialization:&#039;&#039; we suppose that a subset of columns (at least one for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;) is available, providing a feasible &#039;&#039;Restricted Linear Programming Master Problem&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(RLPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\tilde{c}\tilde{\lambda} \\&lt;br /&gt;
\tilde{A}\tilde{\lambda }=b \\&lt;br /&gt;
\tilde{\lambda }\geq 0 &lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\tilde{b}=\begin{pmatrix}&lt;br /&gt;
b\\ &lt;br /&gt;
1\\ &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tilde{A}&amp;lt;/math&amp;gt; is generated by the available set of columns and &amp;lt;math&amp;gt;\tilde{c}\tilde{\lambda }&amp;lt;/math&amp;gt; are the corresponding costs and variables. Solving the RLPM gives an optimal primal solution &amp;lt;math&amp;gt;\tilde{\lambda ^{*}}&amp;lt;/math&amp;gt; and an optimal dual solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )\epsilon\;  R^{m}\times R^{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Primal feasibility:&#039;&#039; Any feasible solution of &#039;&#039;RLMP&#039;&#039; is feasible for &#039;&#039;LPM&#039;&#039;. More precisely, &amp;lt;math&amp;gt;\tilde{\lambda^{*} }&amp;lt;/math&amp;gt; is a feasible solution of &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;\tilde{z}^{LPM}=\tilde{c}\tilde{\lambda ^{*}}=\sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}\leq z^{LPM}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Optimality check for LPM:&#039;&#039; It is required to check whether &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt;  is dual feasible for &#039;&#039;LPM&#039;&#039;. This means checking for each column, that is for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, and for each &amp;lt;math&amp;gt;x\; \epsilon \; X^{k}&amp;lt;/math&amp;gt; if the reduced price &amp;lt;math&amp;gt;c^{k}x-\pi A^{k}x-\mu _{k}\leq 0&amp;lt;/math&amp;gt;. Rather than examining each point separately, we treat all points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; implicitly, by solving an optimization subproblem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta _{k}=max\left \{ \left (c^{k}-\pi A^{k}  \right )x-\mu _{k}\; :\; x\; \epsilon \; X^{k}\right \}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Stopping criteria:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt; is dual feasible for &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;z^{LPM}\leq \sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}&amp;lt;/math&amp;gt;. As the value of the primal feasible solution &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; equals that of this upper bound, &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; is optimal for &#039;&#039;LPM&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Generating a new column:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for some &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, the column corresponding to the optimal solution &amp;lt;math&amp;gt;\tilde{x}^{k}&amp;lt;/math&amp;gt; of the subproblem has a positive reduced price. Introducing the column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; leads then to a Restricted Linear Programming Master Problem that can be easily reoptimized (e.g., by the primal simplex algorithm)&lt;br /&gt;
&lt;br /&gt;
== Numerical example: The Cutting Stock problem&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998The Cutting Stock problem&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Suppose we want to solve a numerical example of the cutting stock problem, specifically a one-dimensional cutting stock problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Problem Overview&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A company produces steel bars with diameter &amp;lt;math&amp;gt;45&amp;lt;/math&amp;gt; millimeters and length &amp;lt;math&amp;gt;33&amp;lt;/math&amp;gt; meters. The company also takes care of cutting the bars for their different customers, who each require different lengths. At the moment, the following demand forecast is expected and must be satisfied: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|Pieces  needed&lt;br /&gt;
|Piece length(m)&lt;br /&gt;
|Type of item&lt;br /&gt;
|-&lt;br /&gt;
|144&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|105&lt;br /&gt;
|13.5&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|72&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|16.5&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|22.5&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
The objective is to establish what is the minimum number of steel bars that should be used to satisfy the total demand.&lt;br /&gt;
&lt;br /&gt;
A possible model for the problem, proposed by Gilmore and Gomory in the 1960ies is the one below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;K=\left \{ 1,2,3,4,5 \right \}&amp;lt;/math&amp;gt;: set of item types;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;:&#039;&#039; set of patterns (i.e., possible ways) that can be adopted to cut a given bar into portions of the need lengths.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;M&amp;lt;/math&amp;gt;: bar length (before the cutting process);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;L_k&amp;lt;/math&amp;gt;&#039;&#039;:&#039;&#039; length of item &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;R_s&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; required;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; in pattern  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;Y_s&amp;lt;/math&amp;gt; : number of bars that should be portioned using pattern &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min(y)\sum_{s=1}^Sy_s  \\        \       s.t. \sum_kN_{ks}y_s\geq J_k    \forall     k\in K \\ y_s\in \Zeta_+\forall s\in S \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Solving the problem&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The model assumes the availability of the set &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; and the parameters &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; . To generate this data, you would have to list all possible cutting patterns. However, the number of possible cutting patterns is a big number. This is why a direct implementation of the model above is not practical in real-world problems. In this case is when it makes sense to solve the continuous relaxation of the above model. This is because, in reality, the demand figures are so high that the number of bars to cut is also a large number, and therefore a good solution can be determined by rounding up to the next integer each variable &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;found by solving the continuous relaxation. In addition to that, the solution of the relaxed problem will become the starting point for the application of an exact solution method (for instance, the Branch-and Bound).&amp;lt;blockquote&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;Key take-away: In the next steps of this example we will analyze how to solve the continuous relaxation of the model.&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;/blockquote&amp;gt;As a starting point, we need any feasible solution. Such a solution can be constructed as follows:&lt;br /&gt;
&lt;br /&gt;
# We consider any single-item cutting patterns, i.e., &amp;lt;math&amp;gt;\|K\|&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; configurations, each containing  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle N_{k,s} } = \llcorner \frac{W}{L_k}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;;&lt;br /&gt;
# Set &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle y_{k}} = \llcorner \frac{R_s}{N_{k,s}}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; (where pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; is the pattern containing only pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
This solution could also be arrived to by applying the simplex method to the model (without integrality constraints), considering only the decision variables that correspond to the above single-item patterns: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} \ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, if we solve this problem (for example, use CPLEX solver in GAMS) the solution is as below:  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Y1&lt;br /&gt;
|28.8&lt;br /&gt;
|-&lt;br /&gt;
|Y2&lt;br /&gt;
|52.5&lt;br /&gt;
|-&lt;br /&gt;
|Y3&lt;br /&gt;
|24&lt;br /&gt;
|-&lt;br /&gt;
|Y4&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Y5&lt;br /&gt;
|24&lt;br /&gt;
|}&lt;br /&gt;
Next, a new possible pattern (number &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;) will be considered. This pattern contains only one piece of item type number &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. So the question is if the new solution would remain optimal if this new pattern was allowed. Duality helps answer ths question. At every iteration of the simplex method, the outcome is a feasible basic solution (corresponding to some basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;) for the primal problem and a dual solution (the multipliers &amp;lt;math&amp;gt;u^{t}=c^{t}BB^{-1}&amp;lt;/math&amp;gt;) that satisfy the complementary slackness conditions. (Note: the dual solution will be feasible only when the last iteration is reached) &lt;br /&gt;
&lt;br /&gt;
The inclusion of new pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; corresponds to including a new variable in the primal problem, with objective cost &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; (as each time pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; is chosen, one bar is cut) and corresponding to the following column in the constraint matrix: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D_6= \begin{bmatrix}&lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
These variables create a new dual constraint. We then have to check if this new constraint is violated by the current dual solution  (or in other words, &#039;&#039;if the reduced cost of the new variable with respect to basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; is negative)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The new dual constraint is:&amp;lt;math&amp;gt;1\times u_{1}+0\times u_{2}+0\times u_{3}+0\times u_{4}+1\times u_{5}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution for the dual problem can be computed in different software packages, or by hand. The example below shows the solution obtained with GAMS for this example:&lt;br /&gt;
&lt;br /&gt;
(Note the solution for the dual problem would be: &amp;lt;math&amp;gt;u=c_{T}^{B}B^{-1}&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dual  variable&lt;br /&gt;
|Variable value&lt;br /&gt;
|-&lt;br /&gt;
|D1&lt;br /&gt;
|0.067&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|0.333&lt;br /&gt;
|}&lt;br /&gt;
Since &amp;lt;math&amp;gt;0.2+1=1.2&amp;gt; 1&amp;lt;/math&amp;gt;, the new constraint is violated.&lt;br /&gt;
&lt;br /&gt;
This means that the current primal solution (in which the new variable is &amp;lt;math&amp;gt;y_{6}=0&amp;lt;/math&amp;gt;) may not be optimal anymore (although it is still feasible). The fact that the dual constraint is violated means the associated primal variable has negative reduced cost: &lt;br /&gt;
&lt;br /&gt;
the norm of &amp;lt;math&amp;gt;c_6 = c_6-u^TD_6=1-0.4=0.6&amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
To help us solve the problem, the next step is to let &amp;lt;math&amp;gt;y_{6}&amp;lt;/math&amp;gt; enter the basis. To do so, we modify the problem by inserting the new variable as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}+y_{6}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} +y_{6}\ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5}+y_{6} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5},y_{6} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this problem is solved with the simplex method, the optimal solution is found, but restricted only to patterns &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;. If a new pattern is available, a decision should be made whether this new pattern should be used or not by proceeding as above. However, the problem is how to find a pattern (i.e., a variable; i.e, a column of the matrix) whose reduced cost is negative (i.e., which will mean it is convenient to include it in the formulation). At this point one can notice that number of possible patterns exponentially large,and all the patterns are not even known explicitly. The question then is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Given a basic optimal solution for the problem in which only some variables are included, how can we find (if any exists) a variable with negative reduced cost (i.e., a constraint violated by the current dual solution)?&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This question can be transformed into an optimization problem: in order to see whether a variable with negative reduced cost exists, we can look for the minimum of the reduced costs of all possible variables and check whether this minimum is negative:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{c}=1-u^Tz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because every column of the constraint matrix corresponds to a cutting pattern, and every entry of the column says how many pieces of a certain type are in that pattern. In order for &amp;lt;math&amp;gt;z&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; to be a possible column of the constraint matrix, the following condition must be satisfied:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\begin{matrix}z_k\in \Zeta_+\forall k\in K  \\        \       \sum_kL_kz_k \leq M  \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And by so doing, it enables the conversion of the problem of finding a variable with negative reduced cost into the integer linear programming problem below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min\   \bar{c} = 1 - sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which, in turn, would be equivalent to the below formulation (we just write the objective in maximization form and ignore the additive constant &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix} \max\sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The coefficients &amp;lt;math&amp;gt;z_k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; of a column with negative reduced cost can be found by solving the above integer [[wikipedia:Knapsack_problem|&amp;quot;knapsack&amp;quot;]] problem (which is a traditional type of problem that we find in integer programming).&lt;br /&gt;
&lt;br /&gt;
In our example, if we start from the problem restricted to the five single-item patterns, the above problem reads as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  0.067z_{1}+0.167z_{2}+0.167z_{3}+0.167z_{4}+z_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 6z_{1} +13.5z_{2}+15z_{3}+16.5z_{4}+22.5z_{5}\le 33\\&lt;br /&gt;
\ &amp;amp; ~~ z_{1},z_{2},z_{3},z_{4},z_{5}\ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
which has the following optimal solution:    &amp;lt;math&amp;gt;z^T= [1 \quad 0\quad 0\quad 0\quad 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matches the pattern we called &amp;lt;math&amp;gt;D6&amp;lt;/math&amp;gt;, earlier on in this page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Optimality test&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If :  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then &amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt; is an optimal solution of the full continuous relaxed problem (that is, including all patterns in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
If this condition is not true, we go ahead and update the master problem by including in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S^&#039;&amp;lt;/math&amp;gt;&#039;&#039; the pattern &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; defined by &amp;lt;math&amp;gt;N_{s,\lambda}&amp;lt;/math&amp;gt; (in practical terms this means that the column &#039;&#039;&#039;&amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt;&#039;&#039;&#039; needs to be included in the constraint matrix)&lt;br /&gt;
&lt;br /&gt;
For this example we find that the optimality test is met as &amp;lt;math&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}=0.4 \leq 1&amp;lt;/math&amp;gt; so we have have found an optimal solution of the relaxed continuous problem (if this was not the case we would have had to go back to reformulating and solving the master problem, as discussed in the methodology section of this page) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Algorithm discussion&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The column generation subproblem is the critical part of the method is generating the new columns. It is not reasonable to compute the reduced costs of all variables &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;s=1,...,S&amp;lt;/math&amp;gt;, otherwise this procedure would reduce to the simplex method. In fact, n&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; can be very large (as in the cutting-stock problem) or, for some reason, it might not be possible or convenient to enumerate all decision variables. This is when it would be necessary to study a specific column generation algorithm for each problem; &#039;&#039;only if such an algorithm exists (and is practical)&#039;&#039;, the method can be fully applied. In the one-dimensional cutting stock problem, we transformed the column generation subproblem into an easily solvable integer linear programming problem. In other cases, the computational effort required to solve the subproblem is too high, such that appying this full procedure becomes unefficient.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
As previously mentioned, column generation techniques are most relevant when the problem that we are trying to solve has a high ratio of number of variables with respect to the number of constraints. As such some common applications are:&lt;br /&gt;
&lt;br /&gt;
* Bandwith packing&lt;br /&gt;
* Bus driver scheduling&lt;br /&gt;
* Generally, column generation algorithms are used for large delivery networks, often in combination with other methods, helping to implement real-time solutions for on-demand logistics. We discuss a supply chain scheduling application below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bandwidth packing&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The objective of this problem is to allocate bandwidth in a telecommunications network to maximize total revenue. The routing of a set of traffic demands between different users is to be decided, taking into account the capacity of the network arcs and the fact that the traffic between each pair of users cannot be split The problem can be formulated as an integer programming problem and the linear programming relaxation solved using column generation and the simplex algorithm. A branch and bound procedure which branches upon a particular path is used in this particular paper&amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt;Parker, Mark &amp;amp; Ryan, Jennifer. (1993). A column generation algorithm for bandwidth packing. Telecommunication Systems. 2. 185-195. 10.1007/BF02109857. &amp;lt;/ref&amp;gt; that looks into bandwidth routing, to solve the IP. The column generation algorithm greatly reduces the complexity of this problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bus driver scheduling&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bus driver scheduling aims to find the minimum number of bus drivers to cover a published timetable of a bus company. When scheduling bus drivers, contractual working rules must be enforced, thus complicating the problem. A column generation algorithm can decompose this complicated problem into a master problem and a series of pricing subproblems. The master problem would select optimal duties from a set of known feasible duties, and the pricing subproblem would augment the feasible duty set to improve the solution obtained in the master problem.&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Dung‐Ying Lin, Ching‐Lan Hsu. Journal of Advanced Transportation. Volume50, Issue8, December 2016, Pages 1598-1615. URL: https://onlinelibrary.wiley.com/doi/abs/10.1002/atr.1417&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Supply Chain scheduling problem&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A typical application is where we consider the problem of scheduling a set of shipments between different nodes of a supply chain network. Each shipment has a fixed departure time, as well as an origin and a destination node, which, combined, determine the duration of the associated trip. The aim is to schedule as many shipments as possible, while also minimizing the number of vehicles utilized for this purpose. This problem can be formulated by an integer programming model and an associated branch and price solution algorithm. The optimal solution to the LP relaxation of the problem can be obtained through column generation, solving the linear program a huge number of variables, without explicitly considering all of them. In the context of this application, the master problem schedules the maximum possible number of shipments using only a small set of vehicle-routes, and a column generation (colgen) sub-problem would generate cost-effective vehicle-routes to be fed fed into the master problem. After finding the optimal solution to the LP relaxation of the problem, the algorithm would branch on the fractional decision variables (vehicle-routes), in order to reach the optimal integer solution.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Kozanidis, George. (2014). Column generation for scheduling shipments within a supply chain network with the minimum number of vehicles. OPT-i 2014 - 1st International Conference on Engineering and Applied Sciences Optimization, Proceedings. 888-898&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
Column generation is a way of starting with a small, manageable part of a problem (specifically, with some of the variables), solving that part, analyzing that interim solution to find the next part of the problem (specifically, one or more variables) to add to the model, and then solving the full or extended model. In the column generation method, the algorithm steps are repeated until an optimal solution to the entire problem is achieved.&amp;lt;ref&amp;gt;	ILOG CPLEX 11.0 User&#039;s Manual &amp;gt; Discrete Optimization &amp;gt; Using Column Generation: a Cutting Stock Example &amp;gt; What Is Column Generation? 1997-2007. URL:http://www-eio.upc.es/lceio/manuals/cplex-11/html/usrcplex/usingColumnGen2.html#:~:text=In%20formal%20terms%2C%20column%20generation,method%20of%20solving%20the%20problem.&amp;amp;text=By%201960%2C%20Dantzig%20and%20Wolfe,problems%20with%20a%20decomposable%20structure&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This algorithm provides a way of solving a linear programming problem adding columns (corresponding to constrained variables) during the pricing phase of the problem solving phase, that would otherwise be very tedious to formulate and compute. Generating a column in the primal formulation of a linear programming problem corresponds to adding a constraint in its dual formulation.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Newsvendor_problem&amp;diff=2732</id>
		<title>Newsvendor problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Newsvendor_problem&amp;diff=2732"/>
		<updated>2020-12-21T11:36:48Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Morgan McCormick (mm3237), Brittany Yesner (by286), Daniel Aronson (da523), John Bednarek (jwb389) (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The mathematical application for the Newsvendor Problem dates back to 1888, when Francis Ysidro Edgeworth used the central limit theorem to find the optimal cash reserves needed to satisfy various withdrawals from depositors.&amp;lt;ref&amp;gt;F. Y. Edgeworth (1888). &amp;quot;The Mathematical Theory of Banking&amp;quot;. Journal of the Royal Statistical Society.&amp;lt;/ref&amp;gt; The namesake for the problem comes from Morse and Kimball&#039;s book from 1951, where they used the term “newsboy” to describe this specific problem.&amp;lt;ref&amp;gt;R. R. Chen; T.C.E. Cheng; T.M. Choi; Y. Wang (2016). &amp;quot;Novel Advances in Applications of the Newsvendor Model&amp;quot;. Decision Sciences.&amp;lt;/ref&amp;gt; Also referred to as “newsboy problem”, it is named by analogy with the situation faced by a newspaper vendor who must decide how many copies of the day&#039;s paper to stock in the face of uncertain demand and knowing that unsold copies will be worthless at the end of the day.  &lt;br /&gt;
&lt;br /&gt;
T.M Whitin in 1955 was the first to consider not only the cost minimization portion of the problem, but also the profit maximization.&amp;lt;ref&amp;gt;Whitin, T. M. “Inventory Control and Price Theory.” Management Science, vol. 2, no. 1, 1955, pp. 61–68.&amp;lt;/ref&amp;gt; To do so he formulated a newsvendor model with price effects, where the selling price and stocking quantity are set simultaneously. He then adapted his model to include a probability distribution for demand as a function of the selling price, therefore making the price of the product a decision variable rather than an assigned variable. &lt;br /&gt;
&lt;br /&gt;
In general, this model can be used in any application with a perishable good and unknown, randomized demand. &lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
The newsvendor model is a model used to determine the optimal inventory levels in operations management and applied economic applications. The assumptions for this problem usually include fixed prices and uncertain demands for perishable products with limited availability. In this model, any unit of demand, &#039;&#039;R&#039;&#039;,  over the current inventory level, x, is identified as a lost sale.&lt;br /&gt;
&lt;br /&gt;
== Formulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
To formulate a standard newsvendor problem to determine profit, the function is &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;E[profit] = E[s * min(x, R)] - wx &amp;lt;/math&amp;gt; . In the formulation, &#039;&#039;s&#039;&#039; represents the price a unit is sold for, x represents the number of units in inventory that the vendor ordered, &#039;&#039;R&#039;&#039; is a random variable representing a probability distribution for the demand a given day, and &#039;&#039;w&#039;&#039; is the wholesale cost for the vendor to purchase materials. The goal is to optimize the profit to be a maximum. This is achieved by maximizing the amount of inventory on hand to be able to sell while also minimizing the amount of unsold inventory that is void or considered perishable at the end of the day. The salvage cost for any unsold inventory at the end of the sales period is represented by &#039;&#039;v.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The balance of being understocked and losing potential sales with the potential loss from being overstocked can be represented by the critical fractal.  This is illustrated by the formula &amp;lt;math&amp;gt;n=F^{-1} ({s-w \over s})&amp;lt;/math&amp;gt; where &#039;&#039;F&amp;lt;sup&amp;gt;-1&amp;lt;/sup&amp;gt;&#039;&#039; is the inverse of the cumulative distribution function of R.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;&amp;quot;Newsvendor Model.” Wikipedia, Wikimedia Foundation, 12 Nov. 2020, en.wikipedia.org/wiki/Newsvendor_model.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&amp;lt;sup&amp;gt;,&amp;lt;/sup&amp;gt;&amp;lt;ref&amp;gt;Yan Qin, Ruoxuan Wang, Asoo J. Vakharia, Yuwen Chen, Michelle M.H. Seref, “The newsvendor problem: Review and directions for future research.” European Journal of Operational Research. Volume 213, Issue 2. 2011. Pages 361-374, ISSN 0377-2217. &amp;lt;nowiki&amp;gt;https://doi.org/10.1016/j.ejor.2010.11.024&amp;lt;/nowiki&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailed Solution Steps ===&lt;br /&gt;
In formulation, a newsboy could purchase a given number of newspapers x one morning for a given wholesale bulk cost, &#039;&#039;b&#039;&#039;. The selling price and salvage values are known constants &#039;&#039;s&#039;&#039; and &#039;&#039;v,&#039;&#039; respectively, and the demand is given by &#039;&#039;D&#039;&#039;. The overage cost is c&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; for the cost of ordering one unit too many. The cost of ordering one unit too few is the cost of underage, c&amp;lt;sup&amp;gt;u&amp;lt;/sup&amp;gt;.   &lt;br /&gt;
&lt;br /&gt;
The activity variables are &#039;&#039;D(ω)&#039;&#039;, the realization of random demand which is assumed to be continuous; &#039;&#039;p(ω)&#039;&#039;, the probability of outcome ω; &#039;&#039;S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;(ω)&#039;&#039;, the overage which is equal to &amp;lt;math&amp;gt;[x - D(\omega)]^+&amp;lt;/math&amp;gt;; and the underage &#039;&#039;S&amp;lt;sup&amp;gt;u&amp;lt;/sup&amp;gt;(ω)&#039;&#039; which is equal to &amp;lt;math&amp;gt;[D(\omega)-x]^+&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
To calculate the &#039;&#039;&#039;wholesale cost per newspaper&#039;&#039;&#039;, &#039;&#039;w,&#039;&#039; the formula &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;w = b/x&amp;lt;/math&amp;gt; is used.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;marginal profit&#039;&#039;&#039;, or net profit for the newsvendor per unit, &#039;&#039;m&#039;&#039; is found by the formula &amp;lt;math&amp;gt;m = s - w&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;marginal loss&#039;&#039;&#039;, or loss for each unsold unit, &#039;&#039;l&#039;&#039; is found using the formula &amp;lt;math&amp;gt;l = w - v&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;profit&#039;&#039;&#039;, &#039;&#039;P&#039;&#039;, is calculated by &amp;lt;math&amp;gt;P = m * x&amp;lt;/math&amp;gt; if every item in inventory was sold. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;expected profit&#039;&#039;&#039;, &#039;&#039;E&#039;&#039;, taking into account a given demand probability is calculated by &amp;lt;math&amp;gt;E = x * D * m&amp;lt;/math&amp;gt; if every item in inventory is sold.  &lt;br /&gt;
&lt;br /&gt;
The objective function can be represented as &amp;lt;math&amp;gt;F(x,\omega)=c^o S^o (x,\omega) + c^u S^u (x,\omega)&lt;br /&gt;
= c^o [x-d(\omega)]^+ + c^u [D(\omega)-x]^+ &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;F(x) = E[F(x,\omega)]&lt;br /&gt;
= \int (c^o [x-D(\omega)]^+ + c^u [D(\omega) - x]^+ ) p(\omega)d\omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the goal is to solve for &amp;lt;math&amp;gt;min_x F(x) = E [F(x,\omega)]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
A historically relevant example of the newsvendor problem would be the working conditions that led to the newsboy strike of 1899 and subsequent labor movements. &lt;br /&gt;
&lt;br /&gt;
In the late nineteenth century and before the Spanish-American War, newsboys in New York City could purchase 100 newspapers for 50 cents and sell the newspapers for 8 cents each. If a paper didn’t sell, assume the publisher would buy the newspaper back at 60% cost.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;“Labor History Lesson: The ‘Newsies’ Strike.” Labor History Lesson: The &amp;quot;Newsies&amp;quot; Strike | AFT Connecticut, 25 May 2016, aftct.org/story/labor-history-lesson-newsies-strike&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Assume the newspaper sales in New York City followed the following demand schedule: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 1: Demand in New York City&lt;br /&gt;
!Quantity&lt;br /&gt;
!Probability of Demand&lt;br /&gt;
|-&lt;br /&gt;
|700&lt;br /&gt;
|0.450&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|0.300&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|0.220&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|0.015&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|0.010&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;&#039;wholesale cost price&#039;&#039;&#039; of the newspapers is $0.05/100 = $0.005 per newspaper.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;selling price&#039;&#039;&#039; of the newspapers is $0.08 per newspaper. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;salvage value&#039;&#039;&#039; of the newspapers is $0.003 per newspaper.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;marginal profit&#039;&#039;&#039; is equal to $0.08 - $0.005 = $0.075 per additional newspaper sold.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;marginal loss&#039;&#039;&#039; is equal to $0.005 - $0.003 = $0.002 per unsold newspaper.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c^o = $0.005 - $0.005(0.6) = $0.002&amp;lt;/math&amp;gt; per unit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c^u = $0.08&amp;lt;/math&amp;gt; per unit&lt;br /&gt;
&lt;br /&gt;
x = purchase quantity, where &amp;lt;math&amp;gt;x \in (700, 800, 900, 1000, 1100)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S^o (\omega) = x - \omega, x &amp;gt; \omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S^u (\omega) = \omega - x, x&amp;lt; \omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S^o (\omega) = S^u (\omega), x = \omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x,\omega) = loss function&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x,\omega) = c^o S^o (x, \omega) + c^u s^u (x, \omega)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x,\omega) = c^o (x-\omega) + c^u (\omega -x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x,\omega) = (0.002)(x- \omega)+(0.008)(\omega-x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R(x,\omega) = 0.08\omega - F(x,\omega)&amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 2: Tabulated Values&lt;br /&gt;
!Purchase Quantity (x)&lt;br /&gt;
!Units Sold (ω)&lt;br /&gt;
!Loss (F(x, ω))&lt;br /&gt;
!Probability of Demand (p(ω))&lt;br /&gt;
!Profit (ω*0.08)&lt;br /&gt;
!Revenue (Profit - Loss)&lt;br /&gt;
!Probability of Revenue&lt;br /&gt;
!Expected Revenue for Purchasing x&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |700&lt;br /&gt;
|700&lt;br /&gt;
|0&lt;br /&gt;
|0.45&lt;br /&gt;
|56&lt;br /&gt;
|56&lt;br /&gt;
|25.2&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |55.75&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|8&lt;br /&gt;
|0.3&lt;br /&gt;
|64&lt;br /&gt;
|56&lt;br /&gt;
|16.8&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|16&lt;br /&gt;
|0.22&lt;br /&gt;
|72&lt;br /&gt;
|56&lt;br /&gt;
|12.32&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|24&lt;br /&gt;
|0.015&lt;br /&gt;
|80&lt;br /&gt;
|56&lt;br /&gt;
|0.84&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|32&lt;br /&gt;
|0.01&lt;br /&gt;
|88&lt;br /&gt;
|56&lt;br /&gt;
|0.56&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |800&lt;br /&gt;
|700&lt;br /&gt;
|0.2&lt;br /&gt;
|0.45&lt;br /&gt;
|56&lt;br /&gt;
|55.8&lt;br /&gt;
|25.11&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |59.99&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|0&lt;br /&gt;
|0.3&lt;br /&gt;
|64&lt;br /&gt;
|64&lt;br /&gt;
|19.2&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|8&lt;br /&gt;
|0.22&lt;br /&gt;
|72&lt;br /&gt;
|64&lt;br /&gt;
|14.08&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|16&lt;br /&gt;
|0.015&lt;br /&gt;
|80&lt;br /&gt;
|64&lt;br /&gt;
|0.96&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|24&lt;br /&gt;
|0.01&lt;br /&gt;
|88&lt;br /&gt;
|64&lt;br /&gt;
|0.64&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |900&lt;br /&gt;
|700&lt;br /&gt;
|0.4&lt;br /&gt;
|0.45&lt;br /&gt;
|56&lt;br /&gt;
|55.6&lt;br /&gt;
|25.02&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |61.08&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|0.2&lt;br /&gt;
|0.3&lt;br /&gt;
|64&lt;br /&gt;
|63.8&lt;br /&gt;
|19.14&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|0&lt;br /&gt;
|0.22&lt;br /&gt;
|72&lt;br /&gt;
|72&lt;br /&gt;
|15.84&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|8&lt;br /&gt;
|0.015&lt;br /&gt;
|80&lt;br /&gt;
|72&lt;br /&gt;
|1.08&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|88&lt;br /&gt;
|0.01&lt;br /&gt;
|88&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |1000&lt;br /&gt;
|700&lt;br /&gt;
|0.6&lt;br /&gt;
|0.45&lt;br /&gt;
|56&lt;br /&gt;
|55.4&lt;br /&gt;
|24.93&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |61.806&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|0.4&lt;br /&gt;
|0.3&lt;br /&gt;
|64&lt;br /&gt;
|63.6&lt;br /&gt;
|19.08&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|0.2&lt;br /&gt;
|0.22&lt;br /&gt;
|72&lt;br /&gt;
|71.8&lt;br /&gt;
|15.796&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|0.015&lt;br /&gt;
|80&lt;br /&gt;
|80&lt;br /&gt;
|1.2&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|8&lt;br /&gt;
|0.01&lt;br /&gt;
|88&lt;br /&gt;
|80&lt;br /&gt;
|0.8&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |1100&lt;br /&gt;
|700&lt;br /&gt;
|0.8&lt;br /&gt;
|0.45&lt;br /&gt;
|56&lt;br /&gt;
|55.2&lt;br /&gt;
|24.84&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |61.689&lt;br /&gt;
|-&lt;br /&gt;
|800&lt;br /&gt;
|0.6&lt;br /&gt;
|0.3&lt;br /&gt;
|64&lt;br /&gt;
|63.4&lt;br /&gt;
|19.02&lt;br /&gt;
|-&lt;br /&gt;
|900&lt;br /&gt;
|0.4&lt;br /&gt;
|0.22&lt;br /&gt;
|72&lt;br /&gt;
|71.6&lt;br /&gt;
|15.752&lt;br /&gt;
|-&lt;br /&gt;
|1000&lt;br /&gt;
|0.2&lt;br /&gt;
|0.015&lt;br /&gt;
|80&lt;br /&gt;
|79.8&lt;br /&gt;
|1.197&lt;br /&gt;
|-&lt;br /&gt;
|1100&lt;br /&gt;
|0&lt;br /&gt;
|0.01&lt;br /&gt;
|88&lt;br /&gt;
|88&lt;br /&gt;
|0.88&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The optimal quantity to purchase is 1000 in order to minimize expected loss and maximize expected revenue.&lt;br /&gt;
&lt;br /&gt;
== Demand Distributions ==&lt;br /&gt;
The newsvendor problem can be solved in a multitude of ways, the one uncertainty that always exists is the number of papers needed to fully maximize the profits. This can be estimated by a variety of ways, but most commonly there are uniform, normal, or lognormal distributions.&lt;br /&gt;
&lt;br /&gt;
The uniform distribution estimates the probability to not change. In the case of the newspaper problem this would mean that the demand for a newspaper does not vary from day to day. This method can pose issues as the demand for papers can vary from days like Monday or Tuesday, to days like Sunday which historically have been a day recognized as always having a paper.&lt;br /&gt;
&lt;br /&gt;
The next method that can be used to estimate the demand of a paper can be done using a normal distribution. A normal distribution’s standard deviation positions the curve of demand into being one that can be used to calculate the different demands that a salesman may face amongst the sales of a paper. The normal distribution allocates variations that enable the salesman to take calculated risks based on historical norms. These norms provide contextual evidence to accurately account for the demand that the seller may see.&lt;br /&gt;
&lt;br /&gt;
While a normal distribution can provide estimates into how many papers may need to be printed for the public, it does not take into account the potential profit or loss that the vendor may undertake. The logarithmic method will show at what point the salesman optimal peak profit will be. The logarithmic curve is exponential and will ultimately determine the peak profit and printing point at which the business will succeed. This solution is meant to determine the optimal solution from a profit standpoint.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&amp;lt;sup&amp;gt;,&amp;lt;/sup&amp;gt;&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
Beyond the namesake example of the newsvendor problem, the newsvendor problem model can be applied to a variety of other discrete optimization problems. &lt;br /&gt;
&lt;br /&gt;
=== Personal Investments ===&lt;br /&gt;
The tradeoff between tying funds up in a stock against holding cash reserves follows the model of the newsvendor problem because putting too much much of your money in stocks could lead to having to sell stocks undervalue to free up cash while holding too much money in cash reserves could lead to money that is under performing. The newsvendor problem can help investors find an optimal way to allow to minimize risk while allowing enough opportunity to create a large gain. With recent trends of market volatility, evaluating cash positions and market exposure has become ever more important.&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Birge, J. and Louveaux, F. Introduction to Stochastic Programming, Springer, 2011.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Emergency Resources ===&lt;br /&gt;
The amount of emergency resources to hold on hand follows the model of the newsvendor problem because holding too many emergency resources could mean throwing out expensive inventory if there is no emergency while not having enough emergency resources could be disastrous in times of peril. Emergencies have the same tendencies of an unknown market. The first responders need to have an optimal amount of supplies to maximize their effectiveness. If items that are perishable are sent in mass quantities, it can bog down the supply lines and lead to important resources becoming expired.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Manufacturing ===&lt;br /&gt;
The amount of units of a good to manufacture follows the model of the newsvendor problem because while overproduction would always meet demand, production costs increase and storage costs are introduced for the excess inventory. Manufacturers and wholesalers often rely on razor thin margins. By understanding how to limit excess storage and money that it puts out into the materials themselves the business can find an accurate way of maximizing the cash flow. Inventory is often one of the crippling factors of a business. Businesses often can save money on individual units by producing larger quantities, but this ultimately eats away at having a strong cash position to address the concerns of a changing market.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Real Estate ===&lt;br /&gt;
House pricing in the real estate market follows the model of the newsvendor problem because if a house is priced too high it will take too long to sell and if the house is priced too low it will sell quickly but at lower price. The housing market is another investment that is exposed to a great deal of volatility and increased market risk. Markets can change rapidly from economic situations to also the crime, schools, and locations around a property. By understanding the market norms, one can find the adequate pricing method for a home using the newsvendor problem algorithm. Appraisers and realtors must focus on understanding these metrics to ensure the estimates are accurate.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The newsboy formulation is used to optimize the amount of profit while minimizing the excess materials that hold no value after a given period of time. This formulation can be adapted for different probabilities and distributions of expected sales.  Additionally, nuances such as accounting for a salvage price for unsold perishable goods can also be added to the problem for added complexity to mimic a given situation. From that, the salesperson can determine how many of a perishable product should be purchased for resale at a given time in order to optimize their profits.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2731</id>
		<title>Set covering problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2731"/>
		<updated>2020-12-21T11:36:18Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Sherry Liang, Khalid Alanazi, Kumail Al Hamoud (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem is a significant NP-hard problem in combinatorial optimization. Given a collection of elements, the set covering problem aims to find the minimum number of sets that incorporate (cover) all of these elements. &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set covering problem importance has two main aspects: one is pedagogical, and the other is practical. &lt;br /&gt;
&lt;br /&gt;
First, because many greedy approximation methods have been proposed for this combinatorial problem, studying it gives insight into the use of approximation algorithms in solving NP-hard problems. Thus, it is a primal example in teaching computational algorithms. We present a preview of these methods in a later section, and we refer the interested reader to these references for a deeper discussion. &amp;lt;ref name=&amp;quot;one&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;seven&amp;quot;&amp;gt; P. Slavı́k, [https://www.sciencedirect.com/science/article/abs/pii/S0196677497908877 &amp;quot;A Tight Analysis of the Greedy Algorithm for Set Cover],&amp;quot; &#039;&#039;Journal of Algorithms,&#039;&#039;, vol. 25, pp. 237-245, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;What Is the Best Greedy-like Heuristic for the Weighted Set Covering Problem?],&amp;quot; &#039;&#039;Operations Research Letters&#039;&#039;, vol. 44, pp. 366-369, 2016. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, many problems in different industries can be formulated as set covering problems. For example, scheduling machines to perform certain jobs can be thought of as covering the jobs. Picking the optimal location for a cell tower so that it covers the maximum number of customers is another set covering application. Moreover, this problem has many applications in the airline industry, and it was explored on an industrial scale as early as the 1970s. &amp;lt;ref name=&amp;quot;two&amp;quot;&amp;gt; J. Rubin, [https://www.jstor.org/stable/25767684?seq=1 &amp;quot;A Technique for the Solution of Massive Set Covering Problems, with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Transportation Science&#039;&#039;, vol. 7, pp. 34-48, 1973. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem formulation ==&lt;br /&gt;
In the set covering problem, two sets are given: a set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; of elements and a set &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; of subsets of the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. Each subset in &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; is associated with a predetermined cost, and the union of all the subsets covers the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. This combinatorial problem then concerns finding the optimal number of subsets whose union covers the universal set while minimizing the total cost.&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mathematical formulation of the set covering problem is define as follows. We define &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; u_i,..., u_m &amp;lt;/math&amp;gt;} as the universe of elements and &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; s_i,..., s_n &amp;lt;/math&amp;gt;} as a collection of subsets such that &amp;lt;math&amp;gt; s_i \subset U &amp;lt;/math&amp;gt; and the union of &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; covers all elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; (i.e. &amp;lt;math&amp;gt;\cup&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; ). Addionally, each set &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; must cover at least one element of &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and has associated cost &amp;lt;math&amp;gt; c_i&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt; c_i &amp;gt; 0&amp;lt;/math&amp;gt;. The objective is to find the minimum cost sub-collection of sets &amp;lt;math&amp;gt; X &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\subset&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers all the elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Integer linear program formulation ==&lt;br /&gt;
An integer linear program (ILP) model can be formulated for the minimum set covering problem as follows:&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i = \begin{cases} 1, &amp;amp; \text{if subset }i\text{ is selected} \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective function&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Constraints &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{i=1}^n y_i \geq 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i \in \{0, 1\}, \forall i = 1,....,n&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The objective function &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; is defined to minimize the number of subset &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; that cover all elements in the universe by minimizing their total cost. The first constraint implies that every element &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; must be be covered and the second constraint &amp;lt;math&amp;gt; y_i \in \{0, 1\} &amp;lt;/math&amp;gt; indicates that the decision variables are binary which means that every set is either in the set cover or not.&lt;br /&gt;
&lt;br /&gt;
Set covering problems are significant NP-hard optimization problems, which implies that as the size of the problem increases, the computational time to solve it increases exponentially. Therefore, there exist approximation algorithms that can solve large scale problems in polynomial time with optimal or near-optimal solutions. In subsequent sections, we will cover two of the most widely used approximation methods to solve set cover problem in polynomial time which are linear program relaxation methods and classical greedy algorithms. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Approximation via LP relaxation and rounding ==&lt;br /&gt;
Set covering is a classical integer programming problem and solving integer program in general is NP-hard. Therefore, one approach to achieve an &amp;lt;math&amp;gt; O&amp;lt;/math&amp;gt;(log&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;) approximation to set covering problem in polynomial time is solving via linear programming (LP) relaxation algorithms &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;. In LP relaxation, we relax the integrality requirement into a linear constraints. For instance, if we replace the constraints &amp;lt;math&amp;gt; y_i \in \{0, 1\}&amp;lt;/math&amp;gt; with the constraints &amp;lt;math&amp;gt; 0 \leq y_i \leq 1 &amp;lt;/math&amp;gt;, we obtain the following LP problem that can be solved in polynomial time:&lt;br /&gt;
&lt;br /&gt;
minimize  &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
subject to &amp;lt;math&amp;gt; \sum_{i=1}^n y_i \geq 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; 0 \leq y_i\leq 1,   \forall i = 1,....,n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above LP formulation is a relaxation of the original ILP set cover problem. This means that every feasible solution of the integer program is also feasible for this LP program. Additionally, the value of any feasible solution for the integer program is the same value in LP since the objective functions of both integer and linear programs are the same. Solving the LP program will result in an optimal solution that is a lower bound for the original integer program since the minimization of LP finds a feasible solution of lowest possible values. Moreover, we use LP rounding algorithms to directly round the fractional LP solution to an integral combinatorial solution as follows:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deterministic rounding algorithm&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suppose we have an optimal solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; for the linear programming relaxation of the set cover problem.  We round the fractional solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; to an integer solution &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; using LP rounding algorithm. In general, there are two approaches for rounding algorithms, deterministic and randomized rounding algorithm. In this section, we will explain the deterministic algorithms. In this approach, we include subset &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; in our solution if &amp;lt;math&amp;gt; z^* \geq 1/d &amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; is the maximum number of sets in which any element appears. In practice, we set &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; to be as follows:&amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z = \begin{cases} 1, &amp;amp; \text{if } z^*\geq 1/d \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rounding algorithm is an approximation algorithm for the set cover problem. It is clear that the algorithm converge in polynomial time and &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; is a feasible solution to the integer program.&lt;br /&gt;
&lt;br /&gt;
== Greedy approximation algorithm ==&lt;br /&gt;
Greedy algorithms can be used to approximate for optimal or near-optimal solutions for large scale set covering instances in polynomial solvable time. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot; /&amp;gt; The greedy heuristics applies iterative process that, at each stage, select the largest number of uncovered elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;, and delete the uncovered elements, until all elements are covered. &amp;lt;ref name=&amp;quot;ten&amp;quot;&amp;gt; V. Chvatal, [https://pubsonline.informs.org/doi/abs/10.1287/moor.4.3.233 &amp;quot;Greedy Heuristic for the Set-Covering Problem],&amp;quot; &#039;&#039;Mathematics of Operations Research&#039;&#039;, vol. 4, pp. 233-235, 1979. &amp;lt;/ref&amp;gt; Let &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; be the set that contain the covered elements, and &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; be the set that contain the elements of &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt; that still uncovered. At the beginning of the iteration, &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; is empty and all elements  &amp;lt;math&amp;gt; Y \in U &amp;lt;/math&amp;gt;. We iteratively select the set of &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers the largest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and add it to the covered elements in &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;. An example of this algorithm is presented below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Greedy algorithm for minimum  set cover example: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Step 0: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; T \in \Phi &amp;lt;/math&amp;gt;         &amp;lt;math&amp;gt; \quad \quad \quad \quad \quad  &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; stores the covered elements }&lt;br /&gt;
&lt;br /&gt;
Step 1: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;While&#039;&#039;&#039; &amp;lt;math&amp;gt; U \neq \Phi &amp;lt;/math&amp;gt; &#039;&#039;&#039;do:&#039;&#039;&#039;            &amp;lt;math&amp;gt; \quad   &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; stores the uncovered elements &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Step 2:       &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;  select &amp;lt;math&amp;gt; s_i \in S &amp;lt;/math&amp;gt; that covers the highest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 3:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   add &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   remove &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 5: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;End while&#039;&#039;&#039;         &lt;br /&gt;
&lt;br /&gt;
Step 6: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;Return&#039;&#039;&#039; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
Let’s consider a simple example where we assign cameras at different locations. Each location covers some areas of stadiums, and our goal is to put the least amount of cameras such that all areas of stadiums are covered. We have stadium areas from 1 to 15, and possible camera locations from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
We are given that camera location 1 covers stadium areas {1,3,4,6,7}, camera location 2 covers stadium areas {4,7,8,12}, while the remaining camera locations and the stadium areas that the cameras can cover are given in table 1 below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 1 Camera Location vs Stadium Area&lt;br /&gt;
|-&lt;br /&gt;
!camera Location&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|-&lt;br /&gt;
!stadium area&lt;br /&gt;
|1,3,4,6,7&lt;br /&gt;
|4,7,8,12&lt;br /&gt;
|2,5,9,11,13&lt;br /&gt;
|1,2,14,15&lt;br /&gt;
|3,6,10,12,14&lt;br /&gt;
|8,14,15&lt;br /&gt;
|1,2,6,11&lt;br /&gt;
|1,2,4,6,8,12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can then represent the above information using binary values. If the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; can be covered with camera location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, then we have &amp;lt;math&amp;gt;y_{ij} = 1&amp;lt;/math&amp;gt;. If not,&amp;lt;math&amp;gt;y_{ij} = 0&amp;lt;/math&amp;gt;. For instance, stadium area 1 is covered by camera location 1, so &amp;lt;math&amp;gt;y_{11} = 1&amp;lt;/math&amp;gt;, while stadium area 1 is not covered by camera location 2, so &amp;lt;math&amp;gt;y_{12} = 0&amp;lt;/math&amp;gt;. The binary variables &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; values are given in the table below: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 2 Binary Table (All Camera Locations and Stadium Areas)&lt;br /&gt;
!&lt;br /&gt;
!Camera1&lt;br /&gt;
!Camera2&lt;br /&gt;
!Camera3&lt;br /&gt;
!Camera4&lt;br /&gt;
!Camera5&lt;br /&gt;
!Camera6&lt;br /&gt;
!Camera7&lt;br /&gt;
!Camera8&lt;br /&gt;
|-&lt;br /&gt;
!Stadium1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium3&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium4&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium6&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium7&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium8&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium12&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium15&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We introduce another binary variable &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to indicate if a camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;z_j = 1&amp;lt;/math&amp;gt; if camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, while &amp;lt;math&amp;gt;z_j = 0&amp;lt;/math&amp;gt; if not. &lt;br /&gt;
&lt;br /&gt;
Our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;. For each stadium, there’s a constraint that the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; has to be covered by at least one camera location. For instance, for stadium area 1, we have &amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;, while for stadium 2, we have &amp;lt;math&amp;gt;z_3 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;. All the 15 constraints that corresponds to 15 stadium areas are listed below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;s.t. Constraints 1 to 15 are satisfied:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 + z_4 + z_7 + z_8 \geq 1 (2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_5 \geq 1             (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_2 + z_8 \geq 1       (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 \geq 1                 (5)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1  (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1             (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                  (9)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                    (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3 + z_7 \geq 1              (11)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1        (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                   (13)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1        (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1              (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From constraint {5,9,13}, we can obtain &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. Thus we no longer need constraint 2 and 11 as they are satisfied when  &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. With &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt; determined, the constraints left are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 \geq 1            (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 + z_8 \geq 1      (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1 (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                  (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1      (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1      (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now if we take a look at constraint &amp;lt;math&amp;gt;10. z_5 \geqslant 1&amp;lt;/math&amp;gt; so &amp;lt;math&amp;gt;z_5&amp;lt;/math&amp;gt; shall equal to 1. As &amp;lt;math&amp;gt;z_5 = 1&amp;lt;/math&amp;gt;, constraint {3,6,12,14} are satisfied no matter what other &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are taken. If we also take a look at constraint 7 and 4, if constraint 4 will be satisfied as long as constraint 7 is satisfied since &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are nonnegative, so constraint 4 is no longer needed. The remaining constraints are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next step is to focus on constraint 7 and 15. We can have at least 4 combinations of &amp;lt;math&amp;gt;z_1, z_2, z_4, z_6&amp;lt;/math&amp;gt;values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A: z_1 = 1, z_2 = 0, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B: z_1 = 1, z_2 = 0, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C: z_1 = 0, z_2 = 1, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D: z_1 = 0, z_2 = 1, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can then discuss each combination and determine &amp;lt;math&amp;gt;z_7, z_8&amp;lt;/math&amp;gt;values for constraint 1 and 8 to be satisfied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;: constraint 1 already satisfied, we need &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 8.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;: we need &amp;lt;math&amp;gt;z_7 = 1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 1, while constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Our final step is to compare the four combinations. Since our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; and combinations &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; require the least amount of &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to be 1, they are the optimal solutions.&lt;br /&gt;
&lt;br /&gt;
To conclude, our two solutions are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 1: z_1 = 1, z_3 = 1, z_5 = 1, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 2: z_2 = 1, z_3 = 1, z_4 = 1, z_5 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The minimum number of cameras that we need to install is 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Let&#039;s now consider solving the problem using the greedy algorithm.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We have a set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; (stadium areas) that needs to be covered with &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; (camera locations). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U = \{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \{C_1,C_2,C_3,C_4,C_5,C_6,C_7,C_8\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_1 = \{1,3,4,6,7\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_2 = \{4,7,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_3 = \{2,5,9,11,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_4 = \{1,2,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_5 = \{3,6,10,12,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_6 = \{8,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_7 = \{1,2,6,11\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_8 = \{1,2,4,6,8,12\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The cost of each Camera Location is the same in this case, we just hope to minimize the total number of cameras used, so we can assume the cost of each &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; to be 1.&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; represents set of elements included so far. Initialize &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; to be empty.&lt;br /&gt;
&lt;br /&gt;
First Iteration: &lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_8 = 1/6&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Second Iteration: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Third Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fourth Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/0&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; all have meaningful and the same values, we can choose either both &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; or both &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt;, as &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;C_2 &amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;15&amp;lt;/math&amp;gt;  to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The solution we obtained is: &lt;br /&gt;
&lt;br /&gt;
Option 1: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option 2: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The greedy algorithm does not provide the optimal solution in this case.&lt;br /&gt;
&lt;br /&gt;
The usual elimination algorithm would give us the minimum number of cameras that we need to install to be4, but the greedy algorithm gives us the minimum number of cameras that we need to install is 5.&lt;br /&gt;
&lt;br /&gt;
== Applications==&lt;br /&gt;
&lt;br /&gt;
The applications of the set covering problem span a wide range of applications, but its usefulness is evident in industrial and governmental planning. Variations of the set covering problem that are of practical significance include the following.&lt;br /&gt;
;The optimal location problem&lt;br /&gt;
&lt;br /&gt;
This set covering problems is concerned with maximizing the coverage of some public facilities placed at different locations. &amp;lt;ref name=&amp;quot;three&amp;quot;&amp;gt; R. Church and C. ReVelle, [https://link.springer.com/article/10.1007/BF01942293 &amp;quot;The maximal covering location problem],&amp;quot; &#039;&#039;Papers of the Regional Science Association&#039;&#039;, vol. 32, pp. 101-118, 1974. &amp;lt;/ref&amp;gt; Consider the problem of placing fire stations to serve the towns of some city. &amp;lt;ref name=&amp;quot;four&amp;quot;&amp;gt; E. Aktaş, Ö. Özaydın, B. Bozkaya, F. Ülengin, and Ş. Önsel, [https://pubsonline.informs.org/doi/10.1287/inte.1120.0671 &amp;quot;Optimizing Fire Station Locations for the Istanbul Metropolitan Municipality],&amp;quot; &#039;&#039;Interfaces&#039;&#039;, vol. 43, pp. 240-255, 2013. &amp;lt;/ref&amp;gt; If each fire station can serve its town and all adjacent towns, we can formulate a set covering problem where each subset consists of a set of adjacent towns. The problem is then solved to minimize the required number of fire stations to serve the whole city. &lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt; y_i  &amp;lt;/math&amp;gt; be the decision variable corresponding to choosing to build a fire station at town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt; S_i &amp;lt;/math&amp;gt; be a subset of towns including town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; and all its neighbors. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
such that &amp;lt;math&amp;gt; \sum_{i\in S_i} y_i \geq 1, \forall i&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
A real-world case study involving optimizing fire station locations in Istanbul is analyzed in this reference. &amp;lt;ref name=&amp;quot;four&amp;quot; /&amp;gt; The Istanbul municipality serves 790 subdistricts, which should all be covered by a fire station. Each subdistrict is considered covered if it has a neighboring district (a district at most 5 minutes away) that has a fire station. For detailed computational analysis, we refer the reader to the mentioned academic paper.&lt;br /&gt;
; The optimal route selection problem&lt;br /&gt;
&lt;br /&gt;
Consider the problem of selecting the optimal bus routes to place pothole detectors. Due to the scarcity of the physical sensors, the problem does not allow for placing a detector on every road. The task of finding the maximum coverage using a limited number of detectors could be formulated as a set covering problem. &amp;lt;ref name=&amp;quot;five&amp;quot;&amp;gt; J. Ali and V. Dyo, [https://www.scitepress.org/Link.aspx?doi=10.5220/0006469800830088 &amp;quot;Coverage and Mobile Sensor Placement for Vehicles on Predetermined Routes: A Greedy Heuristic Approach],&amp;quot; &#039;&#039;Proceedings of the 14th International Joint Conference on E-Business and Telecommunications&#039;&#039;, pp. 83-88, 2017. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;eleven&amp;quot;&amp;gt; P.H. Cruz Caminha , R. De Souza Couto , L.H. Maciel Kosmalski Costa , A. Fladenmuller , and M. Dias de Amorim, [https://www.mdpi.com/1424-8220/18/6/1976 &amp;quot;On the Coverage of Bus-Based Mobile Sensing],&amp;quot; &#039;&#039;Sensors&#039;&#039;, 2018. &amp;lt;/ref&amp;gt; Specifically, giving a collection of bus routes &#039;&#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039;&#039;, where each route itself is divided into segments. Route &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. The segments of two different routes can overlap, and each segment is associated with a length &amp;lt;math&amp;gt; a_j &amp;lt;/math&amp;gt;. The goal is then to select the routes that maximize the total covered distance.&lt;br /&gt;
&lt;br /&gt;
This is quite different from other applications because it results in a maximization formulation, rather than a minimization formulation. Suppose we want to use at most &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; different routes. We want to find &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; routes that maximize the length of of covered segments. Let &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; be the binary decision variable corresponding to selecting route &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and let &amp;lt;math&amp;gt; y_j &amp;lt;/math&amp;gt; be the decision variable associated with covering segment &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. Let us also denote the set of routes that cover segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt; C_j &amp;lt;/math&amp;gt;. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ \sum_{j} a_jy_j\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ \sum_{i\in C_j} x_i \geq y_j \quad \forall j \\&lt;br /&gt;
&amp;amp; ~~ \sum_{i} x_i = k \\ &lt;br /&gt;
&amp;amp; ~~ x_i,y_{j} \in \{0,1\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The work by Ali and Dyo explores a greedy approximation algorithm to solve an optimal selection problem including 713 bus routes in Greater London. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; Using 14% of the routes only (100 routes), the greedy algorithm returns a solution that covers 25% of the segments in Greater London. For a details of the approximation algorithm and the world case study, we refer the reader to this reference. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; For a significantly larger case study involving 5747 buses covering 5060km, we refer the reader to this academic article. &amp;lt;ref name=&amp;quot;eleven&amp;quot; /&amp;gt;&lt;br /&gt;
;The airline crew scheduling problem&lt;br /&gt;
&lt;br /&gt;
An important application of large-scale set covering is the airline crew scheduling problem, which pertains to assigning airline staff to work shifts. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;six&amp;quot;&amp;gt; E. Marchiori and A. Steenbeek, [https://link.springer.com/chapter/10.1007/3-540-45561-2_36 &amp;quot;An Evolutionary Algorithm for Large Scale Set Covering Problems with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Real-World Applications of Evolutionary Computing. EvoWorkshops 2000. Lecture Notes in Computer Science&#039;&#039;, 2000. &amp;lt;/ref&amp;gt; Thinking of the collection of flights as a universal set to be covered, we can formulate a set covering problem to search for the optimal assignment of employees to flights. Due to the complexity of airline schedules, this problem is usually divided into two subproblems: crew pairing and crew assignment. We refer the interested reader to this survey, which contains several problem instances with the number of flights ranging from 1013 to 7765 flights, for a detailed analysis of the formulation and algorithms that pertain to this significant application. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;eight&amp;quot;&amp;gt; A. Kasirzadeh, M. Saddoune, and F. Soumis [https://www.sciencedirect.com/science/article/pii/S2192437620300820?via%3Dihub &amp;quot;Airline crew scheduling: models, algorithms, and data sets],&amp;quot; &#039;&#039;EURO Journal on Transportation and Logistics&#039;&#039;, vol. 6, pp. 111-137, 2017. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem, which aims to find the least number of subsets that cover some universal set, is a widely known NP-hard combinatorial problem. Due to its applicability to route planning and airline crew scheduling, several methods have been proposed to solve it. Its straightforward formulation allows for the use of off-the-shelf optimizers to solve it. Moreover, heuristic techniques and greedy algorithms can be used to solve large-scale set covering problems for industrial applications. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Facility_location_problem&amp;diff=2730</id>
		<title>Facility location problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Facility_location_problem&amp;diff=2730"/>
		<updated>2020-12-21T11:35:38Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Liz Cantlebary, Lawrence Li (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Facility Location Problem (FLP) is a classic optimization problem that determines the best location for a factory or warehouse to be placed based on geographical demands, facility costs, and transportation distances. These problems generally aim to maximize the supplier&#039;s profit based on the given customer demand and location&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;. FLP can be further broken down into capacitated and uncapacitated problems, depending on whether the facilities in question have a maximum capacity or not&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
== Theory and Formulation ==&lt;br /&gt;
&lt;br /&gt;
=== Weber Problem and Single Facility FLPs ===&lt;br /&gt;
The Weber Problem is a simple FLP that consists of locating the geometric median between three points with different weights. The geometric median is a point between three given points in space such that the sum of the distances between the median and the other three points is minimized. It is based on the premise of minimizing transportation costs from one point to various destinations, where each destination has a different associated cost per unit distance. &lt;br /&gt;
&lt;br /&gt;
Given &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; points &amp;lt;math&amp;gt;(a_1,b_1)...(a_N,b_N)&amp;lt;/math&amp;gt; on a plane with associated weights &amp;lt;math&amp;gt;w_1...w_N&amp;lt;/math&amp;gt;, the 2-dimensional Weber problem to find the geometric median &amp;lt;math&amp;gt;(x,y)&amp;lt;/math&amp;gt; is formulated as&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\min\begin{align} W(x,y) = \sum_{i=1}^Nw_id_i(x,y,a_i,b_i)\\ \end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i(x,y,a_i,b_i)=\sqrt{(x-a_i)^2+(y-b_i)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above formulation serves as a foundation for many basic single facility FLPs. For example, the minisum problem aims to locate a facility at the point that minimizes the sum of the weighted distances to the given set of existing facilities, while the minimax problem consists of placing the facility at the point that minimizes the maximum weighted distance to the existing facilities&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;. Additionally, in contrast to the minimax problem, the maximin facility problem maximizes the minimum weighted distance to the given facilities.&lt;br /&gt;
&lt;br /&gt;
=== Capacitated and Uncapacitated FLPs ===&lt;br /&gt;
FLPs can often be formulated as mixed-integer programs (MIPs), with a fixed set of facility and customer locations. Binary variables are used in these problems to represent whether a certain facility is open or closed and whether that facility can supply a certain customer. Capacitated and uncapacitated FLPs can be solved this way by defining them as integer programs. &lt;br /&gt;
&lt;br /&gt;
A capacitated facility problem applies constraints to the production and transportation capacity of each facility. As a result, customers may not be supplied by the most immediate facility, since this facility may not be able to satisfy the given customer demand. &lt;br /&gt;
&lt;br /&gt;
In a problem with &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; facilities and &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; customers, the capacitated formulation defines a binary variable &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; and a variable &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; for each facility &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; and each customer &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;. If facility &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is open, &amp;lt;math&amp;gt;x_i=1&amp;lt;/math&amp;gt;; otherwise &amp;lt;math&amp;gt;x_i=0&amp;lt;/math&amp;gt;. Open facilities have an associated fixed cost &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt; and a maximum capacity &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; is the fraction of the total demand &amp;lt;math&amp;gt;d_j&amp;lt;/math&amp;gt; of customer &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; that facility &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; has satisfied and the transportation cost between facility &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; and customer &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; is represented as &amp;lt;math&amp;gt;t_{ij}&amp;lt;/math&amp;gt;. The capacitated FLP is therefore defined as&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\min\ \sum_{i=1}^N\sum_{j=1}^Md_jt_{ij}y_{ij}+\sum_{i=1}^Nf_ix_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t.\ \sum_{i=1}^Ny_{ij}=1\ \ \forall\, j\in\{1,...,M\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad \sum_{j=1}^Md_jy_{ij}\leq k_ix_i\ \ \forall\, i\in\{1,...,N\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad y_{ij}\geq0\ \ \forall\, i\in\{1,...,N\},\ \forall\, j\in\{1,...,M\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad x_i\in\{0,1\}\ \ \forall\, i\in\{1,...,N\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In an uncapacitated facility problem, the amount of product each facility can produce and transport is assumed to be unlimited, and the optimal solution results in customers being supplied by the lowest-cost, and usually the nearest, facility. Using the above formulation, the unlimited capacity means &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; can be assumed to be a sufficiently large constant, while &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; is now a binary variable, because the demand of each customer can be fully met with the nearest facility&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;. If facility &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; supplies customer &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, then &amp;lt;math&amp;gt;y_{ij}=1&amp;lt;/math&amp;gt;; otherwise &amp;lt;math&amp;gt;y_{ij}=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Approximate and Exact Algorithms ===&lt;br /&gt;
A variety of approximate algorithms can be used to solve facility location problems. These algorithms terminate after a given number of steps based on the size of the problem, yielding a feasible solution with an error that does not exceed a constant approximation ratio&amp;lt;sup&amp;gt;(4)&amp;lt;/sup&amp;gt;. This ratio &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; indicates that the approximate solution is no greater than the exact solution by a factor of &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
While greedy algorithms generally do not perform well on FLPs, the primal-dual greedy algorithm presented by Jain and Vazirani tends to be faster in solving the uncapacitated FLP than LP-rounding algorithms, which solve the LP relaxation of the integer formulation and round the fractional results&amp;lt;sup&amp;gt;(4)&amp;lt;/sup&amp;gt;. The Jain-Vazirani algorithm computes the primal and the dual to the LP relaxation simultaneously and guarantees a constant approximation ratio of 1.861&amp;lt;sup&amp;gt;(5)&amp;lt;/sup&amp;gt;. This solver has a running time complexity of &amp;lt;math&amp;gt;O(m\log m)&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; corresponds to the number of edges between facilities and cities. Improving upon this primal-dual approach, the modified Jain-Mahdian-Saberi algorithm guarantees a better approximation ratio for the uncapacitated problem&amp;lt;sup&amp;gt;(5)&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To solve the capacitated FLP, which often contains more complex constraints, many algorithms utilize a Lagrangian decomposition&amp;lt;sup&amp;gt;(6)&amp;lt;/sup&amp;gt;, first introduced by Held and Karp in the traveling salesman problem&amp;lt;sup&amp;gt;(7)&amp;lt;/sup&amp;gt;. This approach allows constraints to be relaxed by penalizing this relaxation while solving a simplified problem. The capacitated problem has been effectively solved using this Lagrangian relaxation in conjunction with the volume algorithm, which is a variation of subgradient optimization presented by Barahona and Anbil&amp;lt;sup&amp;gt;(8)&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Exact methods have also been presented for solving FLPs. To solve the &amp;lt;math&amp;gt;p&lt;br /&gt;
&amp;lt;/math&amp;gt;-median capacitated facility location problem, Ceselli introduces a branch-and-bound method that solves a Lagrangian relaxation with subgradient optimization, as well as a separate branch-and-price algorithm that utilizes column generation&amp;lt;sup&amp;gt;(9)&amp;lt;/sup&amp;gt;. Ceselli&#039;s work indicates that branch-and-bound works well when the ratio of &amp;lt;math&amp;gt;p&lt;br /&gt;
&amp;lt;/math&amp;gt; sites to &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; customers is low, but the performance and run-time worsen significantly as this ratio increases. In comparison, the branch-and-price method demonstrates much more stable performance across various problem sizes and is generally faster overall.&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
Suppose a paper products manufacturer has enough capital to build and manage an additional manufacturing plant in the United States in order to meet increased demand in three cities: New York City, NY, Los Angeles, CA, and Topeka, KS. The company already has distribution facilities in Denver, CO, Seattle, WA, and St. Louis, MO, and due to limited capital, cannot build an additional distribution facility. So, they must choose to build their new plant in one of these three locations. Due to geographic constraints, plants in Denver, Seattle, and St. Louis would have a maximum operating capacity of 400 tons/day, 700 tons/day, and 600 tons/day, respectively. The cost of transporting the products from the plant to the city is directly proportional, and an outline of the supply, demand, and cost of transportation is shown in the figure below. Regardless of where the plant is built, the selling price of the product is $100/ton.  &lt;br /&gt;
[[File:Example.png|center|780x780px]]&lt;br /&gt;
&#039;&#039;&#039;Exact Solution&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
To solve this problem, we will assign the following variables: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is the factory location&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; is the city destination&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; is the cost of transporting one ton of product from the factory to the city&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij}&amp;lt;/math&amp;gt; is the amount of product transported from the factory to the city in tons&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; is the maximum operating capacity at the factory &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D_j&amp;lt;/math&amp;gt; is the amount of unmet demand in the city  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To determine where the company should build the factory, we will carry out the following optimization problem for each location to maximize the profit from each ton sold:&lt;br /&gt;
&lt;br /&gt;
max &amp;lt;math&amp;gt;\sum_{j\in J}x_{ij}(100-C_{ij}) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
subject to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{j\in J}x_{ij} \leq A_i      &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\forall i\in I&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{i\in I}x_{ij} \leq D_j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\forall j\in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij} \geq 0  &amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\forall i \in I,&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\forall j \in J&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem is solved in GAMS (General Algebraic Modeling System).&lt;br /&gt;
&lt;br /&gt;
If the factory is built in Denver, 300 tons/day of product go to Los Angeles and 100 tons/day go to Topeka, for a total profit of $36,300/day.&lt;br /&gt;
&lt;br /&gt;
If the factory is built in Seattle, 300 tons/day of product go to Los Angela, 100 tons/day of product go to Topeka, and 300 tons/day go to New York City, for a total profit of $56,500/day.&lt;br /&gt;
&lt;br /&gt;
If the factory is built in St. Louis, 100 tons/day of product go to Topeka and 500 tons/day go to New York City, for a total profit of $55,200/day.&lt;br /&gt;
&lt;br /&gt;
Therefore, to maximize profit, the factory should be built in Seattle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Approximate Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This example can also be solved approximately through the branch and bound method.  The tree diagram showing the optimization is shown below. &lt;br /&gt;
&lt;br /&gt;
[[File:Branch and bound.png|center|frame|Branch and bound approach]]&lt;br /&gt;
As shown in the tree diagram, building factories in both Denver and St. Louis would yield the highest profit of $82,200/day. Unfortunately, the company only has enough capital to build one facility. As a result of this, the only acceptable values are those in which one value is &amp;quot;1&amp;quot; and two are &amp;quot;0&amp;quot;. Based on this constraint, it is clear that the company should build the factory in Seattle, as shown in the exact solution above. However, this also yields valuable information if the company hopes to expand again in the near future, because building a factories in St. Louis and Denver is more profitable than building factories in Seattle and Denver or Seattle and St. Louis. Depending on company projections, it may be a better decision to build the first factory St. Louis and aim to build an additional factory in Denver as soon as possible. &lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
[[File:BadranElHaggarFacilityLocation.jpg|thumb|321x321px|Map of optimal collection stations in Port Said, Egypt&amp;lt;sup&amp;gt;(12)&amp;lt;/sup&amp;gt;.]]&lt;br /&gt;
Facility location problems are utilized in many industries to find the optimal placement of various facilities, including warehouses, power plants, public transportation terminals, polling locations, and cell towers, to maximize efficiency, impact, and profit. In more unique applications, extensive research has been done in applying FLPs to humanitarian efforts, such as identifying disaster management sites to maximize accessibility to healthcare and treatment&amp;lt;sup&amp;gt;(10)&amp;lt;/sup&amp;gt;. A case study by researchers in Nigeria explored the application of mixed-integer FLPs in optimizing the locations of waste collection centers to provide sanitation services in crucial communities. More effective waste collection systems could combat unsanitary practices and environmental pollution, which are major concerns in many developing nations&amp;lt;sup&amp;gt;(11)&amp;lt;/sup&amp;gt;. For example, Badran and El-Haggar proposed a solid waste management system for Port Said, Egypt, implementing a mixed-integer program to optimally place waste collection stations and minimize cost&amp;lt;sup&amp;gt;(12)&amp;lt;/sup&amp;gt;. This program was formulated to select collection stations from a set of locations such that the sum of the fixed cost of opening collections stations, the operating costs of the collection stations, and the transportation costs from the collection stations to the composting plants is minimized.   &lt;br /&gt;
&lt;br /&gt;
FLPs have also been used in clustering analysis, which involves partitioning a given set of elements (e.g. data points) into different groups based on the similarity of the elements. The elements can be placed into groups by identifying the locations of center points that effectively partition the set into clusters, based on the distances from the center points to each element&amp;lt;sup&amp;gt;(13)&amp;lt;/sup&amp;gt;. For example, the &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-median clustering problem can be formulated as a FLP that selects a set of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; cluster centers to minimize the cost between each point and its closest center. The cost in this problem is represented as the Euclidean distance &amp;lt;math&amp;gt;d(i,j)&amp;lt;/math&amp;gt; between a point &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; and a proposed cluster center &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;. The problem can be formulated as the following integer program, which selects &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; centers from a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; points&amp;lt;sup&amp;gt;(13)&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\min\ \sum_{i=1}^N x_{ij}d(ij)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t.\ \sum_{j=1}^Ny_j\leq k&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad \sum_{j=1}^Nx_{ij}=1&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad x_{ij}\leq y_j&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\quad \quad x_{ij}, y_j\in\{0,1\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In this formulation, the binary variables &amp;lt;math&amp;gt;y_j&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_{ij}&amp;lt;/math&amp;gt; represent whether &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; is used as a center point and whether &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; is the optimal center for &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, respectively. The &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-median problem is NP-hard and is commonly solved using approximation algorithms. One of the most effective algorithms to date, proposed by Byrka et al., has an approximation factor of 2.611&amp;lt;sup&amp;gt;(13)&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The facility location problem is an important application of computational optimization. The uses of this optimization technique are far-reaching, and can be used to determine anything from where a family should live based on the location of their workplaces and school to where a Fortune 500 company should put a new manufacturing plant or distribution facility to maximize their return on investment. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
# Drezner, Z; Hamacher. H. W. (2004), &#039;&#039;Facility Location Applications and Theory&#039;&#039;. New York, NY: Springer.&lt;br /&gt;
# Francis, R. L.; Mirchandani, P. B. (1990), &#039;&#039;Discrete Location Theory&#039;&#039;. New York, NY: Wiley.&lt;br /&gt;
# Hansen, P., et al. (1985), [https://pubsonline.informs.org/doi/abs/10.1287/opre.33.6.1251 The Minisum and Minimax Location Problems Revisited.] &#039;&#039;Operations Research, 33&#039;&#039;, 6, 1251-1265.&lt;br /&gt;
# Vygen, J. (2005), &#039;&#039;Approximation Algorithms for Facility Location Problems&#039;&#039;. Research Institute for Discrete Mathematics, University of Bonn.&lt;br /&gt;
# Jain, K., et al. (2003), [https://dl.acm.org/doi/10.1145/950620.950621 A Greedy Facility Location Algorithm Analyzed Using Dual Fitting with Factor-Revealing LP.] &#039;&#039;Journal of the ACM, 50&#039;&#039;, 6, 795-824.&lt;br /&gt;
# Alenezy, E. J. (2020), [https://www.hindawi.com/journals/aor/2020/5239176/ Solving Capacitated Facility Location Problem Using Lagrangian Decomposition and Volume Algorithm.] &#039;&#039;Advances in Operations Research,&#039;&#039; &#039;&#039;2020&#039;&#039;, 5239176, 2020.&lt;br /&gt;
# Held, M.; Karp, R. M. (1970), [https://pubsonline.informs.org/doi/abs/10.1287/opre.18.6.1138 The Traveling-Salesman Problem and Minimum Spanning Trees.] &#039;&#039;Operations Research, 18,&#039;&#039; 6, 1138-1162.&lt;br /&gt;
# Barahona, F.; Anbil, R. (2000), [https://link.springer.com/article/10.1007%2Fs101070050002 The Volume Algorithm: Producing Primal solutions with a Subgradient Method.] &#039;&#039;Mathematical Programming, 87,&#039;&#039; 3, 385–399.&lt;br /&gt;
# Ceselli, A. (2003), [https://link.springer.com/article/10.1007/s10288-003-0023-5 Two Exact Algorithms for the Capacitated p-Median Problem.] &#039;&#039;Quarterly Journal of the Belgian, French and Italian Operations Research Societies, 4&#039;&#039;, 1, 319-340.&lt;br /&gt;
# Daskin, M. S.; Dean, L. K. (2004), [https://link.springer.com/chapter/10.1007/1-4020-8066-2_3 Location of Health Care Facilities.] &#039;&#039;Handbook of OR/MS in Health Care: A Handbook of Methods and Applications&#039;&#039;, 43-76.&lt;br /&gt;
# Adeleke, O. J.; Olukanni, D. O. (2020), [https://www.mdpi.com/2313-4321/5/2/10 Facility Location Problems: Models, Techniques, and Applications in Waste Management.] &#039;&#039;Recycling, 5&#039;&#039;, 10.&lt;br /&gt;
# Badran, M.F.; El-Haggar, S.M. (2006), [https://www.sciencedirect.com/science/article/abs/pii/S0956053X05001534 Optimization of Municipal Solid Waste Management in Port Said – Egypt.] &#039;&#039;Waste Management, 26&#039;&#039;, 5, 534-545.&lt;br /&gt;
# Meira, L. A. A., et al. (2017), [https://www.sciencedirect.com/science/article/abs/pii/S030439751630514X Clustering through Continuous Facility Location Problems.] &#039;&#039;Theoretical Computer Science, 657&#039;&#039;, 137-145.&lt;br /&gt;
# Balcik, B.; Beamon, B. M. (2008), [https://www.tandfonline.com/doi/full/10.1080/13675560701561789 Facility Location in Humanitarian Relief.] &#039;&#039;International Journal of Logistics Research and Applications, 11&#039;&#039;, 101-121.&lt;br /&gt;
# Eiselt, H. A.; Marianov, V. (2019), &#039;&#039;Contributions to Location Analysis&#039;&#039;. Cham, Switzerland: Springer.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Eight_step_procedures&amp;diff=2729</id>
		<title>Eight step procedures</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Eight_step_procedures&amp;diff=2729"/>
		<updated>2020-12-21T11:35:03Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Eljona Pushaj, Diana Bogdanowich, Stephanie Keomany (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The eight-step procedures are a simplified, multi-stage approach for determining optimal solutions in mathematical optimization. Dynamic programming, developed by Richard Bellman in the 1950s&amp;lt;ref&amp;gt;Bellman, Richard. “The Theory of Dynamic Programming.” Bulletin of American Mathematical Society, vol. 60, 1954, pp 503–515, https://www.ams.org/journals/bull/1954-60-06/S0002-9904-1954-09848-8/S0002-9904-1954-09848-8.pdf. 18 Nov 2020.&amp;lt;/ref&amp;gt;, is used to solve for the maximization or minimization of the objective function by transforming the problem into smaller steps and enumerating all the different possible solutions and finding the optimal solution.&lt;br /&gt;
&lt;br /&gt;
In the eight-step procedure, a problem can be broken down into subproblems to solve. Using the solutions from the subproblems in a recursive manner, the solution can be determined after all the solutions of the subproblems are calculated to find the best solution, which demonstrates the principle of optimality: Any optimal policy has the property that, whatever the current state and current decision are, the remaining decisions must constitute an optimal policy with regard to the state resulting from the current decision.&amp;lt;ref&amp;gt;Bradley, Stephen P. Applied Mathematical Programming. Addison-Wesley. 1 February 1977. 320-342. 18 Nov 2020&amp;lt;/ref&amp;gt; Such a standard framework is used so that dynamic programming store the values of the subproblems to avoid recomputing, and thus, reduce time to solve the problem.&amp;lt;ref&amp;gt;Gavin-Hughes, Sam. “Dynamic Programming for Interviews.” Byte by Byte. https://www.byte-by-byte.com/dpbook/. 18 Nov 2020&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Theory, Methodology, and/or Algorithmic Discussion=&lt;br /&gt;
&lt;br /&gt;
===Methodology===&lt;br /&gt;
To solve a problem using the 8-step procedure, one must use the following steps:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1: Specify the stages of the problem&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
The stages of a dynamic programming problem can be defined as points where decisions are made. Specifying the stages also divides the problem into smaller pieces.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2: Specify the states for each stage&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
The states of a problem are defined as the knowledge necessary to make a decision. There are multiple states for each stage. In general, the states consists of the information that is needed to solve the smaller problem within each stage.&amp;lt;ref&amp;gt;Chinneck. (2015). Chapter 15 Dynamic Programming. Carleton.Ca. https://www.sce.carleton.ca/faculty/chinneck/po/Chapter15.pdf&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3: Specify the allowable actions for each state in each stage&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This helps create for a decision that must be made at each stage. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4: Describe the optimization function using an English-language description.&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5: Define the boundary conditions&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This can help create a starting point to finding a solution to the problem. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6: Define the recurrence relation&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This is often denoted with a function, and shows the relationsip between the value of a decision at a particular stage and the value of optimal decision made at the previous stages. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 7: Compute the optimal value from the bottom-up&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This step can be done manually or by using programming. Note that for each state, an optimal decision made at the remaining stages of the problem is independent from the decisions of the previous states. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 8: Arrive at the optimal solution&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This is the final step for solving a problem using the eight step procedure. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Numerical Example=&lt;br /&gt;
&#039;&#039;Suppose we have a knapsack with a weight capacity of C=5 and N=2 types of items. An item of type n weighs W [n] and generates a benefit of b [n,j] when packing j items of type n to the knapsack however only a[n] units of this item are available.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
To solve a Knapsack problem we use the following steps: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1: Specify the stages of the problem&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Weight capacity of C=5 and N=2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2: Specify the states for each stage&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Item types are stages: n=1,2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3: Specify the allowable actions for each state in each stage&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
U_{2}(5)\, =\, 0,1,...,min\left \{ a[2], \left \lfloor \frac{5}{w[2]}\right \rfloor \right \}&lt;br /&gt;
&amp;lt;/math&amp;gt;= &#039;&#039;&#039;{0,1,2}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4: Describe the optimization function using an English-language description.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Remaining capacity s= 1,2,3,4,5  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5: Define the boundary conditions&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
Boundary Conditions: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f^{*}_{n+1}(s) = 0&amp;lt;/math&amp;gt;,     &#039;&#039;s=0,1,2,3,4,5&#039;&#039;      &#039;&#039;C=5&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6: Define the recurrence relation&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; f^{*}_{2}(5)= max\left \{ b[2,j]+ f^{*}_{3}(5-j*w[2]) \right \} &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 7: Compute the optimal value from the bottom-up&#039;&#039;&#039;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; f^{*}_{2}(5)= max\left \{ b[2,j]+ f^{*}_{3}(5-j*w[2]) \right \} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f^{*}_{n+1}(s) = 0&amp;lt;/math&amp;gt;,     &#039;&#039;s=0,1,2,3,4,5&#039;&#039;      &#039;&#039;C=5&#039;&#039; &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Unused Capacity s&lt;br /&gt;
!&amp;lt;math&amp;gt;f^{*}_{1}(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
!Type 1 opt &amp;lt;math&amp;gt;U^{*}_{1}(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;f^{*}_{2}(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
!Type 2 opt &amp;lt;math&amp;gt;U^{*}_{2}(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;f^{*}_{3}(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 8: Arrive at the optimal solution&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=Applications=&lt;br /&gt;
The following are some applications where dynamic programming is used. The criteria for applying dynamic programming to an optimization problem are if the objective function involves maximization, minimization, or counting and if the problem is determined by finding all the solutions to find the optimal solution.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shortest/ Longest Path Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the shortest path problem, the path with the least amount of cost or value must be determined in a problem with multiple nodes in between the beginning node &#039;&#039;s&#039;&#039; to the final node &#039;&#039;e&#039;&#039;. Travelling from one node to another incurs a value or cost &#039;&#039;c(p, q&#039;&#039;), and the objective is to reach t with the smallest cost possible. The eight-step procedure can be used to determine the possible solutions which the optimal solution can be determined from.&amp;lt;ref&amp;gt;Neumann K. “Dynamic Programming Basic Concepts and Applications.” Optimization in Planning and Operations of Electric Power Systems. Physica, Heidelberg, 1993, p 31-56.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Likewise, but in a maximization function, the longest path can be determined in a problem by determining the solution with the highest cost involved to travel from node &#039;&#039;s&#039;&#039; to node &#039;&#039;e&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Knapsack Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The knapsack problem is an example of determining the distribution of effort or when there are limited resources to be shared with competing entities, and the goal is to maximize the benefit of the distribution. Dynamic programming is used when the increase in benefit in regard to increasing the quantity of resources is not linearly proportional. The volume may also be considered in addition to the weight of the resources. A volume constraint is added to the problem and represented in the state by stage &#039;&#039;n&#039;&#039; by an ordered pair (&#039;&#039;s, v&#039;&#039;) for remaining weight and volume. By considering &#039;&#039;d&#039;&#039; constraints, the number of states can grow exponentially with a &#039;&#039;d&#039;&#039; -dimensional state space even if the value of &#039;&#039;d&#039;&#039; is small. The problem becomes infeasible to solve and is referred to as the curse of dimensionality. However, the curse has faded due to advances in computational power.&amp;lt;ref&amp;gt;Taylor, C. Robert. Applications Of Dynamic Programming To Agricultural Decision Problems. United States, CRC Press, 2019.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Inventory Planning Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In inventory management, dynamic programming is used to determine how to meet anticipated and unexpected demand in order to minimize overall costs. Tracking an inventory system involves establishing a set of policies that monitor and control the levels of inventory, determining when a stock must be replenished, and the quantity of parts to order. For example, a production schedule can be computationally solved by knowing the demand, unit production costs, and inventory supply limits in order to keep the production costs below a certain rate.&amp;lt;ref&amp;gt;Bellman, Richard. “Dynamic Programming Approach to Optimal Inventory Processes with Delay in Delivery.” Quarterly of Applied Mathematics, vol 18, 1961, p. 399-403, https://www.ams.org/journals/qam/1961-18-04/S0033-569X-1961-0118516-2/S0033-569X-1961-0118516-2.pdf. 19 Nov 2020&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Needleman-Wunsh Algorithm (Global Sequence Alignment)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Developed by Saul B. Needleman and Christian D. Wunsch in 1970, the Needleman-Wunsh algorithm, also known as global sequence alignment, is used to find similarities within protein or nucleotide sequences. This algorithm is an application of dynamic programming used to divide a large problem such as a large sequence into smaller subproblems and the solutions of the subproblems are used to find the optimal sequences with the highest scores. A  matrix is constructed consisting of strings of the protein or nucleotide sequences. A scoring system is determined for each of the nucleotide pairs (adenine, guanine, cytosine, thymine) where there could exist a match (+1), mismatch (-1), or gap (-1). The sum of the scores determine the entire alignment pair. Then the scores are calculated for the pairs and filled out in the matrix. To find the optimal alignment, one would perform a &amp;quot;traceback&amp;quot; by starting at the upper left matrix to the bottom right. The algorithm is limited in that it can align only entire proteins.&amp;lt;ref&amp;gt;Needleman, S. B. and Wunsch, C. D. &amp;quot;A General Method Applicable to the Search for Similarities in the Amino Acid Sequence of Two Proteins.&amp;quot; J. Mol. Biol. 48, 1970, p. 443-453.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
The eight-step procedure is an approach used in dynamic programming to transform a problem into simpler problems to yield an optimal solution. The recursive nature of the procedure allows for the optimization problems to be solved using computational models that reduce time and effort and can be used in many applications across many industries.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Markov_decision_process&amp;diff=2728</id>
		<title>Markov decision process</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Markov_decision_process&amp;diff=2728"/>
		<updated>2020-12-21T11:34:23Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Eric Berg (eb645) (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
A Markov Decision Process (MDP) is a stochastic sequential decision making method.&amp;lt;math&amp;gt;^1&amp;lt;/math&amp;gt; Sequential decision making is applicable any time there is a dynamic system that is controlled by a decision maker where decisions are made sequentially over time. MDPs can be used to determine what action the decision maker should make given the current state of the system and its environment. This decision making process takes into account information from the environment, actions performed by the agent, and rewards in order to decide the optimal next action. MDPs can be characterized as both finite or infinite and continuous or discrete depending on the set of actions and states available and the decision making frequency.&amp;lt;math&amp;gt;^1&amp;lt;/math&amp;gt; This article will focus on discrete MDPs with finite states and finite actions for the sake of simplified calculations and numerical examples. The name Markov refers to the Russian mathematician Andrey Markov, since the MDP is based on the Markov Property. In the past, MDPs have been used to solve problems like inventory control, queuing optimization, and routing problems.&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; Today, MDPs are often used as a method for decision making in the reinforcement learning applications, serving as the framework guiding the machine to make decisions and &amp;quot;learn&amp;quot; how to behave in order to achieve its goal.&lt;br /&gt;
&lt;br /&gt;
= Theory and Methodology =&lt;br /&gt;
A MDP makes decisions using information about the system&#039;s current state, the actions being performed by the agent and the rewards earned based on states and actions.&lt;br /&gt;
&lt;br /&gt;
The MDP is made up of multiple fundamental elements: the agent, states, a model, actions, rewards, and a policy.&amp;lt;math&amp;gt;^1&amp;lt;/math&amp;gt; The agent is the object or system being controlled that has to make decisions and perform actions. The agent lives in an environment that can be described using states, which contain information about the agent and the environment.  The model determines the rules of the world in which the agent lives, in other words, how certain states and actions lead to other states. The agent can perform a fixed set of actions in any given state.  The agent receives rewards based on its current state. A policy is a function that determines the agent&#039;s next action based on its current state. [[File:Reinforcement Learning.png|thumb|Reinforcement Learning framework used in Markov Decision Processes]]&#039;&#039;&#039;MDP Framework:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; : States (&amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt;)&lt;br /&gt;
*&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; : Actions (&amp;lt;math&amp;gt;a \epsilon A&amp;lt;/math&amp;gt;)&lt;br /&gt;
*&amp;lt;math&amp;gt;P(S_{t+1} | s_t, a_t)&amp;lt;/math&amp;gt; : Model determining transition probabilities&lt;br /&gt;
*&amp;lt;math&amp;gt;R(s)&amp;lt;/math&amp;gt;: Reward&amp;lt;br /&amp;gt;&lt;br /&gt;
In order to understand how the MDP works, first the Markov Property must be defined. The Markov Property states that the future is independent of the past given the present.&amp;lt;math&amp;gt;^4&amp;lt;/math&amp;gt; In other words, only the present is needed to determine the future, since the present contains all necessary information from the past. The Markov Property can be described in mathematical terms below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;P[S_{t+1} | S_t] = P[S_{t+1} | S_1, S_2, S_3... S_t]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above notation conveys that the probability of the next state given the current state is equal to the probability of the next state given all previous states. The Markov Property is relevant to the MDP because only the current state is used to determine the next action, the previous states and actions are not needed. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Policy and Value Function&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The policy, &amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt; , is a function that maps actions to states. The policy determines which is the optimal action given the current state to achieve the maximum total reward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi : S \rightarrow A &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before the best policy can be determined, a goal or return must be defined to quantify rewards at every state. There are various ways to define the return. Each variation of the return function tries to maximize rewards in some way, but differs in which accumulation of rewards should be maximized. The first method is to choose the action that maximizes the expected reward given the current state. This is the myopic method, which weighs each time-step decision equally.&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; Next is the finite-horizon method, which tries to maximize the accumulated reward over a fixed number of time steps.&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; But because many applications may have infinite horizons, meaning the agent will always have to make decisions and continuously try to maximize its reward, another method is commonly used, known as the infinite-horizon method. In the infinite-horizon method, the goal is to maximize the expected sum of rewards over all steps in the future. &amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; When performing an infinite sum of rewards that are all weighed equally, the results may not converge and the policy algorithm may get stuck in a loop. In order to avoid this, and to be able prioritize short-term or long term-rewards, a discount factor, &amp;lt;math&amp;gt;\gamma   &lt;br /&gt;
 &amp;lt;/math&amp;gt;, is added. &amp;lt;math&amp;gt;^3&amp;lt;/math&amp;gt; If &amp;lt;math&amp;gt;\gamma    &lt;br /&gt;
 &amp;lt;/math&amp;gt; is closer to 0, the policy will choose actions that prioritize more immediate rewards, if &amp;lt;math&amp;gt;\gamma    &lt;br /&gt;
 &amp;lt;/math&amp;gt; is closer to 1, long-term rewards are prioritized.&lt;br /&gt;
&lt;br /&gt;
Return/Goal Variations:&lt;br /&gt;
&lt;br /&gt;
* Myopic: Maximize &amp;lt;math&amp;gt;E[ r_t  |  \Pi , s_t ]   &lt;br /&gt;
 &amp;lt;/math&amp;gt; , maximize expected reward for each state&lt;br /&gt;
* Finite-horizon: Maximize &amp;lt;math&amp;gt;E[ \textstyle \sum_{t=0}^k \displaystyle r_t  |  \Pi , s_t ]   &lt;br /&gt;
 &amp;lt;/math&amp;gt; , maximize sum of expected reward over finite horizon&lt;br /&gt;
* Discounted Infinite-horizon: Maximize &amp;lt;math&amp;gt;E[ \textstyle \sum_{t=0}^\infty \displaystyle \gamma^t r_t  |  \Pi , s_t ]     &lt;br /&gt;
 &amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\gamma \epsilon [0,1]   &lt;br /&gt;
 &amp;lt;/math&amp;gt;, maximize sum of discounted expected reward over infinite horizon&lt;br /&gt;
The value function, &amp;lt;math&amp;gt;V(s)   &lt;br /&gt;
 &amp;lt;/math&amp;gt;,  characterizes the return at a given state. Most commonly, the discounted infinite horizon return method is used to determine the best policy. Below the value function is defined as the expected sum of discounted future rewards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V(s) = E[ \sum_{t=0}^\infty \gamma^t r_t  | s_t ]     &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value function can be decomposed into two parts, the immediate reward of the current state, and the discounted value of the next state. This decomposition leads to the derivation of the [[Bellman equation|Bellman Equation]],, as shown in equation (2). Because the actions and rewards are dependent on the policy, the value function of an MDP is associated with a given policy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V(s) = E[ r_{t+1} + \gamma V(s_{t+1}) | s_t]   &lt;br /&gt;
 &amp;lt;/math&amp;gt;  , &amp;lt;math&amp;gt;s_{t+1} = s&#039;    &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V(s) = R(s) + \gamma \sum_{s&#039; \epsilon S}P_{ss&#039;}V(s&#039;)   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^{\Pi}(s) = R(s,\Pi(s)) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s,\Pi(s))V(s&#039;)   &lt;br /&gt;
 &amp;lt;/math&amp;gt;       (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^{*}(s) = max_a [R(s, a) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s, a)V^*(s&#039;)]    &lt;br /&gt;
 &amp;lt;/math&amp;gt;      (2)&lt;br /&gt;
&lt;br /&gt;
The optimal value function can be solved iteratively using iterative methods such as dynamic programming, Monte-Carlo evaluations, or temporal-difference learning.&amp;lt;math&amp;gt;^5&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The optimal policy is one that chooses the action with the largest optimal value given the current state:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi^*(s) = argmax_a [R(s,a) + \gamma \sum_{s&#039; \epsilon S}P_{ss&#039;}^aV(s&#039;)]   &lt;br /&gt;
 &amp;lt;/math&amp;gt;       (3)&lt;br /&gt;
&lt;br /&gt;
The policy is a function of the current state, meaning at each time step a new policy is calculated considering the present information. The optimal policy function can be solved using methods such as value iteration, policy iteration, Q-learning, or linear programming. &amp;lt;math&amp;gt;^{5,6}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first method for solving the optimality equation (2) is using value iteration, also known as successive approximation, backwards induction, or dynamic programming. &amp;lt;math&amp;gt;^{1,6}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Value Iteration Algorithm:&lt;br /&gt;
&lt;br /&gt;
# Initialization: Set &amp;lt;math&amp;gt;V^{*}_0(s) = 0    &lt;br /&gt;
 &amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt; , choose &amp;lt;math&amp;gt;\varepsilon &amp;gt;0    &lt;br /&gt;
 &amp;lt;/math&amp;gt;, n=1&lt;br /&gt;
# Value Update: For each &amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt;, compute: &amp;lt;math&amp;gt;V^{*}_{n+1}(s) = max_a [R(s, a) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s, a)V^*_n(s&#039;)]     &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
# If &amp;lt;math&amp;gt;| V_{n+1} - V_n | &amp;lt; \varepsilon     &lt;br /&gt;
 &amp;lt;/math&amp;gt;,  the algorithm has converged and the optimal value function, &amp;lt;math&amp;gt;V^*     &lt;br /&gt;
 &amp;lt;/math&amp;gt;, has been determined, otherwise return to step 2 and increment n by 1.&lt;br /&gt;
The value function approximation becomes more accurate at each iteration because more future states are considered. The value iteration algorithm can be slow to converge in certain situations, so an alternative algorithm can be used which converges more quickly.&lt;br /&gt;
&lt;br /&gt;
Policy Iteration Algorithm:&lt;br /&gt;
&lt;br /&gt;
# Initialization: Set an arbitrary policy &amp;lt;math&amp;gt;\Pi(s)   &lt;br /&gt;
 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;V(s)   &lt;br /&gt;
 &amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt;, choose &amp;lt;math&amp;gt;\varepsilon &amp;gt;0    &lt;br /&gt;
 &amp;lt;/math&amp;gt;, n=1&lt;br /&gt;
# Policy Evaluation:  For each &amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt;, compute: &amp;lt;math&amp;gt;V^{\Pi}_{n+1}(s) = R(s,\Pi(s)) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s,\Pi(s))V^{\Pi}_n(s&#039;)   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
# If &amp;lt;math&amp;gt;| V_{n+1} - V_n | &amp;lt; \varepsilon     &lt;br /&gt;
 &amp;lt;/math&amp;gt;,  the optimal value function, &amp;lt;math&amp;gt;V^*     &lt;br /&gt;
 &amp;lt;/math&amp;gt; has been determined, continue to next step, otherwise return to step 2 and increment n by 1.&lt;br /&gt;
# Policy Update: For each &amp;lt;math&amp;gt;s \epsilon S&amp;lt;/math&amp;gt;, compute: &amp;lt;math&amp;gt;\Pi_{n+1}(s) = argmax_a [R(s,\Pi_n(s)) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s,\Pi_n(s))V^{\Pi}_n(s&#039;)]    &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
# If  &amp;lt;math&amp;gt;\Pi_{n+1} = \Pi_n      &lt;br /&gt;
 &amp;lt;/math&amp;gt; ,the algorithm has converged and the optimal policy, &amp;lt;math&amp;gt;\Pi^*     &lt;br /&gt;
 &amp;lt;/math&amp;gt; has been determined, otherwise return to step 2 and increment n by 1.&lt;br /&gt;
&lt;br /&gt;
With each iteration the optimal policy is improved using the previous policy and value function until the algorithm converges and the optimal policy is found.&lt;br /&gt;
&lt;br /&gt;
= Numerical Example =&lt;br /&gt;
[[File:Markov Decision Process Example 2.png|alt=|thumb|499x499px|A Markov Decision Process describing a college student&#039;s hypothetical situation.]]&lt;br /&gt;
As an example, the MDP can be applied to a college student, depicted to the right. In this case, the agent would be the student. The states would be the circles and squares in the diagram, and the arrows would be the actions. The action between work and school is leave work and go to school. In the state that the student is at school, the allowable actions are to go to the bar, enjoy their hobby, or sleep. The probabilities assigned to each state given the previous state and action in this example is 1. The rewards associated with each state are written in red.&lt;br /&gt;
&lt;br /&gt;
Assume &amp;lt;math&amp;gt;P(s&#039;|s) = 1.0&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;\gamma    &lt;br /&gt;
 &amp;lt;/math&amp;gt; =1.&lt;br /&gt;
&lt;br /&gt;
First, the optimal value functions must be calculated for each state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^{*}(s) = max_a [R(s, a) + \gamma \sum_{s&#039; \epsilon S}P(s&#039; | s, a)V^*(s&#039;)]    &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^{*}(Hobby) = max_a [3 + (1)(1.0*0)] = 3     &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^{*}(Bar) = max_a [2 + 1(1.0*0)] = 2     &lt;br /&gt;
 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^*(Sleep) = max_a[0 + 1(1.0*0)] = 0   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^*(School) =  max_a[ -2 + 1(1.0*2)  , -2 + 1(1.0*0) , -2 + 1(1.0*3)] = 1   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^*(YouTube) = max_a[-1 + 1(1.0*-1) , -1 +1(1.0*1)]= 0    &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V^*(Work) = max_a[1 + 1(1.0*0) , 1 + 1(1.0*1)] = 2   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the optimal policy at each state will choose the action that generates the highest value function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi^*(s) = argmax_a [R(s,a) + \gamma \sum_{s&#039; \epsilon S}P_{ss&#039;}^aV(s&#039;)]   &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi^*(YouTube) = argmax_a [0,2] \rightarrow a =    &lt;br /&gt;
 &amp;lt;/math&amp;gt; Work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi^*(Work) = argmax_a [0,1] \rightarrow a =    &lt;br /&gt;
 &amp;lt;/math&amp;gt; School&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Pi^*(School) = argmax_a [0,2,3] \rightarrow a =    &lt;br /&gt;
 &amp;lt;/math&amp;gt; Hobby&lt;br /&gt;
&lt;br /&gt;
Therefore, the optimal policy in each state provides a sequence of decisions that generates the optimal path sequence in this decision process. As a results, if the student starts in state Work, he/she should choose to go to school, then to enjoy their hobby, then go to sleep.&lt;br /&gt;
&lt;br /&gt;
= Applications =&lt;br /&gt;
[[File:Pong.jpg|thumb|Computer playing Pong arcade game by Atari using reinforcement learning]]&lt;br /&gt;
MDPs have been applied in various fields including operations research, electrical engineering, computer science, manufacturing, economics, finance, and telecommunication.&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; For example, the sequential decision making process described by MDP can be used to solve routing problems such as the [[Traveling salesman problem]]. In this case, the agent is the salesman, the actions available are the routes available to take from the current state, the rewards in this case are the costs of taking each route, and the goal is to determine the optimal policy that minimizes the cost function over the duration of the trip. Another application example is maintenance and repair problems, in which a dynamic system such as a vehicle will deteriorate over time due to its actions and the environment, and the available decisions at every time epoch is to do nothing, repair, or replace a certain component of the system.&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; This problem can be formulated as an MDP to choose the actions that to minimize cost of maintenance over the life of the vehicle. MDPs have also been applied to optimize telecommunication protocols, stock trading, and queue control in manufacturing environments. &amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Given the significant advancements in artificial intelligence and machine learning over the past decade, MDPs are being applied in fields such as robotics, automated systems, autonomous vehicles, and other complex autonomous systems. MDPs have been used widely within reinforcement learning to teach robots or other computer-based systems how to do something they were previously were unable to do. For example, MDPs have been used to teach a computer how to play computer games like Pong, Pacman, or AlphaGo.&amp;lt;math&amp;gt;^{7,8}&amp;lt;/math&amp;gt;  DeepMind Technologies, owned by Google, used the MDP framework in conjunction with neural networks to play Atari games better than human experts. &amp;lt;math&amp;gt;^7&amp;lt;/math&amp;gt; In this application, only the raw pixel input of the game screen was used as input, and a neural network was used to estimate the value function for each state, and choose the next action.&amp;lt;math&amp;gt;^7&amp;lt;/math&amp;gt; MDPs have been used in more advanced applications to teach a simulated human robot how to walk and run and a real legged-robot how to walk.&amp;lt;math&amp;gt;^9&amp;lt;/math&amp;gt;  &lt;br /&gt;
[[File:Google Deepmind.jpg|thumb|Google&#039;s DeepMind uses reinforcement learning to teach AI how to walk]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
&lt;br /&gt;
A MDP is a stochastic, sequential decision-making method based on the Markov Property. MDPs can be used to make optimal decisions for a dynamic system given information about its current state and its environment. This process is fundamental in reinforcement learning applications and a core method for developing artificially intelligent systems. MDPs have been applied to a wide variety of industries and fields including robotics, operations research, manufacturing, economics, and finance.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Puterman, M. L. (1990). Chapter 8 Markov decision processes. In &#039;&#039;Handbooks in Operations Research and Management Science&#039;&#039; (Vol. 2, pp. 331–434). Elsevier. &amp;lt;nowiki&amp;gt;https://doi.org/10.1016/S0927-0507(05)80172-0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Feinberg, E. A., &amp;amp; Shwartz, A. (2012). &#039;&#039;Handbook of Markov Decision Processes: Methods and Applications&#039;&#039;. Springer Science &amp;amp; Business Media.&lt;br /&gt;
# Howard, R. A. (1960). &#039;&#039;Dynamic programming and Markov processes.&#039;&#039; John Wiley.&lt;br /&gt;
# Ashraf, M. (2018, April 11). &#039;&#039;Reinforcement Learning Demystified: Markov Decision Processes (Part 1)&#039;&#039;. Medium. &amp;lt;nowiki&amp;gt;https://towardsdatascience.com/reinforcement-learning-demystified-markov-decision-processes-part-1-bf00dda41690&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Bertsekas, D. P. (2011). Dynamic Programming and Optimal Control 3rd Edition, Volume II. &#039;&#039;Massachusetts Institue of Technology&#039;&#039;, 233.&lt;br /&gt;
# Littman, M. L. (2001). Markov Decision Processes. In N. J. Smelser &amp;amp; P. B. Baltes (Eds.), &#039;&#039;International Encyclopedia of the Social &amp;amp; Behavioral Sciences&#039;&#039; (pp. 9240–9242). Pergamon. &amp;lt;nowiki&amp;gt;https://doi.org/10.1016/B0-08-043076-7/00614-8&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Mnih, V., Kavukcuoglu, K., Silver, D., Graves, A., Antonoglou, I., Wierstra, D., &amp;amp; Riedmiller, M. (2013). Playing Atari with Deep Reinforcement Learning. &#039;&#039;ArXiv:1312.5602 [Cs]&#039;&#039;. &amp;lt;nowiki&amp;gt;http://arxiv.org/abs/1312.5602&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Silver, D., Hubert, T., Schrittwieser, J., Antonoglou, I., Lai, M., Guez, A., Lanctot, M., Sifre, L., Kumaran, D., Graepel, T., Lillicrap, T., Simonyan, K., &amp;amp; Hassabis, D. (2018). A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play. &#039;&#039;Science&#039;&#039;, &#039;&#039;362&#039;&#039;(6419), 1140–1144. &amp;lt;nowiki&amp;gt;https://doi.org/10.1126/science.aar6404&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Ha, S., Xu, P., Tan, Z., Levine, S., &amp;amp; Tan, J. (2020). Learning to Walk in the Real World with Minimal Human Effort. &#039;&#039;ArXiv:2002.08550 [Cs]&#039;&#039;. &amp;lt;nowiki&amp;gt;http://arxiv.org/abs/2002.08550&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Bellman, R. (1966). Dynamic Programming. &#039;&#039;Science&#039;&#039;, &#039;&#039;153&#039;&#039;(3731), 34–37. &amp;lt;nowiki&amp;gt;https://doi.org/10.1126/science.153.3731.34&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Abbeel, P. (2016). &#039;&#039;Markov Decision Processes and Exact Solution Methods:&#039;&#039; 34.&lt;br /&gt;
# Silver, D. (2015). Markov Decision Processes. &#039;&#039;Markov Processes&#039;&#039;, 57.&lt;br /&gt;
&amp;lt;span title=&amp;quot;url_ver=Z39.88-2004&amp;amp;ctx_ver=Z39.88-2004&amp;amp;rfr_id=info%3Asid%2Fzotero.org%3A2&amp;amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;amp;rft.genre=article&amp;amp;rft.atitle=Lecture%202%3A%20Markov%20Decision%20Processes&amp;amp;rft.jtitle=Markov%20Processes&amp;amp;rft.aufirst=David&amp;amp;rft.aulast=Silver&amp;amp;rft.au=David%20Silver&amp;amp;rft.pages=57&amp;amp;rft.language=en&amp;quot; class=&amp;quot;Z3988&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Network_flow_problem&amp;diff=2727</id>
		<title>Network flow problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Network_flow_problem&amp;diff=2727"/>
		<updated>2020-12-21T11:33:32Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Aaron Wheeler, Chang Wei, Cagla Deniz Bahadir, Ruobing Shui, Ziqiu Zhang (ChemE 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Network flow problems arise in several key instances and applications within society and have become fundamental problems within computer science, operations research, applied mathematics, and engineering. Developments in the approach to tackle these problems resulted in algorithms that became the chief instruments for solving problems related to large-scale systems and industrial logistics. Spurred by early developments in linear programming, the methods for addressing these extensive problems date back several decades and they evolved over time as the use of digital computing became increasingly prevalent in industrial processes. Historically, the first instance of an algorithmic development for the network flow problem came in 1956, with the network simplex method formulated by George Dantzig.&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; A variation of the simplex algorithm that revolutionized linear programming, this method leveraged the combinatorial structure inherent to these types of problems and demonstrated incredibly high accuracy.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; This method and its variations would go on to define the embodiment of the algorithms and models for the various and distinct network flow problems discussed here.&lt;br /&gt;
&lt;br /&gt;
== Theory, Methodology, and Algorithms ==&lt;br /&gt;
The network flow problem can be conceptualized as a directed graph which abides by flow capacity and conservation constraints. The vertices in the graph are classified into origins (source &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;), destinations (sink &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;), and intermediate points and are collectively referred to as nodes (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;). These nodes are different from one another such that &amp;lt;math&amp;gt;N_i \neq X,O,\ldots N_j&amp;lt;/math&amp;gt;.&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt; The edges in the directed graph are the directional links between nodes and are referred to as arcs (&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;). These arcs are defined with a specific direction &amp;lt;math&amp;gt;(i, j)&amp;lt;/math&amp;gt; that corresponds to the nodes they are connecting.  The arcs &amp;lt;math&amp;gt;A\subseteq (i,j)&amp;lt;/math&amp;gt; are also defined by a specific flow capacity &amp;lt;math&amp;gt;c(A)&amp;gt;0&amp;lt;/math&amp;gt; that cannot be exceeded. The supply and demand of units &amp;lt;math&amp;gt;\Sigma_i u_i=0~for~i\in N&amp;lt;/math&amp;gt; are formulated by negative and positive flow notation, and are defined such that sources equate to positive values (supply) and sinks equate to negative values (demand). Intermediate nodes have no net supply or demand. Figure 1 illustrates this general definition of the network.&lt;br /&gt;
[[File:Picture1.png|thumb|Figure 1. General Network Flow Problem]]&lt;br /&gt;
&lt;br /&gt;
Additional constraints of the network flow optimization model place limits on the solution and vary significantly based on the specific type of problem being solved. Historically, the classic network flow problems are considered to be the maximum flow problem and the minimum-cost circulation problem, the assignment problem, bipartite matching problem, transportation problem, and the transshipment problem.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; The approach to these problems become quite specific based upon the problem’s objective function but can be generalized by the following iterative approach: 1. determining the initial basic feasible solution; 2. checking the optimality conditions (i.e. whether the problem is infeasible, unbounded over the feasible region, optimal solution has been found, etc.); and 3. constructing an improved basic feasible solution if the optimal solution has not been determined.&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
=== General Applications ===&lt;br /&gt;
&lt;br /&gt;
==== The Assignment Problem ====&lt;br /&gt;
Various real-life instances of assignment problems exist for optimization, such as assigning a group of people to different tasks, events to halls with different capacities, rewards to a team of contributors, and vacation days to workers. All together, the assignment problem is a bipartite matching problem in the kernel. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt; In a classical setting, two types of objects of equal amount are  bijective (i.e. they have one-to-one matching), and this tight constraint ensures a perfect matching. The objective is to minimize the cost or maximize the profit of matching, since different items of two types have distinct affinity.  [[File:Assignment.png|thumb|Figure 2. Classic model of assignment problem|alt=|267x267px]]A classic example is as follows: suppose there are &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; people (set &amp;lt;math&amp;gt; P &amp;lt;/math&amp;gt;) to be assigned to &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; tasks (set &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;). Every task has to be completed and each task has to be handled by only one person, and &amp;lt;math&amp;gt; c_{ij} &amp;lt;/math&amp;gt;, usually given by a table, measures the benefits gained by assigning the person &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; (in &amp;lt;math&amp;gt; P &amp;lt;/math&amp;gt;) to the task &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; (in &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;). &amp;lt;sup&amp;gt;[4]&amp;lt;/sup&amp;gt; The natural objective here is to maximize the overall benefits by devising the optimal assignment pattern. A graph of the general assignment problem and a table of preference are depicted as Figure 2 and Table 2.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+Table 1. Table of preference&lt;br /&gt;
!Benefits&lt;br /&gt;
!Task 1&lt;br /&gt;
! Task 2&lt;br /&gt;
!Task 3&lt;br /&gt;
!...&lt;br /&gt;
!Task n&lt;br /&gt;
|-&lt;br /&gt;
!Person 1&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|...&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
!Person 2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|...&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
!Person 3&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|...&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
!...&lt;br /&gt;
|...&lt;br /&gt;
|...&lt;br /&gt;
|...&lt;br /&gt;
|...&lt;br /&gt;
|...&lt;br /&gt;
|-&lt;br /&gt;
!Person n&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|...&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
Figure 2 can be viewed as a network. The nodes represent people and tasks, and the edges represent potential assignments between a person and a task. Each task can be completed by any person. However, the person that actually ends up being assigned to the task will be the lone individual who is best suited to complete. In the end, the edges with positive flow values will be the only ones represented in the finalized assignment. &amp;lt;sup&amp;gt;[5]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To approach this problem, the binary variable &amp;lt;math&amp;gt; x_{ij} &amp;lt;/math&amp;gt; is defined as whether the person &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; is assigned to the task &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;. If so, &amp;lt;math&amp;gt; x_{ij} &amp;lt;/math&amp;gt; = 1, and &amp;lt;math&amp;gt; x_{ij} &amp;lt;/math&amp;gt; = 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
The concise-form formulation of the problem is as follows &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
max   &amp;lt;math&amp;gt;z=\sum_{i=1}^n\sum_{j=1}^n c_{ij}x_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{j=1}^n x_{ij}=1~~\forall i\in [1,n]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{I=1}^n x_{ij}=1~~\forall j\in [1,n]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij}=0~or~1~~\forall i,j\in [1,n] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first constraint captures the requirement of assigning each person  to a single task. The second constraint indicates that each task must be done by exactly one person. The objective function sums up the overall benefits of all assignments.&lt;br /&gt;
&lt;br /&gt;
To see the analogy between the assignment problem and the network flow, we can describe each person supplying a flow of 1 unit and each task demanding a flow of 1 unit, with the benefits over all “channels” being maximized. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A potential issue lies in the branching of the network, specifically an instance where a person splits its one unit of flow into multiple tasks and the objective remains maximized. This shortcoming is allowed by the laws that govern the network flow model, but are unfeasible in real-life instances. Fortunately, since the network simplex method only involves addition and subtraction of a single edge while transferring the basis, which is served by the spanning tree of the flow graph, if the supply (the number of people here) and the demand (the number of tasks here) in the constraints are integers, the solved variables will be automatically integers even if it is not explicitly stated in the problem. This is called the integrality of the network problem, and it certainly applies to the assignment problem. &amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== The Transportation Problem ====&lt;br /&gt;
People first came up with the transportation problem when distributing troops during World War II. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt; Now, it has become a useful model for solving logistics problems, and the objective is usually to minimize the cost of transportation. &lt;br /&gt;
&lt;br /&gt;
Consider the following scenario:&lt;br /&gt;
&lt;br /&gt;
There are 2 chemical plants located in 2 different places: &amp;lt;math&amp;gt; M &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; N &amp;lt;/math&amp;gt;. There are  3 raw material suppliers in other 3 locations: &amp;lt;math&amp;gt; F &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; G &amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt; H &amp;lt;/math&amp;gt;. The amount of materials from a supplier can be arbitrarily divided into two parts and shipped to two factories. Supplier &amp;lt;math&amp;gt; F &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; G &amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt; H &amp;lt;/math&amp;gt; can provide &amp;lt;math&amp;gt; S_1 &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; S_2 &amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt; S_3 &amp;lt;/math&amp;gt; amounts of materials respectively. The chemical plants located at &amp;lt;math&amp;gt; M &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; N &amp;lt;/math&amp;gt; have the material demand of &amp;lt;math&amp;gt; D_1 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; D_2 &amp;lt;/math&amp;gt; respectively. Each transportation route, from suppliers to chemical plants, is attributed with a specific cost. This model raises the question: to keep the chemical plants running, what is the best way to arrange the material from the suppliers so that the transportation cost could be minimized? &lt;br /&gt;
[[File:Transportation problem example.png|thumb|Figure 3. Transportation problem example]]&lt;br /&gt;
Several quantities should be defined to help formulate the frame of the solution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S_{i} &lt;br /&gt;
&amp;lt;/math&amp;gt; = the amount of material provided at the supplier &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D_{j} &lt;br /&gt;
&amp;lt;/math&amp;gt; = the amount of material being consumed at the chemical plant &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; = the amount of material being transferred from supplier &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; to chemical plant &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; = the cost of transferring 1 unit of material from supplier &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; to chemical plant &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;C_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; = the cost of the material transportation from &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, the amount of material being delivered and being consumed is bound to the supply and demand constraints:&lt;br /&gt;
&lt;br /&gt;
(1): The amount of material shipping from supplier &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; cannot exceed the amount of material available at supplier &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_j^n x_{ij}\ \leq S_{i} \qquad \forall i\in I=[1,m] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2): The amount of material arrived at chemical plant &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; should at least fulfill the demand at chemical plant &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_i^m x_{ij}\ \geq D_{j} \qquad \forall j\in J=[1,n] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The objective is to find the minimum cost of transportation, so the cost of each transportation line should be added up, and the total cost should be minimized. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_i^m \sum_j^n x_{ij}\ C_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the definitions above, the problem can be formulated as such:&lt;br /&gt;
&lt;br /&gt;
min&amp;lt;math&amp;gt;  \quad z = \sum_i^m \sum_j^n x_{ij}\ C_{ij}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. \quad\ \sum_j^n x_{ij}\ \leq S_{i} \qquad \forall i\in I=[1,m] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_i^m x_{ij}\ \geq D_{j} \qquad \forall j\in J=[1,n] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, the problem is not complete at this point because there is no constraint for &amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt;, and that means &amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; can be any number, even negative. In order for &amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; to make sense physically, a lower bound of zero is mandatory, which corresponds to the situation where no material was transported from &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;. Adding the last constraint will complete this formulation as such:&lt;br /&gt;
&lt;br /&gt;
min&amp;lt;math&amp;gt;  \quad z = \sum_i^m \sum_j^n x_{ij}\ C_{ij}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. \quad\ \sum_j^n x_{ij}\ \leq S_{i} \qquad \forall i\in I=[1,m] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_i^m x_{ij}\ \geq D_{j} \qquad \forall j\in J=[1,n] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij}\ \geq 0 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem and the formulation is adapted from Chapter 8 of the book: Applied Mathematical Programming by Bradley, Hax and Magnanti. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== The Shortest-Path Problem ====&lt;br /&gt;
The shortest-path problem can be defined as finding the path that yields the shortest total distance between the origin and the destination. Each possible stop is a node and the paths between these nodes are edges incident to these nodes, where the path distance becomes the weight of the edges. In addition to being the most common and straightforward application for finding the shortest path, this model is also used in various applications depending on the definition of nodes and edges. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt; For example, when each node represents a different object and the edge specifies the cost of replacement, the equipment replacement problem is derived. Moreover, when each node represents a different project and the edge specifies the relative priority, the model becomes a project scheduling problem.&lt;br /&gt;
[[File:Shortest-Path.png|thumb|443x443px|Figure 4. General form of shortest-path problem]]&lt;br /&gt;
A graph of the general shortest-path problem is depicted as Figure 4:&lt;br /&gt;
&lt;br /&gt;
In the general form of the shortest-path problem, the variable &amp;lt;math&amp;gt; x_{ij} &amp;lt;/math&amp;gt; represents whether the edge &amp;lt;math&amp;gt; (i,j) &amp;lt;/math&amp;gt; is active (i.e. with a positive flow), and the parameter &amp;lt;math&amp;gt; c_{ij} &amp;lt;/math&amp;gt;  (e.g. &amp;lt;math&amp;gt; c_{12} &amp;lt;/math&amp;gt; = 6) defines the distance of the edge &amp;lt;math&amp;gt; (i,j) &amp;lt;/math&amp;gt;. The general problem is formulated as below:&lt;br /&gt;
&lt;br /&gt;
min   &amp;lt;math&amp;gt;z=\sum_{i=1}^n \sum_{j=1}^n c_{ij}x_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{j=1}^n x_{ij} - \sum_{k=1}^n x_{ki} = \begin{cases} 1 &amp;amp; \text{if }i=s\text{ (source)} \\ 0 &amp;amp; \text{otherwise} \\ -1 &amp;amp; \text{if }i=t \text{ (sink)} \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij}\geq 0~~\forall (i,j)\in E&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first term of the constraint is the total outflow of the node i, and the second term is the total inflow. So, the formulation above could be seen as one unit of flow being supplied by the origin, one unit of flow being demanded by the destination, and no net inflow or outflow at any intermediate nodes. These constraints mandate a flow of one unit, amounting to the active path, from the origin to the destination. Under this constraint, the objective function minimizes the overall path distance from the origin to the destination.&lt;br /&gt;
&lt;br /&gt;
Similarly, the integrality of the network problem applies here, precluding the unreasonable fractioning. With supply and demand both being integer (one here), the edges can only have integer amount of flow in the result solved by simplex method. &amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition, the point-to-point model above can be further extended to other problems. A number of real life scenarios require visiting multiple places from a single starting point. This “Tree Problem” can be modeled by making small adjustments to the original model. In this case, the source node should supply more units of flow and there will be multiple sink nodes demanding one unit of flow. Overall, the objective and the constraint formulation are similar. &amp;lt;sup&amp;gt;[4]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maximal Flow Problem ====&lt;br /&gt;
This problem describes a situation where the material from a source node is sent to a sink node. The source and sink node are connected through multiple intermediate nodes, and the common optimization goal is to maximize the material sent from the source node to the sink node. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the following scenario:&lt;br /&gt;
[[File:Picture2.png|thumb|Figure 5. Maximal flow problem example]]&lt;br /&gt;
The given structure is a piping system. The water flows into the system from the source node, passing through the intermediate nodes, and flows out from the sink node. There is no limitation on the amount of water that can be used as the input for the source node. Therefore, the sink node can accept an unlimited amount of water coming into it. The arrows denote the valid channel that water can flow through, and each channel has a known flow capacity. What is the maximum flow that the system can take?&lt;br /&gt;
&lt;br /&gt;
Several quantities should be defined to help formulate the frame of the solution: &lt;br /&gt;
[[File:Picture3.png|thumb|Figure 6. For every intermediate node j, there is a group of node i and a group of node k.]]&lt;br /&gt;
For any intermediate node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; in the system, it receives water from adjacent node(s) &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt;, and sends water to the adjacent node(s) &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;. The node &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and k are relative to the node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; = the node(s) that gives water to node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; = the intermediate node(s) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; = the node(s) that receives the water coming out of node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{ij} &lt;br /&gt;
&amp;lt;/math&amp;gt; = amount of water leaving node &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and entering node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt;   (&amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; are adjacent nodes)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{jk} &lt;br /&gt;
&amp;lt;/math&amp;gt; = amount of water leaving node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; and entering node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;   (&amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; are adjacent nodes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the source and sink node, they have net flow that is non-zero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;m&lt;br /&gt;
&amp;lt;/math&amp;gt; = source node&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;n&lt;br /&gt;
&amp;lt;/math&amp;gt; = sink node&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{in} &lt;br /&gt;
&amp;lt;/math&amp;gt; = amount of water leaving node &amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and entering sink node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;n&lt;br /&gt;
&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i &lt;br /&gt;
&amp;lt;/math&amp;gt; and &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;n&lt;br /&gt;
&amp;lt;/math&amp;gt; are adjacent nodes)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{mk} &lt;br /&gt;
&amp;lt;/math&amp;gt; = amount of water leaving source node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;m&lt;br /&gt;
&amp;lt;/math&amp;gt; and entering node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;m&lt;br /&gt;
&amp;lt;/math&amp;gt; and &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; are adjacent nodes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Flow capacity definition is applied to all nodes (including intermediate nodes, the sink, and the source):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_{ab} &lt;br /&gt;
&amp;lt;/math&amp;gt; = transport capacity between any two nodes &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;a&lt;br /&gt;
&amp;lt;/math&amp;gt; and &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;b&lt;br /&gt;
&amp;lt;/math&amp;gt; (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;a&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; \neq&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;b&lt;br /&gt;
&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main constraints for this problem are the transport capacity between each node and the material conservation:&lt;br /&gt;
&lt;br /&gt;
(1): The amount of water flowing from any node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;a&lt;br /&gt;
&amp;lt;/math&amp;gt; to node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;b&lt;br /&gt;
&amp;lt;/math&amp;gt; should not exceed the flow capacity between node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;a&lt;br /&gt;
&amp;lt;/math&amp;gt; to node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;b&lt;br /&gt;
&amp;lt;/math&amp;gt; . &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;0\leq x_{ab} \leq C_{ab}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2): The intermediate node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; does not hold any water, so the amount of water that flows into node &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;j &lt;br /&gt;
&amp;lt;/math&amp;gt; has to exit the node with the exact same amount it entered with. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_i^px_{ij}- \sum_k^r x_{jk} =0&lt;br /&gt;
\qquad \begin{cases} \forall i\in I=[1,p] \\ \forall j\in J=[1,q]\\ \forall k\in K=[1,r] \end{cases} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overall, the net flow out of the source node has to be the same as the net flow into the sink node. This net flow is the amount that should be maximized. &lt;br /&gt;
&lt;br /&gt;
Using the definitions above:&lt;br /&gt;
[[File:Picture4.png|thumb|Figure 7. The imaginary flow connects the sink node to the source node, creating a close loop.]]&lt;br /&gt;
min&amp;lt;math&amp;gt;  \quad z = \sum_k^r x_{uk}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;      (or &amp;lt;math&amp;gt;\sum_i^p x_{iv}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. \quad\ \sum_i^px_{ij}- \sum_k^r x_{jk} =0&lt;br /&gt;
\qquad \begin{cases} \forall i\in I=[1,p] \\ \forall j\in J=[1,q]\\ \forall k\in K=[1,r] \end{cases} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;0\leq x_{ab} \leq C_{ab}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This expression can be further simplified by introducing an imaginary flow from the sink to the source. &lt;br /&gt;
&lt;br /&gt;
By introducing this imaginary flow, the piping system is now closed. The mass conservation constraint now also holds for the source and sink node, so they can be treated as the intermediate nodes. The problem can be rewritten as the following:  &lt;br /&gt;
&lt;br /&gt;
min&amp;lt;math&amp;gt;  \quad z = x_{vu}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. \quad\ \sum_i^px_{ij}- \sum_k^r x_{jk} =0&lt;br /&gt;
\qquad \begin{cases} \forall i\in I=[1,p] \\ \forall j\in J=[1,q+2]\\ \forall k\in K=[1,r] \end{cases} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;0\leq x_{ab} \leq C_{ab}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem and the formulation are derived from an example in Chapter 8 of the book: Applied Mathematical Programming by Bradley, Hax and Magnanti. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algorithms ===&lt;br /&gt;
&lt;br /&gt;
==== Ford–Fulkerson Algorithm ====&lt;br /&gt;
A broad range of network flow problems could be reduced to the max-flow problem. The most common way to approach the max-flow problem in polynomial time is the Ford-Fulkerson Algorithm (FFA). FFA is essentially a greedy algorithm and it iteratively finds the augmenting s-t path to increase the value of flow. The pathfinding terminates until there is no s-t path present. Ultimately, the max-flow pattern in the network graph will be returned. &amp;lt;sup&amp;gt;[8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typically, FFA is applied to flow networks with only one source node s and one sink node t. In addition, the capacity conditions and the conservation conditions, which are two properties defining the flow, must be satisfied.&amp;lt;sup&amp;gt;[9]&amp;lt;/sup&amp;gt; The capacity conditions require that each edge carry a flow that is no more than its capacity, or &amp;lt;math&amp;gt;0\leq f(e)\leq c_{e},\forall e\in E&amp;lt;/math&amp;gt;, where function f returns the flow on a certain edge. The conservation conditions require all nodes except the source and the sink to have a net flow of 0, or ,&amp;lt;math&amp;gt;\sum_{e~into~v}f(v)= \sum_{e~out~of~v}f(v),\forall v\in V-{s,t} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
FFA introduces the concept of residue graph based on the original graph &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; to allow backtracking, or pushing backward on edges that are already carrying flow.&amp;lt;sup&amp;gt;[9]&amp;lt;/sup&amp;gt; The residue graph &amp;lt;math&amp;gt;G_{f} &amp;lt;/math&amp;gt;is defined as the following:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;G_{f}&amp;lt;/math&amp;gt;has exactly the same node set as &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. For each edge &amp;lt;math&amp;gt;e = (u,v)&amp;lt;/math&amp;gt;with a nonnegative flow &amp;lt;math&amp;gt; f( e)&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;G_{f}&amp;lt;/math&amp;gt;has the edge e with the capacity &amp;lt;math&amp;gt;c(e)_{f} = c_{e} - f(e)&amp;lt;/math&amp;gt;, and also &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt; has the edge &amp;lt;math&amp;gt;e&#039; = (v,u)&amp;lt;/math&amp;gt; with the capacity &amp;lt;math&amp;gt;c(e&#039;)_{f} = f(e)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that initially, the &amp;lt;math&amp;gt;G_{f} &amp;lt;/math&amp;gt; is identical to &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; since there is no flow present in &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The steps of FFA are as below. &amp;lt;sup&amp;gt;[10]&amp;lt;/sup&amp;gt; Essentially, the method repeatedly finds a path with positive flow in the residue graph, and updates the flow graph and residue graph until &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; become disjoint in the residue graph.&lt;br /&gt;
&lt;br /&gt;
1. Set &amp;lt;math&amp;gt;f(e) = 0, \forall e\in E&amp;lt;/math&amp;gt;in &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;, and create a copy as &amp;lt;math&amp;gt;G_{f}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. While there is still a &amp;lt;math&amp;gt;s, t&amp;lt;/math&amp;gt; path &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G_{f}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  a. Find &amp;lt;math&amp;gt;c_{f}(p) = min(c_{f}(e):e\in p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  b. For each edge &amp;lt;math&amp;gt;e\in p&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
    bi. &amp;lt;math&amp;gt;f(e) = f(e) + c_{f}(p)&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;e\in E&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;f(e) = f(e) - c_{f}(p)&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;e&#039;\in E&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    bii. &amp;lt;math&amp;gt;c(e)= c(e) - c_{f}(p),c(e&#039;)= c(e&#039;) + c_{f}(p)&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt; G_{f}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Phase 1.png|thumb|Figure 8: Flow graph and residue graph at the first phase]]&lt;br /&gt;
An example of running the FFA is as below.&lt;br /&gt;
The flow graph &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; and residue graph&amp;lt;math&amp;gt;G_{f}&amp;lt;/math&amp;gt; at the initial phase is depicted in Figure 8, where the number of each edge in the flow graph is the flow units on the edge, whereas it is the updated edge capacity in the residue graph.&lt;br /&gt;
&lt;br /&gt;
In the residue graph, an &amp;lt;math&amp;gt;s-t&amp;lt;/math&amp;gt; path can be found in the residue graph tracing the edge &amp;lt;math&amp;gt;s\rightarrow A\rightarrow B\rightarrow t&amp;lt;/math&amp;gt; with the flow of two units. After augmenting the path on both graphs, the flow graph and the residue graph look like the Figure 9.&lt;br /&gt;
&lt;br /&gt;
[[File:Phase 2.png|thumb|Figure 9: Flow graph and residue graph after updating with the first s,t-path]]&lt;br /&gt;
&lt;br /&gt;
At this stage, there is still &amp;lt;math&amp;gt;s,t&amp;lt;/math&amp;gt;-path in the residue graph &amp;lt;math&amp;gt;s\rightarrow B\rightarrow A\rightarrow t&amp;lt;/math&amp;gt; with a flow of one unit. After augmenting the path on both graphs, the flow graph and the residue graph look like the Figure 10.&lt;br /&gt;
&lt;br /&gt;
[[File:Phase 3.png|thumb|Figure 10: Flow graph and residue graph after augmenting with the second s,t-path]]&lt;br /&gt;
&lt;br /&gt;
At this stage, there is no more &amp;lt;math&amp;gt;s,t&amp;lt;/math&amp;gt;-path in the residue graph, so FFA terminates and the maximum flow can be read from the flow graph as 3 units.&lt;br /&gt;
&lt;br /&gt;
== Numerical Example and Solution ==&lt;br /&gt;
&lt;br /&gt;
A Food Distributor Company is farming and collecting vegetables from farmers to later distribute to the grocery stores. The distributor has specific agreements with different third-party companies to mediate the delivery to the grocery stores. In a particular month, the company has 600 ton vegetables to deliver to the grocery store. They have agreements with two third-party transport companies A and B, which have different tariffs for delivering goods between themselves, the distributor, and the grocery store. They also have limits on transport capacity for each path. These delivery points are numbered as shown below, with path 1 being the transport from the Food Distributor Company to the transport company A. The limits and tariffs for each path can be found in the Table 2 below, and the possible transportation connections between the distributor company, the third-party transporters, and the grocery store are shown in the figure below. The distributor companies cannot hold any amount of food, and any incoming food should be delivered to an end point. The distributor company wants to minimize the overall transport cost of shipping 600 tons of vegetables to the grocery store by choosing the optimal  path  provided by the transport companies. How should the distributor company map out their path and the amount of vegetables carried on each path to minimize cost overall?&lt;br /&gt;
[[File:Wiki example.png|thumb|Figure. 11. Illustration of the network for the food distribution problem.]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 2. Product Limits and Tariffs for each Path&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Product limit (ton)&lt;br /&gt;
|250&lt;br /&gt;
|450&lt;br /&gt;
|350&lt;br /&gt;
|200&lt;br /&gt;
|300&lt;br /&gt;
|500&lt;br /&gt;
|-&lt;br /&gt;
|Tariff ($/ton)&lt;br /&gt;
|10&lt;br /&gt;
|12.5&lt;br /&gt;
|5&lt;br /&gt;
|7.5&lt;br /&gt;
|10&lt;br /&gt;
|20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This question is adapted from one of the exercise questions in chapter 8 of the book: Applied Mathematical Programming by Bradley, Hax and Magnanti &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Formulation of the Problem ===&lt;br /&gt;
The problem can be formulated as below where variables &amp;lt;math&amp;gt;x_1, x_2, x_3,..., x_6&amp;lt;/math&amp;gt; denote the tons of vegetables carried in paths 1 to 6. The objective function stated in the first line is to minimize the cost of the operation, which is the summation of the tons of vegetables carried on each path multiplied by the corresponding tariff: &amp;lt;math&amp;gt;\sum_{i=1}^6 x_i t_i&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{array}{lcl} \min z = 10x_1 + 12.5x_2 + 5x_3 + 7.5x_4 + 10x_5 + 20x_6 \\ s.t.  \qquad x_5 = x_1 - x_3 + x_4 \\  \ \ \  \quad \qquad x_6 = x_2 + x_3 - x_4 \\  \ \ \  \quad \qquad x_5 + x_6 = 600  \\   \ \ \  \quad \qquad x_1 + x_2 = 600 \\   \ \ \  \quad \qquad  x_1 \leq 250 \\   \ \ \  \quad \qquad x_2 \leq 450 \\   \ \ \  \quad \qquad x_3 \leq 350 \\   \ \ \  \quad \qquad x_4 \leq 200 \\   \ \ \  \quad \qquad  x_5 \leq 300 \\   \ \ \  \quad \qquad x_6 \leq 500 \\   \ \ \  \quad \qquad x_1, x_2, x_3, x_4, x_5, x_6 \geq 0\\\end{array}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The second step is to write down the constraints. The first constraint ensures that the net amount present in the Transport Company A, which is the deliveries received from path 1 and path 2 minus the transport to Transport Company B should be delivered to the grocery store with path 5. The second constraint ensures this for the Transport Company B. The third and fourth constraints are ensuring that the total amount of vegetables shipping from the Food Distributor Company and the total amount of vegetables delivered to the grocery store are both 600 tons. The constraints 5 to 10 depict the upper limits of the amount of vegetables that can be carried on paths 1 to 6. The final constraint depicts that all variables are non-negative. &lt;br /&gt;
&lt;br /&gt;
=== Solution of the Problem ===&lt;br /&gt;
This problem can be solved using Simplex Algorithm&amp;lt;sup&amp;gt;[11]&amp;lt;/sup&amp;gt; or with the CPLEX Linear Programming solver in GAMS optimization platform. The steps of the solution using the GAMS platform is as follows:&lt;br /&gt;
&lt;br /&gt;
The first step is to list the variables, which are the tons of vegetables that will be transported in routes 1 to 6. The paths can be denoted as&amp;lt;math&amp;gt;x_1, x_2, x_3,..., x_6&amp;lt;/math&amp;gt; . The objective function is the overall cost: z.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;variables x1,x2,x3,x4,x5,x6,z;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The second step is to list the equations which are the constraints and the objective function. The objective function is a summation of the amount of vegetables carried in path i, multiplied with the tariff of path i for all i:  &amp;lt;math&amp;gt;\sum_{i=1}^6 x_i t_i&amp;lt;/math&amp;gt;. The GAMS code for the objective function is written below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj.. z=e= 10*x1+12.5*x2+5*x3+7.5*x4+10*x5+20*x6;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Overall, there are 10 constraints in this problem. The constraints 1, and 2 are equations for the paths 5 and 6. The amount carried in path 5 can be found by summing the amount of vegetables incoming to Transport Company A from path 1 and path 4, minus the amount of vegetables leaving Transport Company A with path 3. This can be attributed to the restriction that barrs the companies from keeping any vegetables and requires them to eventually deliver all the incoming produce. The equality 1 ensures that this constraint holds for path 5 and equation 2 ensures it for path 6. A sample of these constraints is written below for path 5:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;c1.. x5 =e=x1-x3+x4;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Constraint 3 ensures that the sum of vegetables carried in path 1 and path 2 add to the total of 600 tons of vegetables that leave the Food Distributor Company. Likewise, the constraint 4 ensures that the sum amount of food transported in paths 5 and 6 adds up to 600 tons of vegetables that have to be delivered to the grocery store. A sample of these constraints is written below for the total delivery to the grocery store:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;c3.. x5+x6=e=600;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Constraints 5 to 10 should ensure that the amount of food transported in each path should not exceed the maximum capacity depicted in the table. A sample of these constraints is written below for the capacity of path 1:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;c5.. x1=l=250;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After listing the variables, objective function and the constraints, the final step is to call the CPLEX solver and set the type of the optimization problem as &#039;&#039;&#039;lp&#039;&#039;&#039; (linear programming). In this case the problem will be solved with a Linear Programming algorithm to minimize the objective (cost) function.&lt;br /&gt;
&lt;br /&gt;
The GAMS code yields the results below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;x1 = 250, x2 = 350, x3 = 0, x4 = 50, x5 = 300, x6 = 300, z =16250.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Real Life Applications ==&lt;br /&gt;
Network problems have many applications in all kinds of areas such as transportation, city design, resource management and financial planning.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are several special cases of network problems, such as the shortest path problem, minimum cost flow problem, assignment problem and transportation problem.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt; Three application cases will be introduced here.&lt;br /&gt;
&lt;br /&gt;
=== The Minimum Cost Flow Problem ===&lt;br /&gt;
[[File:Pic8.jpg|thumb|Figure. 12. Illustration of the ship subnetwork.&amp;lt;sub&amp;gt;[14]&amp;lt;/sub&amp;gt;]]&lt;br /&gt;
[[File:Pic9.jpg|thumb|Figure. 13. Illustration of cargo subnetwork.&amp;lt;sub&amp;gt;[14]&amp;lt;/sub&amp;gt;]]&lt;br /&gt;
Minimum cost flow problems are pervasive in real life, such as deciding how to allocate temporal quay crane in container terminals, and how to make optimal train schedules on the same railroad line.&amp;lt;sup&amp;gt;[12]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R. Dewil and his group use MCNFP to assist traffic enforcement.&amp;lt;sup&amp;gt;[13]&amp;lt;/sup&amp;gt; Police patrol “hot spots”, which are areas where crashes occur frequently on highways. R. Dewil studies a method intended to estimate the optimal route of hot spots. He describes the time it takes to move the detector to a certain position as the cost, and the number of patrol cars from one node to next as the flow, in order to minimize the total cost.&amp;lt;sup&amp;gt;[13]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The Assignment Problem ===&lt;br /&gt;
Dung-Ying Lin studies an assignment problem in which he aims to assign freights to ships and arrange transportation paths along the Northern Sea Route in a manner which yields maximum profit.&amp;lt;sup&amp;gt;[14]&amp;lt;/sup&amp;gt; Within this network  composed of a ship subnetwork and a cargo subnetwork( shown as Figure 12 and Figure 13), each node corresponds to a port at a specific time and each arc represents the movement of a ship or a cargo. Other types of assignment problems are faculty scheduling, freight assignment, and so on.&lt;br /&gt;
&lt;br /&gt;
=== The Shortest Path Problem ===&lt;br /&gt;
Shortest path problems are also present in many fields, such as transportation, 5G wireless communication, and implantation of the global dynamic routing scheme.&amp;lt;sup&amp;gt;[15][16][17]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qiang Tu and his group studies the constrained reliable shortest path (CRSP) problem for electric vehicles in the urban transportation network. &amp;lt;sup&amp;gt;[15]&amp;lt;/sup&amp;gt; He describes the reliable travel time of path as the objective item, which is made up of planning travel time of path and the reliability item. The group studies the Chicago sketch network consisting of 933 nodes and 2950 links and the Sioux Falls network consisting of 24 nodes and 76 links. The results show that the travelers’ risk attitudes and properties of electric vehicles in the transportation network can have a great influence on the path choice.&amp;lt;sup&amp;gt;[15]&amp;lt;/sup&amp;gt; The study can contribute to the invention of the city navigation system.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Since its inception, the network flow problem has provided humanity with a straightforward and scalable approach for several large-scale challenges and problems. The Simplex algorithm and other computational optimization platforms have made addressing these problems routine, and have greatly expedited efforts for groups concerned with supply-chain and other distribution processes. The formulation of this problem has had several derivations from its original format, but its overall methodology and approach have remained prevalent in several of society’s industrial and commercial processes, even over half a century later. Classical models such as the assignment, transportation, maximal flow, and shortest path problem configurations have found their way into diverse settings, ranging from streamlining oil distribution networks along the gulf coast to arranging optimal scheduling assignments for college students amidst a global pandemic. All in all, the network flow problem and its monumental impact, have made it a fundamental tool for any group that deals with combinatorial data sets. And with the surge in adoption of data-driven models and applications within virtually all industries, the use of the network flow problem approach will only continue to drive innovation and meet consumer demands for the foreseeable future.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. Karp, R. M. (2008). [https://www.sciencedirect.com/science/article/pii/S1572528607000370/ George Dantzig’s impact on the theory of computation]. Discrete Optimization, 5(2), 174-185.&lt;br /&gt;
&lt;br /&gt;
2. Goldberg, A. V. Tardos, Eva, Tarjan, Robert E. (1989). [http://www.cs.cornell.edu/~eva/Network.Flow.Algorithms.pdf/ Network Flow Algorithms, Algorithms and Combinatorics]. 9. 101-164.&lt;br /&gt;
&lt;br /&gt;
3. Bradley, S. P. Hax, A. C., &amp;amp; Magnanti, T. L. (1977). Network Models. [http://web.mit.edu/15.053/www/AMP.htm/ Applied mathematical programming] (p. 259). Reading, MA: Addison-Wesley.&lt;br /&gt;
&lt;br /&gt;
4. Chinneck, J. W. (2006). [https://www.optimization101.org/ Practical optimization: a gentle introduction. Systems and Computer Engineering]. Carleton University, Ottawa. 11.&lt;br /&gt;
&lt;br /&gt;
5. Roy, B. V. Mason, K.(2005). [https://web.stanford.edu/~ashishg/msande111/notes/chapter5.pdf/ Formulation and Analysis of Linear Programs, Chapter 5 Network Flows].&lt;br /&gt;
&lt;br /&gt;
6. Vanderbei, R. J. (2020). [https://www.springer.com/gp/book/9781461476306/ Linear programming: foundations and extensions (Vol. 285)]. Springer Nature.&lt;br /&gt;
&lt;br /&gt;
7. Sobel, J. (2014). [https://econweb.ucsd.edu/~jsobel/172aw02/notes8.pdf/ Linear Programming Notes VIII: The Transportation Problem].&lt;br /&gt;
&lt;br /&gt;
8. Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001). &amp;quot;Section 26.2: The Ford–Fulkerson method&amp;quot;. Introduction to Algorithms (Second ed.). MIT Press and McGraw–Hill.&lt;br /&gt;
&lt;br /&gt;
9. Jon Kleinberg; Éva Tardos (2006). &amp;quot;Chapter 7: Network Flow&amp;quot;. Algorithm Design. Pearson Education.&lt;br /&gt;
&lt;br /&gt;
10. [https://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm/ Ford–Fulkerson algorithm]. Retrieved December 05, 2020.&lt;br /&gt;
&lt;br /&gt;
11. Hu, G. (2020, November 19). [https://optimization.cbe.cornell.edu/index.php?title=Simplex_algorithm#cite_note-11/ Simplex algorithm]. Retrieved November 22, 2020.&lt;br /&gt;
&lt;br /&gt;
12. Altınel, İ. K., Aras, N., Şuvak, Z., &amp;amp; Taşkın, Z. C. (2019). [https://www.sciencedirect.com/science/article/pii/S0166218X18304815/ Minimum cost noncrossing flow problem on layered networks]. Discrete Applied Mathematics, 261, 2-21.&lt;br /&gt;
&lt;br /&gt;
13. Dewil, R., Vansteenwegen, P., Cattrysse, D., &amp;amp; Van Oudheusden, D. (2015). [https://core.ac.uk/download/pdf/34613916.pdf/ A minimum cost network flow model for the maximum covering and patrol routing problem]. European Journal of Operational Research, 247(1), 27-36.&lt;br /&gt;
&lt;br /&gt;
14. Lin, D. Y., &amp;amp; Chang, Y. T. (2018). [https://www.sciencedirect.com/science/article/pii/S1366554517308037/ Ship routing and freight assignment problem for liner shipping: Application to the Northern Sea Route planning problem]. Transportation Research Part E: Logistics and Transportation Review, 110, 47-70.&lt;br /&gt;
&lt;br /&gt;
15. Tu, Q., Cheng, L., Yuan, T., Cheng, Y., &amp;amp; Li, M. (2020). [https://www.sciencedirect.com/science/article/pii/S095965262031177X/ The Constrained Reliable Shortest Path Problem for Electric Vehicles in the Urban Transportation Network]. Journal of Cleaner Production, 121130.&lt;br /&gt;
&lt;br /&gt;
16. Guo, Y., Li, S., Jiang, W., Zhang, B., &amp;amp; Ma, Y. (2017). [https://dl.acm.org/doi/abs/10.1016/j.phycom.2017.06.010/ Learning automata-based algorithms for solving the stochastic shortest path routing problems in 5G wireless communication]. Physical Communication, 25, 376-385.&lt;br /&gt;
&lt;br /&gt;
17. Haddou, N. B., Ez-Zahraouy, H., &amp;amp; Rachadi, A. (2016). [https://www.infona.pl/resource/bwmeta1.element.elsevier-2eaa73bc-4e22-39aa-89b9-71ef2d7e2d63/ Implantation of the global dynamic routing scheme in scale-free networks under the shortest path strategy]. Physics Letters A, 380(33), 2513-2517.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Matrix_game_(LP_for_game_theory)&amp;diff=2726</id>
		<title>Matrix game (LP for game theory)</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Matrix_game_(LP_for_game_theory)&amp;diff=2726"/>
		<updated>2020-12-21T11:32:34Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: David Oswalt (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Game Theory and Linear Programming ==&lt;br /&gt;
[[File:JohnOskar.png|thumb|John von Neumann (1903–1957) and Oskar Morgenstern (1902–1977)]]&lt;br /&gt;
Game theory is a formal language for modeling and analyzing the interactive behaviors of intelligent, rational decision-makers (or players). Game theory provides the mathematical methods necessary to analyze the decisions of two or more players based on their preferences to determine a final outcome. The theory was first conceptualized by mathematician Ernst Zermelo in the early 20th century. However, John von Neumann pioneered modern game theory through his book Theory of Games and Economic Behavior, written alongside co-author Oskar Morgenstern. For this reason, John von Neumann is often credited by historians as the Father of Game Theory.&amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt; This theory has provided a framework for approaching complex, high-pressure situations and has a broad spectrum of applications. These applications of game theory have helped shape modern economics and social sciences as we know them today and are discussed in the Applications section below. &lt;br /&gt;
&lt;br /&gt;
Analyzing game theoretic situations is a practical application of linear programming. These situations can get quite complex mathematically, but one of the simplest forms of game is called the Finite Two-Person Zero-Sum Game (or Matrix Game for short). In a Matrix Game, two players are involved in a competitive situation in which one player’s loss is the other’s gain. Some common terms related to the Matrix Game that will be used throughout this chapter have been defined below:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Game&#039;&#039;&#039; – Any social situation involving two or more individuals.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Players&#039;&#039;&#039; – The individuals involved in a game. In the case of two-person zero-sum games, these players are assumed to be rational and intelligent.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Rationality&#039;&#039;&#039; – A decision maker is considered to be rational if he or she makes decisions consistently in pursuit of his or her own objectives. Assuming a player to be rational implies that said player’s objective is to maximize his or her own payoff.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Utility&#039;&#039;&#039; – The scale upon which a decision’s payoff is measured.&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analyzing these games uses John von Neumann’s Minimax Theorem that was derived using the Brouwer Fixed-Point Theorem. However, over time it was proven that the Matrix Game could be solved using Linear Programming along with the Duality Theorem.&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt; This solution to the Matrix game has been proven in the Theory and Algorithmic Discussion section below.&lt;br /&gt;
&lt;br /&gt;
== Theory and Algorithmic Discussion ==&lt;br /&gt;
Consider a simple two-player zero-sum matrix game called Evens and Odds. In this game, two players each wager $1 before simultaneously showing either one or two fingers. If the sum of the fingers showing is even, player 1 wins the pot for that round ($2). If the sum of the fingers showing is odd, player 2 wins the pot for that round. As with all matrix games, the assumption that both players are rational and intelligent decision makers with the goal of maximizing their own total payoff in each round applies. The expected utility for each player can be defined using a payoff matrix, &#039;&#039;P&#039;&#039;. In this payoff matrix, the rows and columns represent the decisions of player 1 and player 2 respectively. The below payoff matrix represents the payoff to player 1 in this matrix game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P=\begin{bmatrix} 2 &amp;amp; -2 \\ -2 &amp;amp; 2 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rows of this payoff matrix indicate the decision made by player 1, and the columns indicate the decision made by player 2. If player 1 puts up one finger (first row) and player 2 puts up 1 finger (first column), then player 1 wins $2. In this example, since each player has an equal ½ probability of throwing one or two fingers, neither player has a distinct advantage. Consider now a less-trivial game where the payoff matrix is no longer evenly distributed, shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P=\begin{bmatrix} 1 &amp;amp; -2 \\ -3 &amp;amp; 2 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While it may be intuitive that player 2 has the edge in this new game, making this determination is not as clear for much more complicated games. This is where the mathematics behind game theory comes into play. Consider a more general form of a two-person zero-sum game where two players are allowed to pick from a finite set of actions. Let &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; represent the finite number of actions that player one (or the “row player”) can choose from and &amp;lt;math&amp;gt;i  &amp;lt;/math&amp;gt; represent the action selected, or &amp;lt;math&amp;gt;i= 1,2,...,n &amp;lt;/math&amp;gt;&#039;&#039;.&#039;&#039; Likewise, let &amp;lt;math&amp;gt;m &amp;lt;/math&amp;gt; represent the finite number of actions that player two (or the “column player”) can choose from and &amp;lt;math&amp;gt;j &amp;lt;/math&amp;gt; represent the action selected, or &amp;lt;math&amp;gt;j= 1,2,...,m &amp;lt;/math&amp;gt;. The general form of the payoff matrix for a matrix game is now shown below. Note that all positive payments go to the row player and all negative payments go to the column player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P = [p_{ij}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we assume that each player is making a random selection in accordance with a fixed probability distribution. This probability distribution is defined by what is called the &#039;&#039;stochastic vector,&#039;&#039; &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;. Each component of the stochastic vector, &amp;lt;math&amp;gt;y_i &amp;lt;/math&amp;gt;, denotes the probability that the row player selects action &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. This stochastic vector is made up of nonnegative probabilities that sum up to one per the fundamental law of probability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y \geq 0 \text{     and     } e^Ty=1, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where e is a vector of all ones. Likewise, the stochastic vector for the column player can be defined as &amp;lt;math&amp;gt;x &amp;lt;/math&amp;gt;, with the probabilities that this player selects action &amp;lt;math&amp;gt;j &amp;lt;/math&amp;gt; denoted by&amp;lt;math&amp;gt;x_j &amp;lt;/math&amp;gt;. To compute the expected payoff to the column player, the payoff from each outcome &amp;lt;math&amp;gt;(i,j) &amp;lt;/math&amp;gt; for all   &amp;lt;math&amp;gt;i = 1,2,...,n &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;j= 1,2,...,m &amp;lt;/math&amp;gt; times the probability of that outcome are summed. Thus, the column player’s expected payoff is defined as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{i,j}y_ia_{ij}x_j = y^T Px&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since we have assumed that our column player acts rationally, we can expect them to act in accordance with the stochastic vector x. In other words, the column player has adopted strategy x. The row player’s best option for defending against strategy x is to adopt strategy y*, in which they act to minimize the column player’s payout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~ y^TPx\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ e^Ty=1 \\&lt;br /&gt;
&amp;amp; ~~ y \geq 0 \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By assuming that our column player acts intelligently, this implies that they are aware of the row player’s strategy to minimize their payoff. Hence, the column player can employ strategy x* that maximizes their payoff given the row player’s strategy y* with the following maximum:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max_{x} \min_{y} y^T Px&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The above equation can be solved by reformulating it as a linear program. By taking the inner optimization over the deterministic strategies, this equation can be re-written as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ \text{min}_i e_i ^T Px\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ \sum_{j=1}^n x_{j} = 1\\&lt;br /&gt;
&amp;amp; ~~  x_j \geq 0 &amp;amp; ~~ j = 1, 2, ..., n \\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to put a lower bound on the minimization term, a new variable &#039;&#039;v&#039;&#039; is introduced. This gives us the following linear program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ v\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ v \leq e_i^T Px &amp;amp; ~~ i = 1, 2, ..., m\\&lt;br /&gt;
&amp;amp; ~~  \sum_{j=1}^n = 1 \\&lt;br /&gt;
&amp;amp; ~~  x_j \geq 0 &amp;amp; ~~ j = 1, 2, ..., n \\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in vector notation,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ v\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ ve-Px \leq 0\\&lt;br /&gt;
&amp;amp; ~~  e^T x =1\\&lt;br /&gt;
&amp;amp; ~~  x \geq 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above max-min linear program governs the column player’s strategy x*. We can use this linear program to determine the row player’s strategy y* by taking the duel to yield a min-max linear program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\min_{x} \max_{y} y^T Px&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly to the max-min linear program used for the column player’s strategy, the above equation can be reformulated into a linear program by taking the inner optimization over the deterministic strategies and introducing a new variable u:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ u\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ ue-P^Ty \leq 0\\&lt;br /&gt;
&amp;amp; ~~  e^T y =1\\&lt;br /&gt;
&amp;amp; ~~  y \geq 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These linear programs can be solved to find the optimal strategies &amp;lt;math&amp;gt;x*&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y*&amp;lt;/math&amp;gt;. The Minimax Theorem can now be used to verify that both solutions are consistent with one another. The Minimax Theorem states that there exist stochastic vectors &amp;lt;math&amp;gt;x*&amp;lt;/math&amp;gt;and &amp;lt;math&amp;gt;y*&amp;lt;/math&amp;gt;for which&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max_{x} y^{*T} Px = \min_{y} y^T Px^*&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to prove the Minimax Theorem, we first consider the fact that&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;v^* = \min_{i} e_i ^T Px^* = \min_{y} y^T Px*,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u* = \max_{j} e_j ^T P^T y^* = \max_{x} x^T P^T y* = \max_{x} y^{*T}Px&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the max-min linear program for x* and the min-max linear program for y* are duals of one another, we can assume that v* = u*. Therefore,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max_{x} y^{*T} Px = \min_{y} y^T Px^*&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By solving the above equation for the optimal values v* = u* yields what is called the value of the game. The value of a game shows how much utility each player can expect to gain or lose on average. In the event that v* = u* = 0, the game is considered to be fair, meaning neither player has a distinct disadvantage. In order to illustrate the power of the minimax theorem in solving matrix games, a numerical example has been provided in the section below.&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
Many decisions made in sports can be modeled as finite two-person zero-sum games. Take, for example, a common dilemma seen in American football. The offense has driven down the field and is just a few short yards of scoring. The team has four plays, or &#039;&#039;downs&#039;&#039;, to score. On the third down, the team gets stopped by the defense and is unable to score, leaving only one more play to make it happen. There are two options for scoring. The first is a field goal, in which the team kicks the ball through the uprights for 3 points. The second option is to run a passing or running play for a touchdown, worth 7 points. This is often referred to as a “Fourth and Goal” situation and is a dilemma that play-callers face in most football games. While the option of scoring a touchdown yields a higher payoff, it is a much risker option as running and passing plays are easier to defend against than a field goal. For this reason, football coaches often settle on kicking a field goal on 4&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; down instead of going for it. This anticlimactic end to a long and exciting drive often leaves fans with an unsatisfying feeling, knowing that their team was only a few yards from scoring a touchdown. While kicking the field goal nearly guarantees 3 points, is it smarter to employ a more aggressive strategy and go for the touchdown? Game theory can help determine the strategy that will yield the highest amount of points on average over time.&lt;br /&gt;
&lt;br /&gt;
There are a few assumptions to be made in order to model this Fourth and Goal Dilemma. The first is that both football teams are ideal. What this means is that if the offense chooses a run play and the defense chooses to defend a run play, then the run will be stopped with zero yards gained. It also means that if the offense chooses a run play and the defense incorrectly chooses to defend a passing play, then the play will be successful with a touchdown scored. We are also assuming that if the offense chooses to kick a field goal, then it is guaranteed to be successful. This is assumed due to the fact that field goals from just a few yards out are very rarely missed. The final assumption is that all other factors contributing to play calling are neglected. This could include situations such as the offense being down 2 points with only a few seconds on the clock, when a field goal for 3 points would be the obvious best strategy. With this strategy in mind, a the payoff to the offense can be outlined as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+4th and Goal Dilemma Payoff&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Defense&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!Run  &lt;br /&gt;
!Pass &lt;br /&gt;
!FG    &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;Offense&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Run&#039;&#039;&#039;&lt;br /&gt;
| 0&lt;br /&gt;
|7&lt;br /&gt;
|7&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
|7&lt;br /&gt;
| 0&lt;br /&gt;
|7&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;FG&#039;&#039;&#039;&lt;br /&gt;
|3&lt;br /&gt;
|3&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
The above payoff table can also be depicted by the following payoff matrix, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, where the columns represent the defensive team&#039;s actions and the rows represent the offensive team&#039;s actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P = \begin{bmatrix} 0 &amp;amp; 7 &amp;amp; 7 \\ 7 &amp;amp; 0 &amp;amp; 7 \\ 3 &amp;amp; 3 &amp;amp; 3 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to determine their optimal strategy, the offense must solve the below linear program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~ w \\&lt;br /&gt;
\text{s.t.} &amp;amp; ~~ \begin{bmatrix} 0 &amp;amp; 7 &amp;amp; 7 &amp;amp; 1 \\ 7 &amp;amp; 0 &amp;amp; 7 &amp;amp; 1\\ 3 &amp;amp; 3 &amp;amp; 3 &amp;amp; 1\\ 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{bmatrix} \begin{bmatrix} x_1  \\ x_2 \\ x_3 \\ w  \end{bmatrix} \begin{matrix} \geq \\ \geq \\ \geq \\ = \end{matrix} \begin{bmatrix} 0  \\ 0 \\ 0 \\ w  \end{bmatrix} \\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above linear program has been solved using a concrete model with the GLPK solver package in &#039;&#039;Pyomo&#039;&#039;, a Python-based computational optimization modeling language. The solution shows that the the offense should adopt the following strategy to maximize the amount of points scored on average over time:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^* = \begin{bmatrix} 0.50  \\ 0.50 \\ 0 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the stochastic vector &amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt;defined above, the value of the game can be computed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w^* = 3.5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that if the offense runs a pass play 50% of the time, runs a running play 50% of the time and never chooses to kick the field goal, they can expect a payout of at least 3.5 points on average over time. This scenario, while vastly oversimplified, demonstrates the power of applying linear programming to determine optimal strategies in finite two-person zero-sum games. It also demonstrates that it pays dividends to make aggressive play-calling decisions in sports such as football.&lt;br /&gt;
&lt;br /&gt;
== Other Applications of the Matrix Game ==&lt;br /&gt;
The rise of game theory spanned the time frame in which both World War I and World War II occurred, so naturally one of the earliest applications was in developing winning military strategies. Game theory was used to make high-pressure decisions on attack and defense strategies that optimized their impact within a set of constraints. The Battle of Bismarck Sea between Japanese and American forces in 1943 is one of the most historic examples of game theory in this context. In this battle, the US Air Force analyzed an attack situation using a two-person zero-sum game to maximize the amount of time they had to bomb a Japanese naval fleet, given the limited information they had about the convoy’s route. This demonstrates the fact that the word “game” in “game theory” can be misleading. Not all applications of game theory are fun games and many applications can have serious consequences. &lt;br /&gt;
&lt;br /&gt;
One of the other earlier applications of game theory was in economics. This ended up growing into one of the more significant applications of game theory and has formed modern economics as we know it today. The theory played a major role in the development of many sub-disciplines of economics, such as industrial organization, international trade, labor economics, and macroeconomics.&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; As game theory matured, its applications expanded into various fields of social science, including political science, international relations, philosophy, sociology and anthropology. It is also used in biology and computer science. To this day, economics remains the most prominent application of game theory.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Situations modeled as finite two-person zero-sum games, or &#039;&#039;Matrix Games,&#039;&#039; tend to be oversimplified and not have much practical use. However, solving matrix games using linear programming is merely an introduction into the power of analyzing stochastic decision making using computational optimization methods. Game theory has revolutionized the world&#039;s approach to disciplines such as economics, war, intelligence, biology, computer science, political science and many more. The methods used to solve game theoretic models continue to evolve and will subsequently continue to change the way decision makers approach the world around us. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] Bonanno, Giacomo. &#039;&#039;Game Theory&#039;&#039;. 2nd ed., CreateSpace Independent Publishing Platform, 2015.&lt;br /&gt;
&lt;br /&gt;
[2] Myerson, Roger B. &#039;&#039;Game Theory Analysis of Conflict&#039;&#039;. Harvard University Press, 2013.&lt;br /&gt;
&lt;br /&gt;
[3] Vanderbei, Robert J. &#039;&#039;Linear Programming: Foundations and Extensions&#039;&#039;. 2nd ed., Kluwer, 2004.&lt;br /&gt;
&lt;br /&gt;
[4] “Blog: Five Early AI Geniuses: John Von Neumann.” &#039;&#039;Tim McCloud&#039;&#039;, 19 June 2019, timmccloud.net/blog-5%E2%80%8A-%E2%80%8Aearly-ai-geniuses-john-von-neumann-and-chess/.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Optimization_with_absolute_values&amp;diff=2725</id>
		<title>Optimization with absolute values</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Optimization_with_absolute_values&amp;diff=2725"/>
		<updated>2020-12-21T11:31:56Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Matthew Chan (mdc297), Yilian Yin (yy896), Brian Amado (ba392), Peter Williams (pmw99), Dewei Xiao (dx58) (SysEn 5800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Absolute values can make it relatively difficult to determine the optimal solution when handled without first converting to standard form. This conversion of the objective function is a good first step in solving optimization problems with absolute values. As a result, one can go on to solve the problem using linear programing techniques. With the addition of a new variable (ex: &amp;lt;math&amp;gt;\textstyle X^a &amp;lt;/math&amp;gt;) in the objective function the problem is considered nonlinear. Additional constraints must be added to find the optimal solution.&lt;br /&gt;
&lt;br /&gt;
== Method ==&lt;br /&gt;
&lt;br /&gt;
=== Defining Absolute Values ===&lt;br /&gt;
An absolute value of a real number can be described as its distance away from zero, or the non-negative magnitude of the number. &amp;lt;ref&amp;gt; Mendelson, Elliott, Schaum&#039;s Outline of Beginning Calculus, McGraw-Hill Professional, 2008. https://books.google.com/books?id=A8hAm38zsCMC&amp;amp;pg=PA2#v=onepage&amp;amp;q&amp;amp;f=false &amp;lt;/ref&amp;gt; Thus,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\displaystyle |x|={\begin{cases}-x,&amp;amp;{\text{if }}x&amp;lt;0\\x,&amp;amp;{\text{if }}x\geq 0\end{cases}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Absolute values can exist in linear optimization problems in two primary instances: in constraints and in the objective function. &amp;lt;ref&amp;gt; &amp;quot;Absolute Values.&amp;quot; &#039;&#039;lp_solve&#039;&#039;, http://lpsolve.sourceforge.net/. Accessed 20 Nov. 2020. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Absolute Values in Constraints ===&lt;br /&gt;
Within constraints, absolute value relations can be transformed into one of the following forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
|X| &amp;amp;= 0 \\&lt;br /&gt;
|X| &amp;amp;\le C \\&lt;br /&gt;
|X| &amp;amp;\ge C&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;\textstyle X&amp;lt;/math&amp;gt; is a linear combination (&amp;lt;math&amp;gt;\textstyle ax_1 + bx_2 + ...&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;\textstyle a, b&amp;lt;/math&amp;gt; are constants) and &amp;lt;math&amp;gt;\textstyle C&amp;lt;/math&amp;gt; is a constant &amp;lt;math&amp;gt;\textstyle &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Form when &amp;lt;math&amp;gt;\displaystyle |X| = 0&amp;lt;/math&amp;gt; ====&lt;br /&gt;
In this form, the only possible solution is if &amp;lt;math&amp;gt;\displaystyle X = 0&amp;lt;/math&amp;gt; simplifying the constraint. Note that this solution also occurs if the constraint is in the form &amp;lt;math&amp;gt;\displaystyle |X| \le 0&amp;lt;/math&amp;gt; due to the same conclusion that the only possible solution is &amp;lt;math&amp;gt;\textstyle X = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Form when &amp;lt;math&amp;gt;\displaystyle |X| \le C&amp;lt;/math&amp;gt; ====&lt;br /&gt;
The second form a linear constraint can exist in is &amp;lt;math&amp;gt;\displaystyle |X|\leq C&amp;lt;/math&amp;gt;. In this case, an equivalent feasible solution can be described by splitting the constraint into two:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
X &amp;amp;\leq C \\&lt;br /&gt;
 -X &amp;amp;\leq C&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution can be understood visually since &amp;lt;math&amp;gt;\textstyle X&amp;lt;/math&amp;gt; must lie between &amp;lt;math&amp;gt;\textstyle -C&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\textstyle C&amp;lt;/math&amp;gt;, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:Number Line X Less Than C.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Form when &amp;lt;math&amp;gt;\displaystyle |X| \ge C&amp;lt;/math&amp;gt; ====&lt;br /&gt;
Visually, the solution space for the last form is the complement of the second solution above, resulting in the following representation:[[File:Number Line for X Greater Than C.png|none|thumb]]In expression form, the solutions can be written as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
X &amp;amp;\geq C \\&lt;br /&gt;
-X &amp;amp;\geq C&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen visually, the feasible region has a gap and thus non-convex. The expressions also make it impossible for both to simultaneously hold true. This means that it is not possible to transform constraints in this form to linear equations. &amp;lt;ref&amp;gt; &#039;&#039;Optimization Methods in Management Science / Operations Research.&#039;&#039; Massachusetts Institute of Technology, Spring 2013, https://ocw.mit.edu/courses/sloan-school-of-management/15-053-optimization-methods-in-management-science-spring-2013/tutorials/MIT15_053S13_tut04.pdf. Accessed 20 Nov. 2020. &amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An approach to reach a solution for this particular case exists in the form of Mixed-Integer Linear Programming, where only one of the equations above is “active”.&lt;br /&gt;
&lt;br /&gt;
The inequality can be reformulated into the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
&amp;amp;X + N*Y \ge C \\&lt;br /&gt;
-&amp;amp;X + N*(1-Y) \ge C \\&lt;br /&gt;
&amp;amp;Y = 0, 1 &lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this new set of constraints, a large constant &amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; is introduced, along with a binary variable &amp;lt;math&amp;gt;\textstyle Y&amp;lt;/math&amp;gt;. So long as &amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; is sufficiently larger than the upper bound of &amp;lt;math&amp;gt;\textstyle X + C&amp;lt;/math&amp;gt;, the large constant multiplied with the binary variable ensures that one of the constraints must be satisfied. For instance, if &amp;lt;math&amp;gt;\textstyle Y = 0&amp;lt;/math&amp;gt;, the new constraints will resolve to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
&amp;amp;X \ge C \\&lt;br /&gt;
-&amp;amp;X + N \ge C&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; is sufficiently large, the latter constraint will always be satisfied, leaving only one relation active: &amp;lt;math&amp;gt;\textstyle X \ge C&amp;lt;/math&amp;gt;. Functionally, this allows for the XOR logical operation of &amp;lt;math&amp;gt;\textstyle X \geq C&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\textstyle -X \geq C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Absolute Values in Objective Functions ===&lt;br /&gt;
In objective functions, to leverage transformations of absolute functions, all constraints must be linear.&lt;br /&gt;
&lt;br /&gt;
Similar to the case of absolute values in constraints, there are different approaches to the reformation of the objective function, depending on the satisfaction of sign constraints. The satisfaction of sign constraints is when the coefficient signs of the absolute terms must all be either:&lt;br /&gt;
&lt;br /&gt;
* Positive for a minimization problem&lt;br /&gt;
* Negative for a maximization problem&lt;br /&gt;
&lt;br /&gt;
==== Sign Constraints are Satisfied ====&lt;br /&gt;
At a high level, the transformation works similarly to the second case of absolute value in constraints – aiming to bound the solution space for the absolute value term with a new variable, &amp;lt;math&amp;gt;\textstyle Z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;\textstyle |X|&amp;lt;/math&amp;gt; is the absolute value term in our objective function, two additional constraints are added to the linear program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
&amp;amp;X\leq Z \\&lt;br /&gt;
-&amp;amp;X\leq Z &lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;math&amp;gt;\textstyle |X|&amp;lt;/math&amp;gt; term in the objective function is then replaced by &amp;lt;math&amp;gt;\textstyle Z&amp;lt;/math&amp;gt;, relaxing the original function into a collection of linear constraints.&lt;br /&gt;
&lt;br /&gt;
==== Sign Constraints are Not Satisfied ====&lt;br /&gt;
In order to transform problems where the coefficient signs of the absolute terms do not fulfill the conditions above, a similar conclusion is reached to that of the last case for absolute values in constraints – the use of integer variables is needed to reach an LP format. &lt;br /&gt;
&lt;br /&gt;
The following constraints need to be added to the problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
&amp;amp;X + N*Y \ge Z \\&lt;br /&gt;
-&amp;amp;X + N*(1-Y) \ge Z \\&lt;br /&gt;
&amp;amp;X \le Z \\&lt;br /&gt;
-&amp;amp;X \le Z \\&lt;br /&gt;
&amp;amp;Y = 0, 1&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, &amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; is a large constant, &amp;lt;math&amp;gt;\textstyle Z&amp;lt;/math&amp;gt; is a replacement variable for &amp;lt;math&amp;gt;\textstyle |X|&amp;lt;/math&amp;gt; in the objective function, and &amp;lt;math&amp;gt;\textstyle Y&amp;lt;/math&amp;gt; is a binary variable. The first two constraints ensure that one and only one constraint is active while the other will be automatically satisfied, following the same logic as above. The third and fourth constraints ensure that &amp;lt;math&amp;gt;\textstyle Z&amp;lt;/math&amp;gt; must be equal to &amp;lt;math&amp;gt;\textstyle |X|&amp;lt;/math&amp;gt; and has either a positive or negative value. For instance, for the case of &amp;lt;math&amp;gt;\textstyle Y = 0&amp;lt;/math&amp;gt;, the new constraints will resolve to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
&amp;amp;X \ge Z \\&lt;br /&gt;
-&amp;amp;X + N \ge Z \\&lt;br /&gt;
&amp;amp;X \le Z \\&lt;br /&gt;
-&amp;amp;X \le Z&lt;br /&gt;
\end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As &amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; is sufficiently large (&amp;lt;math&amp;gt;\textstyle N&amp;lt;/math&amp;gt; must be at least &amp;lt;math&amp;gt;\textstyle 2|X|&amp;lt;/math&amp;gt; for this approach), the second constraint must be satisfied. Since &amp;lt;math&amp;gt;\textstyle Z&amp;lt;/math&amp;gt; is non-negative, the fourth constraint must also be satisfied. The remaining constraints, &amp;lt;math&amp;gt;\textstyle X \ge Z&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\textstyle X \le Z&amp;lt;/math&amp;gt; can only be satisfied when &amp;lt;math&amp;gt;\textstyle Z = X&amp;lt;/math&amp;gt; and is of non-negative signage. Together, these constraints will allow for the selection of the largest &amp;lt;math&amp;gt;\textstyle |X|&amp;lt;/math&amp;gt; for maximization problems (or smallest for minimization problems).&lt;br /&gt;
&lt;br /&gt;
=== Absolute Values in Nonlinear Optimization Problems ===&lt;br /&gt;
The addition of a new variable &amp;lt;math&amp;gt; (X_a) &amp;lt;/math&amp;gt; to an objective function with absolute value quantities forms a nonlinear optimization problem. The absolute value quantities would require that the problem be reformatted before proceeding. Additional constraints must be added to account for the added variable.&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
&#039;&#039;&#039;Example when All Sign Constraints are Satisfied&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  \begin{align}&lt;br /&gt;
\min \quad &amp;amp;{2|x_1| + 3|x_2| + |x_3|}  \\&lt;br /&gt;
s.t. \quad &amp;amp;x_1 + 2x_2 - 3x_3 \le 8 \\&lt;br /&gt;
&amp;amp;2x_1 - x_2 + 4x_3= 14&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The absolute value quantities will be replaced with single variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_1| = U_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_2| = U_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_3| = U_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We must introduce additional constraints to ensure we do not lose any information by doing this substitution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; -U_1 \le x_1 \le U_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; -U_2 \le x_2 \le U_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; -U_3 \le x_3 \le U_3 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem has now been reformulated as a linear programming problem that can be solved normally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  \begin{align}&lt;br /&gt;
\min \quad &amp;amp;{ 2U_1 + 3U_2 + U_3}        \\&lt;br /&gt;
 s.t. \quad &amp;amp;x_1 + 2x_2 - 3x_3 \le 8 \\&lt;br /&gt;
&amp;amp;2x_1 - x_2 + 4x_3= 14          \\&lt;br /&gt;
-&amp;amp;U_1 \le x_1 \le U_1            \\&lt;br /&gt;
-&amp;amp;U_2 \le x_2 \le U_2           \\&lt;br /&gt;
-&amp;amp;U_3 \le x_3 \le U_3           &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimum value for the objective function is &amp;lt;math&amp;gt;3.5&amp;lt;/math&amp;gt;, which occurs when &amp;lt;math&amp;gt;x_1 = 0 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2 = 0 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_3 = 3.5 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example when Sign Constraints are not Satisfied&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  \begin{align}&lt;br /&gt;
\min \quad &amp;amp;{2|x_1| + 3|x_2| - |x_3|}  \\&lt;br /&gt;
s.t. \quad &amp;amp;x_1 + 2x_2 - 3x_3 \le 8 \\&lt;br /&gt;
&amp;amp;2x_1 - x_2 + 4x_3= 14&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The absolute value quantities will be replaced with single variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_1| = U_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_2| = U_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|x_3| = U_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We must introduce additional constraints to ensure we do not lose any information by doing this substitution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  \begin{align}&lt;br /&gt;
-&amp;amp;U_1 \le x_1 \le U_1 \\&lt;br /&gt;
-&amp;amp;U_2 \le x_2 \le U_2 \\&lt;br /&gt;
&amp;amp;x_3 + M*Y \ge U_3 \\&lt;br /&gt;
-&amp;amp;x_3 + M*(1-Y) \ge U_3 \\&lt;br /&gt;
&amp;amp;x_3 \le U_3 \\&lt;br /&gt;
-&amp;amp;x_3 \le U_3 \\&lt;br /&gt;
&amp;amp;Y = 0,1&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem has now been reformulated as a linear programming problem that can be solved normally:&lt;br /&gt;
&amp;lt;ref&amp;gt; Shanno, David F., and Roman L. Weil. “&#039;Linear&#039; Programming with Absolute-Value Functionals.” Operations Research, vol. 19, no. 1, 1971, pp. 120–124. Accessed 13 Dec. 2020. JSTOR, www.jstor.org/stable/168871. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  \begin{align}&lt;br /&gt;
\min \quad &amp;amp;{ 2U_1 + 3U_2 - U_3}        \\&lt;br /&gt;
s.t. \quad &amp;amp;x_1 + 2x_2 - 3x_3 \le 8   \\&lt;br /&gt;
&amp;amp;2x_1 - x_2 + 4x_3= 14          \\&lt;br /&gt;
-&amp;amp;U_1 \le x_1 \le U_1            \\&lt;br /&gt;
-&amp;amp;U_2 \le x_2 \le U_2           \\&lt;br /&gt;
&amp;amp;x_3 + M*Y \ge U_3             \\&lt;br /&gt;
-&amp;amp;x_3 + M*(1-Y) \ge U_3         \\&lt;br /&gt;
&amp;amp;x_3 \le U_3                     \\&lt;br /&gt;
-&amp;amp;x_3 \le U_3                    \\&lt;br /&gt;
&amp;amp;Y = 0,1 &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimum value for the objective function is &amp;lt;math&amp;gt;-3.5&amp;lt;/math&amp;gt;, which occur when &amp;lt;math&amp;gt;x_1 = 0 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_2 = 0 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_3 = 3.5 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consider the problem &amp;lt;math&amp;gt;Ax=b; \quad max \quad z= x c,jx,i&amp;lt;/math&amp;gt;. This problem cannot, in general, be solved with the simplex method. The problem has a simplex method solution (with unrestricted basis entry) only if c, are nonpositive (non-negative for minimizing problems).&lt;br /&gt;
&lt;br /&gt;
The primary application of absolute-value functionals in linear programming has been for absolute-value or L(i)-metric regression analysis. Such application is always a minimization problem with all C(j) equal to 1 so that the required conditions for valid use of the simplex method are met.  &lt;br /&gt;
&lt;br /&gt;
By reformulating the original problem into a Mixed-Integer Linear Program (MILP), we can utilize known programs to solve for the optimal solution(s). &lt;br /&gt;
&lt;br /&gt;
=== Application in Financial: Portfolio Selection===&lt;br /&gt;
Under this topic, the same tricks played in the Numerical Example section to perform &#039;&#039;&#039;Reduction to a Linear Programming Problem&#039;&#039;&#039; will be applied here again, to reform the problem into a MILP in order to solve the problem. An example is given as below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A portfolio is determined by what fraction of one&#039;s assets to put into each investment. &amp;lt;ref&amp;gt;  Vanderbei R.J. (2008) Financial Applications. In: Linear Programming. International Series in Operations Research &amp;amp; Management Science, vol 114. Springer, Boston, MA. &amp;lt;nowiki&amp;gt;https://doi.org/10.1007/978-0-387-74388-2_13&amp;lt;/nowiki&amp;gt; https://link.springer.com/chapter/10.1007/978-0-387-74388-2_13 &amp;lt;/ref&amp;gt; It can be denoted as a collection of nonnegative numbers &amp;lt;math&amp;gt;\textstyle x_j&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt; j = 1, 2,...,n &amp;lt;/math&amp;gt;. Because each &amp;lt;math&amp;gt; \textstyle x_j &amp;lt;/math&amp;gt;stands for a portion of the assets, it sums to one. In order to get a highest reward through finding a right mix of assets, let &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, the positive parameter, denote the importance of risk relative to the return, and &amp;lt;math&amp;gt;/textstyle Rj&amp;lt;/math&amp;gt; denote the return in the next time period on investment &amp;lt;math&amp;gt;j, j = 1, 2,..., n&amp;lt;/math&amp;gt;.  The total return one would obtain from the investment is &amp;lt;math&amp;gt;R = \sum_{j}\!x_j\!R_j &amp;lt;/math&amp;gt;. The expected return is &amp;lt;math&amp;gt;\mathbb{E}\!R = \sum_{j}\!x_j\mathbb{E}\!R_j &amp;lt;/math&amp;gt;.  And the Mean Absolute Deviation from the Mean (MAD) is &amp;lt;math&amp;gt;\mathbb{E}\left\vert \!R - \mathbb{E}\!R \right\vert =  \mathbb{E}\left\vert \sum_{j}\!x_j\tilde{R}_j  \right\vert &amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
maximize       &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\mu\sum_j\!x_j\mathbb{E}\!R_j - \mathbb{E}\left\vert  \sum_j \!x_j\tilde{R}_j  \right\vert &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
subject to     &amp;lt;math&amp;gt;\sum_j\!x_j = 1&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_j \geq 0&amp;lt;/math&amp;gt;  ,   &amp;lt;math&amp;gt; j  = 1,2,..n.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where          &amp;lt;math&amp;gt;\tilde{R}_j  = \!R_j - \mathbb{E}\!R_j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Very obviously, this problem is not a linear programming problem yet. Similar to the numerical example showed above, the right thing to do is to replace each absolute value with a new variable and  impose inequality constraints to ensure that the new variable is the appropriate absolute value once an optimal value is obtained. To simplify the program, an average of the historical returns can be taken in order to get the mean expected return:  &amp;lt;math&amp;gt;r_j = \mathbb{E}\!R_j = \left ( \frac{1}{T} \right ) \sum_{t=1}^T \!R_j(t)&lt;br /&gt;
&amp;lt;/math&amp;gt;. Thus the objective function is turned into: &amp;lt;math&amp;gt;\mu\sum_{j}\!x_j\!r_j - \left ( \frac{1}{T} \right ) \sum_{t=1}^T\left\vert \sum_{j} \!x_j \bigl(R_j (t) - \!r_j\bigr) \right\vert &lt;br /&gt;
 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, replace &amp;lt;math&amp;gt;\left\vert \sum_{j} \!x_j \bigl(R_j (t) - \!r_j\bigr) \right\vert &lt;br /&gt;
 &amp;lt;/math&amp;gt; with a new variable &amp;lt;math&amp;gt;y_t&lt;br /&gt;
&amp;lt;/math&amp;gt;and thus the problem can be rewrote as:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
maximize   &amp;lt;math&amp;gt;\mu \sum_j \!x_j\!r_j  -   \left ( \frac{1}{T} \right ) \sum_{t=1}^T \!y_t&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
subject to   &amp;lt;math&amp;gt;-\!y_t \leq  \sum_{j} \!x_j \bigl(R_j (t) - \!r_j\bigr) \leq y_t  &lt;br /&gt;
&amp;lt;/math&amp;gt;.    t = 1, 2,...,T&lt;br /&gt;
&lt;br /&gt;
where        &amp;lt;math&amp;gt;\sum_j \!x_j = 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_j\geq 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;.   j = 1, 2,...,n&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t \geq 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;.   t = 1, 2,...,T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So finally, after some simplifications methods and some tricks applied, the original problem is converted into a linear programming which is easier to be solved further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Data Transfer Rate===&lt;br /&gt;
Another application of optimization with absolute values is data transfer rate. Faster-than-nyquist, or FTNS, is a framework to transmit signals beyond the Nyquist rate. The refence to this section proposed a 24.7% faster symbol rate by utilizing Sum-of-Absolute-Values optimization. &amp;lt;ref&amp;gt;Sasahara, Hampei &amp;amp; Hayashi, Kazunori &amp;amp; Nagahara, Masaaki. (2016). Symbol Detection for Faster-Than-Nyquist Signaling by Sum-of-Absolute-Values Optimization. IEEE Signal Processing Letters. PP. 1-1. 10.1109/LSP.2016.2625839.  https://www.researchgate.net/publication/309745511_Symbol_Detection_for_Faster-Than-Nyquist_Signaling_by_Sum-of-Absolute-Values_Optimization &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial model is defined as follows:&lt;br /&gt;
&amp;lt;math&amp;gt;\displaystyle x_0 (t) = \sum^N_{n=1} x_{n,0} h_n (t), t \in [0,T] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where t ∈ R denotes the continuous time index, N ∈ N is the number of transmitted symbols in each transmission period, T &amp;gt; 0 is the interval of one period, &amp;lt;math&amp;gt;x_{n,0}&amp;lt;/math&amp;gt;  ∈ {+1, −1} are independent and identically distributed (i.i.d.) binary symbols [i.e., binary phase shift keying (BPSK)], and &amp;lt;math&amp;gt;h_n (t) (n = 1,...,N) &amp;lt;/math&amp;gt; are the modulation pulses.&lt;br /&gt;
&lt;br /&gt;
Reformulated as a convex optimization problem and repeating Newton’s method with absolute values, the solution approximates can be achieved:&lt;br /&gt;
&amp;lt;math&amp;gt;\displaystyle \min_{z \in R^N} (\lambda \Vert y - Hz \Vert^2_2 + \frac{1}{2} \Vert z - 1_N \Vert_1 + \frac{1}{2} \Vert z + 1_N \Vert_1 ) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The presence of an absolute value within the objective function prevents the use of certain optimization methods. Solving these problems requires that the function be manipulated in order to continue with linear programming techniques like the simplex method. The applications of optimization with absolute values range from the financial sector to the digital world where data transfer rates can be improved as well as improving portfolio returns. The way these problems are formulated, must take absolute values into account in order to model the problem correctly. The absolute values inherently make these problems non-linear so determining the most optimal solutions is only achievable after reformulating them into linear programs.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Interior-point_method_for_LP&amp;diff=2724</id>
		<title>Interior-point method for LP</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Interior-point_method_for_LP&amp;diff=2724"/>
		<updated>2020-12-21T11:31:15Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Tomas Lopez Lauterio, Rohit Thakur and Sunil Shenoy  (SysEn 5800 Fall 2020) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Linear programming problems seek to optimize linear functions given linear constraints. There are several applications of linear programming including inventory control, production scheduling, transportation optimization and efficient manufacturing processes. Simplex method has been a very popular method to solve these linear programming problems and has served these industries well for a long time. But over the past 40 years, there have been significant number of advances in different algorithms that can be used for solving these types of problems in more efficient ways, especially where the problems become very large scale in terms of variables and constraints.&amp;lt;ref&amp;gt; &amp;quot;Practical Optimization - Algorithms and Engineering Applications&amp;quot; by Andreas Antoniou and Wu-Sheng Lu, ISBN-10: 0-387-71106-6 &amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt; &amp;quot;Linear Programming - Foundations and Extensions - 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; edition&#039;&#039;&amp;quot; by Robert J Vanderbei, ISBN-113: 978-0-387-74387-5. &amp;lt;/ref&amp;gt; In early 1980s Karmarkar (1984) &amp;lt;ref&amp;gt; N Karmarkar, &amp;quot;A new Polynomial - Time algorithm for linear programming&amp;quot;, Combinatorica, VOl. 4, No. 8, 1984, pp. 373-395.&amp;lt;/ref&amp;gt; published a paper introducing interior point methods to solve linear-programming problems. A simple way to look at differences between simplex method and interior point method is that a simplex method moves along the edges of a polytope towards a vertex having a lower value of the cost function, whereas an interior point method begins its iterations inside the polytope and moves towards the lowest cost vertex without regard for edges. This approach reduces the number of iterations needed to reach that vertex, thereby reducing computational time needed to solve the problem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lagrange Function ===&lt;br /&gt;
Before getting too deep into description of Interior point method, there are a few concepts that are helpful to understand. First key concept to understand is related to Lagrange function. Lagrange function incorporates the constraints into a modified objective function in such a way that a constrained minimizer &amp;lt;math&amp;gt; (x^{*}) &amp;lt;/math&amp;gt; is connected to an unconstrained minimizer &amp;lt;math&amp;gt; \left \{x^{*},\lambda ^{*} \right \} &amp;lt;/math&amp;gt; for the augmented objective function &amp;lt;math&amp;gt; L\left ( x , \lambda  \right ) &amp;lt;/math&amp;gt;, where the augmentation is achieved with &amp;lt;math&amp;gt; &#039;p&#039; &amp;lt;/math&amp;gt; Lagrange multipliers. &amp;lt;ref&amp;gt; Computational Experience with Primal-Dual Interior Point Method for Linear Programming&#039;&#039;&amp;quot; by Irvin Lustig, Roy Marsten, David Shanno &amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt; &amp;quot;Practical Optimization - Algorithms and Engineering Applications&amp;quot; by Andreas Antoniou and Wu-Sheng Lu, ISBN-10: 0-387-71106-6 &amp;lt;/ref&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
To illustrate this point, consider a simple an optimization problem:&amp;lt;br&amp;gt;&lt;br /&gt;
minimize &amp;lt;math&amp;gt; f\left ( x \right ) &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
subject to: &amp;lt;math&amp;gt; A \cdot x = b &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
where, &amp;lt;math&amp;gt; A \, \in \, R^{p\, \times \, n} &amp;lt;/math&amp;gt; is assumed to have a full row rank&lt;br /&gt;
Lagrange function can be laid out as:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;L(x, \lambda ) = f(x) + \sum_{i=1}^{p}\lambda _{i}\cdot a_{i}(x)&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
where, &amp;lt;math&amp;gt; &#039;\lambda &#039; &amp;lt;/math&amp;gt; introduced in this equation is called Lagrange Multiplier. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Newton&#039;s Method ===&lt;br /&gt;
Another key concept to understand is regarding solving linear and non-linear equations using Newton&#039;s methods. &lt;br /&gt;
Assume an unconstrained minimization problem in the form: &amp;lt;br&amp;gt;&lt;br /&gt;
minimize &amp;lt;math&amp;gt; g\left ( x \right ) &amp;lt;/math&amp;gt; , where &amp;lt;math&amp;gt; g\left ( x \right ) &amp;lt;/math&amp;gt; is a real valued function with &amp;lt;math&amp;gt; &#039;n&#039; &amp;lt;/math&amp;gt; variables. &amp;lt;br&amp;gt;&lt;br /&gt;
A local minimum for this problem will satisfy the following system of equations:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\left [ \frac{\partial g(x)}{\partial x_{1}}  ..... \frac{\partial g(x)}{\partial x_{n}}\right ]^{T} = \left [ 0 ... 0 \right ]&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Newton&#039;s iteration looks like: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x^{k+1} = x^{k} -  \left [ \nabla ^{2} g(x^{k}) \right ]^{-1}\cdot \nabla g(x^{k})&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory and algorithm ==&lt;br /&gt;
[[File:Visualization.png|685x685px|Visualization of Central Path method in Interior point|thumb]]&lt;br /&gt;
&lt;br /&gt;
Given a linear programming problem with constraint equations that have inequality terms, the inequality term is typically replaced with an equality term using slack variables. The new reformulation can be discontinuous in nature and to replace the discontinuous function with a smoother function, a logarithmic form of this reformulation is utilized. This nonlinear objective function is called &amp;quot;&#039;&#039;Logarithmic Barrier Function&#039;&#039;&amp;quot;&lt;br /&gt;
The process involves starting with formation of a primal-dual pair of linear programs and then using &amp;quot;&#039;&#039;Lagrangian function&#039;&#039;&amp;quot; form on the &amp;quot;&#039;&#039;Barrier function&#039;&#039;&amp;quot; to convert the constrained problems into unconstrained problems. These unconstrained problems are then solved using Newton&#039;s method as shown above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problem Formulation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consider a combination of primal-dual problem below:&amp;lt;br&amp;gt;&lt;br /&gt;
(&#039;&#039;&#039;Primal Problem formulation&#039;&#039;&#039;) &amp;lt;br&amp;gt;&lt;br /&gt;
→ minimize &amp;lt;math&amp;gt; c^{T}x &amp;lt;/math&amp;gt;  &amp;lt;br&amp;gt;&lt;br /&gt;
Subject to: &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;  and  &amp;lt;math&amp;gt; x \geq 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
(&#039;&#039;&#039;Dual Problem formulation&#039;&#039;&#039;) &amp;lt;br&amp;gt;&lt;br /&gt;
→ maximize &amp;lt;math&amp;gt; b^{T}y &amp;lt;/math&amp;gt;  &amp;lt;br&amp;gt;&lt;br /&gt;
Subject to: &amp;lt;math&amp;gt; A^{T}y + \lambda  = c &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; \lambda \geq 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; &#039;\lambda &#039; &amp;lt;/math&amp;gt; vector introduced represents the slack variables.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Lagrangian functional form is used to configure two equations using &amp;quot;&#039;&#039;Logarithmic Barrier Function&#039;&#039;&amp;quot; for both primal and dual forms mentioned above:&amp;lt;br&amp;gt;&lt;br /&gt;
Lagrangian equation for Primal using Logarithm Barrier Function : &amp;lt;math&amp;gt; L_{p}(x,y) = c^{T}\cdot x - \mu \cdot \sum_{j=1}^{n}log(x_{j}) - y^{T}\cdot (Ax - b) &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Lagrangian equation for Dual using Logarithm Barrier Function   : &amp;lt;math&amp;gt; L_{d}(x,y,\lambda ) = b^{T}\cdot y + \mu \cdot \sum_{j=1}^{n}log(\lambda _{j}) - x^{T}\cdot (A^{T}y +\lambda - c) &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taking the partial derivatives of L&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; and L&amp;lt;sub&amp;gt;d&amp;lt;/sub&amp;gt; with respect to variables &amp;lt;math&amp;gt; &#039;x&#039;\; &#039;\lambda&#039;\; &#039;y&#039; &amp;lt;/math&amp;gt;, and forcing these terms to zero, we get the following equations: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;  and  &amp;lt;math&amp;gt; x \geq 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; A^{T}y + \lambda  = c &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; \lambda \geq 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; x_{j}\cdot \lambda _{j} = \mu &amp;lt;/math&amp;gt; for &#039;&#039;j&#039;&#039;= 1,2,.......&#039;&#039;n&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where, &amp;lt;math&amp;gt; &#039;\mu &#039; &amp;lt;/math&amp;gt; is strictly positive scaler parameter. For each &amp;lt;math&amp;gt; \mu &amp;gt; 0 &amp;lt;/math&amp;gt; , the vectors in the set &amp;lt;math&amp;gt; \left \{ x\left ( \mu  \right ), y\left ( \mu  \right ) ,  \lambda \left ( \mu  \right )\right \} &amp;lt;/math&amp;gt; satisfying above equations, can we viewed as set of points in &amp;lt;math&amp;gt; R^{n} &amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt; R^{p} &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; R^{n} &amp;lt;/math&amp;gt; respectively, such that when &amp;lt;math&amp;gt; &#039;\mu &#039; &amp;lt;/math&amp;gt; varies, the corresponding points form a set of trajectories called &#039;&#039;&amp;quot;Central Path&amp;quot;&#039;&#039;. The central path lies in the &#039;&#039;&amp;quot;Interior&amp;quot;&#039;&#039; of the feasible regions. There is a sample illustration of &#039;&#039;&amp;quot;Central Path&amp;quot;&#039;&#039; method in figure to right. Starting with a positive value of &amp;lt;math&amp;gt; &#039;\mu &#039; &amp;lt;/math&amp;gt; and as &amp;lt;math&amp;gt; &#039;\mu &#039; &amp;lt;/math&amp;gt; approaches 0, the optimal point is reached. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let Diagonal[...] denote a diagonal matrix with the listed elements on its diagonal.&lt;br /&gt;
Define the following:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;X&#039;&#039;&#039; = Diagonal [&amp;lt;math&amp;gt; x_{1}^{0}, .... x_{n}^{0} &amp;lt;/math&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \lambda &amp;lt;/math&amp;gt; = Diagonal (&amp;lt;math&amp;gt; \lambda _{1}^{0}, .... \lambda _{n}^{0} &amp;lt;/math&amp;gt; )&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;e&amp;lt;sup&amp;gt;T&amp;lt;/sup&amp;gt;&#039;&#039;&#039; = (1 .....1) as vector of all 1&#039;s.&amp;lt;br&amp;gt;&lt;br /&gt;
Using these newly defined terms, the equation above can be written as: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; X\cdot \lambda \cdot e  = \mu \cdot e  &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iterations using Newton&#039;s Method ===&lt;br /&gt;
Employing the Newton&#039;s iterative method to solve the following equations: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; Ax - b = 0 &amp;lt;/math&amp;gt;  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; A^{T}y + \lambda  = c &amp;lt;/math&amp;gt;  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; X\cdot \lambda \cdot e  - \mu \cdot e  = 0&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
With definition of starting point that lies within feasible region as &amp;lt;math&amp;gt; \left ( x^{0},y^{0},\lambda ^{0} \right ) &amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt; x^{0}&amp;gt; 0 \, and \lambda ^{0}&amp;gt; 0 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Also defining 2 residual vectors for both the primal and dual equations: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \delta _{p} = b - A\cdot x^{0} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \delta _{d} = c - A^{0}\cdot y^{0} - \lambda ^{0} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying Newton&#039;s Method to solve above equations: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{bmatrix}&lt;br /&gt;
A &amp;amp; 0 &amp;amp; 0\\ &lt;br /&gt;
0 &amp;amp; A^{T} &amp;amp; 1\\ &lt;br /&gt;
\lambda  &amp;amp; 0  &amp;amp; X&lt;br /&gt;
\end{bmatrix} \cdot \begin{bmatrix}&lt;br /&gt;
\delta _{x}\\ &lt;br /&gt;
\delta _{y}\\ &lt;br /&gt;
\delta _{\lambda }&lt;br /&gt;
\end{bmatrix} = \begin{bmatrix}&lt;br /&gt;
\delta _{p}\\ &lt;br /&gt;
\delta _{d}\\ &lt;br /&gt;
\mu \cdot e - X\cdot \lambda \cdot e&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
So a single iteration of Newton&#039;s method involves the following equations. For each iteration, we solve for the next value of &amp;lt;math&amp;gt; x^{k+1},y^{k+1},\lambda ^{k+1} &amp;lt;/math&amp;gt;: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; (A\lambda ^{-1}XA^{T})\delta _{y} = b- \mu A\lambda^{-1} + A\lambda ^{-1}X\delta _{d} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \delta _{\lambda} = \delta _{d}\cdot A^{T}\delta _{y} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \delta _{x} = \lambda ^{-1}\left [ \mu \cdot e - X\lambda e -\lambda \delta _{z}\right ] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \alpha _{p} = min\left \{ \frac{-x_{j}}{\delta _{x_{j}}} \right \} &amp;lt;/math&amp;gt; for  &amp;lt;math&amp;gt; \delta x_{j} &amp;lt; 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \alpha _{d} = min\left \{ \frac{-\lambda_{j}}{\delta _{\lambda_{j}}} \right \} &amp;lt;/math&amp;gt; for  &amp;lt;math&amp;gt; \delta \lambda_{j} &amp;lt; 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value of the the following variables for next iteration (+1) is determined by: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; x^{k+1} = x^{k} + \alpha _{p}\cdot \delta _{x} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; y^{k+1} = y^{k} + \alpha _{d}\cdot \delta _{y} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \lambda^{k+1} = \lambda^{k} + \alpha _{d}\cdot \delta _{\lambda} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The quantities &amp;lt;math&amp;gt; \alpha _{p} &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; \alpha _{d} &amp;lt;/math&amp;gt; are positive with &amp;lt;math&amp;gt; 0\leq \alpha _{p},\alpha _{d}\leq 1 &amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
After each iteration of Newton&#039;s method, we assess the duality gap that is given by the expression below and compare it against a small value &amp;lt;big&amp;gt;ε&amp;lt;/big&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{c^{T}x^{k}-b^{T}y^{k}}{1+\left | b^{T}y^{k} \right |} \leq \varepsilon &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
The value of &amp;lt;big&amp;gt;ε&amp;lt;/big&amp;gt; can be chosen to be something small 10&amp;lt;sup&amp;gt;-6&amp;lt;/sup&amp;gt;, which essentially is the permissible duality gap for the problem. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
&lt;br /&gt;
Maximize&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 3X_{1} + 3X_{2} &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
such that&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; X_{1} + X_{2} \leq 4, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;math&amp;gt; X_{1} \geq 0, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; X_{2} \geq 0, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Barrier form of the above primal problem is as written below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P(X,\mu) = 3X_{1} + 3X_{2} + \mu.log(4-X_{1} - X_{2}) + \mu.log(X_{1}) + \mu.log(X_{2})&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Barrier function is always concave, since the problem is a maximization problem, there will be one and only one solution. In order to find the maximum point on the concave function we take a derivate and set it to zero. &lt;br /&gt;
&lt;br /&gt;
Taking partial derivative and setting to zero, we get the below equations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial P(X,\mu)}{\partial X_{1}} = 3 - \frac{\mu}{(4-X_{1}-X_{2})} + \frac{\mu}{X_{1}} = 0&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial P(X,\mu)}{\partial X_{2}} = 3 - \frac{\mu}{(4-X_{1}-X_{2})} + \frac{\mu}{X_{2}} = 0&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using above equations the following can be derived: &amp;lt;math&amp;gt; X_{1} = X_{2}&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hence the following can be concluded&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; 3 - \frac{\mu}{(4-2X_{1})} + \frac{\mu}{X_{1}} = 0 &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above equation can be converted into a quadratic equation as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; 6X_{1}^2 - 3X_{1}(4-\mu)-4\mu = 0&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The solution to the above quadratic equation can be written as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; X_{1} = \frac{3(4-\mu)\pm(\sqrt{9(4-\mu)^2 + 96\mu} }{12} = X_{2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Taking only take the positive value of &amp;lt;math&amp;gt; X_{1} &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; X_{2} &amp;lt;/math&amp;gt; from the above equation as &amp;lt;math&amp;gt; X_{1} \geq 0 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; X_{2} \geq 0&amp;lt;/math&amp;gt; we can solve &amp;lt;math&amp;gt;X_{1}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X_{2}&amp;lt;/math&amp;gt; for different values of &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. The outcome of such iterations is listed in the table below. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Objective &amp;amp; Barrier Function w.r.t  &amp;lt;math&amp;gt;X_{1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;X_{2}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;X_{1}&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;X_{2}&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;P(X, \mu)&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 2 || 2 || 12 || 12&lt;br /&gt;
|-&lt;br /&gt;
| 0.01  || 1.998  || 1.998  || 11.947  || 11.990 &lt;br /&gt;
|-&lt;br /&gt;
| 0.1  || 1.984  || 1.984  || 11.697  || 11.902 &lt;br /&gt;
|-&lt;br /&gt;
| 1  || 1.859  || 1.859  || 11.128  || 11.152 &lt;br /&gt;
|-&lt;br /&gt;
| 10 || 1.486  || 1.486  || 17.114  || 8.916 &lt;br /&gt;
|-&lt;br /&gt;
| 100 || 1.351  || 1.351  || 94.357  || 8.105 &lt;br /&gt;
|-&lt;br /&gt;
| 1000 || 1.335  || 1.335 || 871.052  || 8.011 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
From the above table it can be seen that: &lt;br /&gt;
# as &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; gets close to zero, the Barrier Function becomes tight and close to the original function. &lt;br /&gt;
# at &amp;lt;math&amp;gt;\mu=0&amp;lt;/math&amp;gt; the optimal solution is achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
Maximum Value of Objective function &amp;lt;math&amp;gt;=12&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Optimal points &amp;lt;math&amp;gt;X_{1} = 2 &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X_{2} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Newton&#039;s Method can also be applied to solve linear programming problems as indicated in the &amp;quot;Theory and Algorithm&amp;quot; section above. The solution to linear programming problems as indicated in this section &amp;quot;Numerical Example&amp;quot;, will be similar to quadratic equation as obtained above and will converge in one iteration.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
Primal-Dual interior-point (PDIP) methods  are commonly used in optimal power flow (OPF), in this case what is being looked is to maximize user utility and minimize operational cost satisfying operational and physical constraints.  The solution to the OPF needs to be available to grid operators in few minutes or seconds due to changes and fluctuations in loads during power generation.  Newton-based primal-dual interior point can achieve fast convergence in this OPF optimization problem. &amp;lt;ref&amp;gt; A. Minot, Y. M. Lu and N. Li, &amp;quot;A parallel primal-dual interior-point method for DC optimal power flow,&amp;quot; 2016 Power Systems Computation Conference (PSCC), Genoa, 2016, pp. 1-7, doi: 10.1109/PSCC.2016.7540826. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another application of the PDIP  is for the minimization of losses and cost in the generation and transmission in hydroelectric power systems. &amp;lt;ref&amp;gt; L. M. Ramos Carvalho and A. R. Leite Oliveira, &amp;quot;Primal-Dual Interior Point Method Applied to the Short Term Hydroelectric Scheduling Including a Perturbing Parameter,&amp;quot; in IEEE Latin America Transactions, vol. 7, no. 5, pp. 533-538, Sept. 2009, doi: 10.1109/TLA.2009.5361190. &amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
PDIP are commonly used in imaging processing.  One these applications is for image deblurring, in this case the constrained deblurring problem is formulated as primal-dual.  The constrained primal-dual is solved using a semi-smooth Newton’s method. &amp;lt;ref&amp;gt; D. Krishnan, P. Lin and A. M. Yip, &amp;quot;A Primal-Dual Active-Set Method for Non-Negativity Constrained Total Variation Deblurring Problems,&amp;quot; in IEEE Transactions on Image Processing, vol. 16, no. 11, pp. 2766-2777, Nov. 2007, doi: 10.1109/TIP.2007.908079. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PDIP can be utilized to obtain a general formula for a shape derivative of the potential energy describing the energy release rate for curvilinear cracks.  Problems on cracks and their evolution have important application in engineering and mechanical sciences. &amp;lt;ref&amp;gt; V. A. Kovtunenko, Primal–dual methods of shape sensitivity analysis for curvilinear cracks with nonpenetration, IMA Journal of Applied Mathematics, Volume 71, Issue 5, October 2006, Pages 635–657 &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The primal-dual interior point method is a good alternative to the simplex methods for solving linear programming problems.  The primal dual method shows superior performance and convergence on many large complex problems.  simplex codes are faster on small to medium problems, interior point primal-dual are much faster on large problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Computational_complexity&amp;diff=2723</id>
		<title>Computational complexity</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Computational_complexity&amp;diff=2723"/>
		<updated>2020-12-21T11:30:25Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Steve Bentioulis, Augie Bravo, Will Murphy (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;“The subject of my talk is perhaps most directly indicated by simply asking two questions: first, is it harder to multiply than to add? and second, why?...there is no algorithm for multiplication computationally as simple as that for addition, and this proves something of a stumbling block” - Alan Cobham, 1965&#039;&#039; &amp;lt;ref&amp;gt;[https://www.cs.toronto.edu/~sacook/homepage/cobham_intrinsic.pdf A. Cobham, The intrinsic computational difficulty of functions], in Y. Bar-Hillel, ed., Logic, Methodology and Philosophy of Science: Proceedings of the 1964 International Congress, North-Holland Publishing Company, Amsterdam, 1965, p. 24-30 &amp;lt;/ref&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Computational complexity refers to the amount of resources needed to solve a problem. Complexity increases as the amount of resources required increases. While this notion may seem straightforward enough, computational complexity has profound impacts. &lt;br /&gt;
&lt;br /&gt;
The quote above from Alan Cobham is some of the earliest thinking on defining computational complexity and set the stage for defining problems based on complexity classes to indicate the feasibility of computational problems.&lt;br /&gt;
&lt;br /&gt;
Additionally, the theory of computational complexity is in its infancy and has only been studied in earnest starting in the 20&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; century. &lt;br /&gt;
&lt;br /&gt;
== Theory, Methodology ==&lt;br /&gt;
The concept of computation has evolved since the advent of the standard universal electronic computer and the associated widespread societal adoption. And while the electronic computer is often synonymous with computation, it is important to remember that computation is a major scientific concept irrespective of whether it is conducted by machine, man, or otherwise.&lt;br /&gt;
&lt;br /&gt;
When studying computation, a key area of interest is understanding what problems are, in fact, computable. Researchers have shown that some tasks are inherently incomputable in that no computer can solve them without going into infinite loops on certain inputs. This phenomenon begs the question how do you determine if a problem can be computed, moreover, for those problems that can be computed how can you calculate the complexity associated with computing the answer.&lt;br /&gt;
&lt;br /&gt;
The focus of computational complexity is the measure of computational efficiency quantifying the amount of computational resources required to solve a problem.&amp;lt;ref&amp;gt;Arora, S., &amp;amp; Barak, B. (2009). Computational complexity: a modern approach. Cambridge: Cambridge University Press. Retrieved from https://cornell-library.skillport.com/skillportfe/main.action?path=summary/BOOKS/31235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the study of computational complexity there exists the notion of a complexity class defined as a set of functions that can be computed within given resource bounds.&amp;lt;ref&amp;gt;Du, D., &amp;amp; Ko, K.-I. (2014). Theory of computational complexity. (Second edition.). Hoboken, New Jersey: Wiley. Retrieved from http://onlinelibrary.wiley.com/book/10.1002/9781118595091&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Class P ===&lt;br /&gt;
Class P computational complexity problems refer to those that can solved in polynomial running time, where “P” stands for polynomial and running time is a function of the number of bits in the input.&amp;lt;ref&amp;gt;Arora, S., &amp;amp; Barak, B. (2009). Computational complexity: a modern approach. Cambridge: Cambridge University Press. Retrieved from https://cornell-library.skillport.com/skillportfe/main.action?path=summary/BOOKS/31235&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A complexity class refers to a specific decision problem rather than generic types of problems. For example, it is not acceptable to state that integer multiplication is in class P. Rather you must state the specific decision problem, e.g. the product of 3 and 5 is a class P problem.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the running time is defined by minutes or nanoseconds, but refers to the number of operations to be performed to resolve or verify an answer to a problem.  Running time is a function of the number of bits being input into the decision problem. This allows us to ignore the efficiency of the machine running the computation and judge the complexity of the decision problem solely by the merits of such a problem.&lt;br /&gt;
&lt;br /&gt;
=== Class NP ===&lt;br /&gt;
NP stands for nondeterministic polynomial time, originally referring to nondeterministic Turing machines (NDTM) in which the Turing machine has two transition functions and the computer arbitrarily determines which transition function to apply.&lt;br /&gt;
&lt;br /&gt;
Complexity class NP consists of problems that can be efficiently verified within a running time upper bounded by polynomial function. Verifiability is the concept that if given a potential solution to the problem it can be confirmed or rejected.&lt;br /&gt;
&lt;br /&gt;
==== Class NP-hard and NP-complete ====&lt;br /&gt;
The NP-hard complexity class is a subcategory of the NP complexity class that defines those problems that are at least as hard as any other language in NP. If P ≠ NP, then NP-hard problems cannot be decided in polynomial time. See P vs NP on this page. &lt;br /&gt;
&lt;br /&gt;
NP-complete refers to those problems within the NP complexity-class that are the hardest problems to solve within the NP class. Examples of NP-complete problems include Independent Set, [https://optimization.cbe.cornell.edu/index.php?title=Traveling_salesman_problem Traveling Salesperson], Subset Sum, and Integer Programming problems. The implication of these problems is that they are not in P unless P = NP.&lt;br /&gt;
&lt;br /&gt;
=== P vs NP ===&lt;br /&gt;
The difference between class P and class NP computational complexity is illustrated simply by considering a Sudoku puzzle. Ask yourself, is it easier to solve a Sudoku puzzle or verify whether an answer to a Sudoku puzzle is correct? Class P refers to computational complexity problems that can be efficiently solved. Class NP refers to those problems which have answers that can be efficiently verified. The answer to a Sudoku problem can be efficiently verified and for that reason is considered a class NP complexity problem.&lt;br /&gt;
&lt;br /&gt;
This then begs the question that for every class NP problem, i.e. those that can be efficiently verified, does that mean they can also be efficiently solved? If so, then P = NP. However, we have not yet been able to prove that P = NP and thus the implications that P ≠ NP must also be considered.&lt;br /&gt;
&lt;br /&gt;
The importance of understanding P vs NP is the subject of much discussion and has even sparked competition in the scientific community. The problem of P vs NP was selected by the Clay Mathematics Institute (CMI) of Cambridge, Massachusetts as one of seven most difficult and important problems to be solved at the dawn of the 21&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; century. A prize of $1 million has been allocated for anyone that can bring forward a solution.&amp;lt;ref&amp;gt;Clay Mathematics Institute, The Millennium Prize Problems. Retrieved from http://https://www.claymath.org/millennium-problems/millennium-prize-problems&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methodology ===&lt;br /&gt;
The methodology for determining computational complexity is built upon the notion of a Turing machine and quantifying the number of computational operations the machine is to perform to resolve or verify a problem. A straight-forward approach would be to quantify the number of operations required considering every possible input to the Turing machine’s algorithm. This approach is referred to as worst-case complexity as it is the most possible number of operations to be performed in order to solve the problem.&lt;br /&gt;
&lt;br /&gt;
However, critics of worst-case complexity highlight that in practice the worst-case behaviors of algorithms may never actually be encountered, and the worst-case approach can be unnecessarily cumbersome. As an alternative, average-case analysis seeks to design efficient algorithms that apply to most real-life instances. An important component of average-case analysis is the concept of an average-graph distribution of the inputs. There are several approaches to determining the average-graph including randomization. An average-case problem consists of both a decision problem and an average-graph distribution of inputs, implying that the complexity of a decision problem can vary with the inputs.&amp;lt;ref&amp;gt;Arora, S., &amp;amp; Barak, B. (2009). Computational complexity: a modern approach. Cambridge: Cambridge University Press. Retrieved from https://cornell-library.skillport.com/skillportfe/main.action?path=summary/BOOKS/31235&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
The efficiency of a computation problem is measured by the operations executed to solve, not the seconds (or years) required to solve it. The number of operations executed is a function of input size and arrangement. The big O notation is used to determine an algorithm’s complexity class according to the number of operations it performs as a function of input.&amp;lt;ref&amp;gt;Mohr, A. Quantum Computing in Complexity Theory and Theory of Computation (PDF). Retrieved from http://www.austinmohr.com/Work_files/complexity.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The notation O(n) is used where ‘O’ refers to the order of a function and ‘n’ represents the size of the input.&amp;lt;ref&amp;gt;A. Mejia, How you can change the world by learning Data Structures and Algorithms. Retrieved from: https://towardsdatascience.com/how-you-can-change-the-world-by-learning-data-structures-and-algorithms-84566c1829e3&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of an O(1) problem includes determining whether one number is odd or even. The algorithm reads a bit of input and performs one operation to determine whether or not the number is odd or even. No matter how large or small the quantity of inputs the number of operations holds constant at 1; for that reason this is an O(1) problem.&lt;br /&gt;
&lt;br /&gt;
An example of O(n) problem includes identifying the minimum input within an unsorted array. To compute this problem the computer must read every bit of input to determine whether or not it is less than the prior bit of input. For this reason, the number of operations is linearly correlated to the quantity of inputs. For example, the decision problem of finding the minimum of {5,9,3,2,7,1,4} requires the computer to check every element in the array. This array has n=7 inputs, so it will require 7 operations to read each bit an determine if it is less than the prior bit. This scales linearly as the size of input increases. &lt;br /&gt;
== Applications ==&lt;br /&gt;
Computational Complexity is influential to numerous scientific fields including [https://optimization.cbe.cornell.edu/index.php?title=Quantum_computing_for_optimization quantum computing], game theory, data mining, and cellular automata.&amp;lt;ref&amp;gt;Robert A. Meyers. (2012). Computational Complexity: Theory, Techniques, and Applications. Springer: Springer. Retrieved from https://search.ebscohost.com/login.aspx?custid=s9001366&amp;amp;groupid=main&amp;amp;profid=pfi&amp;amp;authtype=ip,guest&amp;amp;direct=true&amp;amp;db=edspub&amp;amp;AN=edp1880523&amp;amp;site=eds-live&amp;amp;scope=site&amp;lt;/ref&amp;gt; Focusing in on quantum computing, there are important applications to the study of computational complexity as the theory of complexity is largely based upon the Turing machine and the Church-Turing thesis that any physically realizable computation device can be simulated by a Turing machine. If quantum computers are to be physically realizable they could alter our understanding of how complex a decision problem may be by providing enhanced methods in which algorithms may be computed and potentially lowering the number of operations to be performed.&amp;lt;ref&amp;gt; Arora, S., &amp;amp; Barak, B. (2009). Computational complexity: a modern approach. Cambridge: Cambridge University Press. Retrieved from https://cornell-library.skillport.com/skillportfe/main.action?path=summary/BOOKS/31235 &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Computational complexity has important implications in the field of computer science and far reaching applications that span numerous fields and industries. As computable problems become more complex the ability to increase the efficiency in which they are solved becomes more important. Advancements toward solving P vs NP will have far reaching impacts on how we approach the computability of problems and the ability to efficiently allocate resources.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Simplex_algorithm&amp;diff=2722</id>
		<title>Simplex algorithm</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Simplex_algorithm&amp;diff=2722"/>
		<updated>2020-12-21T11:28:03Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Guoqing Hu (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Simplex algorithm (or Simplex method) is a widely-used algorithm to solve the Linear Programming(LP) optimization problems. The simplex algorithm can be thought of as one of the elementary steps for solving the inequality problem, since many of those will be converted to LP and solved via Simplex algorithm.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;[http://www-personal.umich.edu/~murty/books/linear_complementarity_webbook/lcp-complete.pdf Linear complementarity, linear and nonlinear programming Internet Edition].&amp;lt;/ref&amp;gt; Simplex algorithm has been proposed by [[Wikipedia: George_Dantzig|George Dantzig]], initiated from the idea of step by step downgrade to one of the vertices on the convex polyhedral.&amp;lt;ref&amp;gt;Dantzig, G. B. (1987, May). [https://apps.dtic.mil/dtic/tr/fulltext/u2/a182708.pdf Origins of the simplex method].&amp;lt;/ref&amp;gt; &amp;quot;Simplex&amp;quot; could be possibly referred to as the top vertex on the simplicial cone which is the geometric illustration of the constraints within LP problems.&amp;lt;ref&amp;gt;Strang, G. (1987). Karmarkar’s algorithm and its place in applied mathematics. &#039;&#039;The Mathematical Intelligencer,&#039;&#039; &#039;&#039;9&#039;&#039;(2), 4-10. doi:10.1007/bf03025891.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Algorithmic Discussion ==&lt;br /&gt;
There are two theorems in LP:&lt;br /&gt;
&lt;br /&gt;
# The feasible region for an LP problem is a convex set (Every linear equation&#039;s second derivative is 0, implying the monotonicity of the trend). Therefore, if an LP has an optimal solution, there must be an extreme point of the feasible region that is optimal&lt;br /&gt;
# For an LP optimization problem, there is only one extreme point of the LP&#039;s feasible region regarding every basic feasible solution. Plus, there will be a minimum of one basic feasible solution corresponding to every extreme point in the feasible region.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Vanderbei, R. J. (2000). &#039;&#039;Linear programming: Foundations and extensions&#039;&#039;. Boston: Kluwer.&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:Geometric Illustration of LP problem.png|thumb|Geometric Illustration of LP problem]]&lt;br /&gt;
Based on the two theorems above, the geometric illustration of the LP problem could be depicted. Each line of this polyhedral will be the boundary of the LP constraints, in which every vertex will be the extreme points according to the theorem. The simplex method is the way to adjust the nonbasic variables to travel to different vertex till the optimum solution is found.&amp;lt;ref&amp;gt;Sakarovitch M. (1983) Geometric Interpretation of the Simplex Method. In: Thomas J.B. (eds) Linear Programming. Springer Texts in Electrical Engineering. Springer, New York, NY. &amp;lt;nowiki&amp;gt;https://doi.org/10.1007/978-1-4757-4106-3_8&amp;lt;/nowiki&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the following expression as the general linear programming problem standard form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\max \sum_{i=1}^n c_ix_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the following constraints:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align} s.t. \quad \sum_{j=1}^n a_{ij}x_j &amp;amp;\leq b_i \quad   i = 1,2,...,m \\&lt;br /&gt;
  &lt;br /&gt;
        x_j &amp;amp;\geq 0 \quad     j = 1,2,...,n \end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step of the simplex method is to add slack variables and symbols which represent the objective functions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align} \phi &amp;amp;= \sum_{i=1}^n c_ix_i\\&lt;br /&gt;
  z_i &amp;amp;= b_i - \sum_{j=1}^n a_{ij}x_j \quad i = 1,2,...,m \end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new introduced slack variables may be confused with the original values. Therefore, it will be convenient to add those slack variables &amp;lt;math&amp;gt; z_i &amp;lt;/math&amp;gt; to the end of the list of &#039;&#039;x&#039;&#039;-variables with the following expression:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align} \phi &amp;amp;= \sum_{i=1}^n c_ix_i\\&lt;br /&gt;
x_{n+i} &amp;amp;= b_i - \sum_{j=1}^n a_{ij}x_{ij} \quad i=1,2,...,m \end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the progression of simplex method, the starting dictionary (which is the equations above) switches between the dictionaries in seeking for optimal values. Every dictionary will have &#039;&#039;m&#039;&#039; basic variables which form the feasible area, as well as &#039;&#039;n&#039;&#039; non-basic variables which compose the objective function. Afterward, the dictionary function will be written in the form of:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \begin{align} &lt;br /&gt;
  \phi &amp;amp;= \bar{\phi} + \sum_{j=1}^n \bar{c_j}x_j\\&lt;br /&gt;
  x_{i} &amp;amp;= \bar{b_i} - \sum_{j=1}^n \bar{a_{ij}}x_{ij} \quad i=1,2,...,n+m &lt;br /&gt;
  \end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the variables with bar suggest that those corresponding values will change accordingly with the progression of the simplex method. The observation could be made that there will specifically one variable goes from non-basic to basic and another acts oppositely. This kind of variable is referred to as the &#039;&#039;entering variable&#039;&#039;. Under the goal of increasing &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt;, the entering variables are selected from the set {1,2,...,n}. As long as there are no repetitive entering variables can be selected, the optimal values will be found. The decision of which entering variable should be selected at first place should be made based on the consideration that there usually are multiple constraints (n&amp;gt;1). For the Simplex algorithm, the coefficient with the least value is preferred since the major objective is maximization.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;leaving variables&#039;&#039; are defined as which go from basic to non-basic. The reason of their existence is to ensure the non-negativity of those basic variables. Once the entering variables are determined, the corresponding leaving variables will change accordingly from the equation below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_i = \bar{b_i} - \bar{a_{ik}}x_k \quad i \, \epsilon \, \{ 1,2,...,n+m \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the non-negativity of entering variables should be ensured, the following inequality can be derived:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \bar{b_i} - \bar{a_i}x_k \geq 0 \quad i\,\epsilon\, \{1,2,...,n+m \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; is immutable. The minimum &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; should be zero to get the minimum value since this cannot be negative. Therefore, the following equation should be derived:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_k = \frac {\bar{b_i}}{\bar{a_{ik}}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to the nonnegativity of all variables, the value of &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; should be raised to the largest of all of those values calculated from above equation. Hence, the following equation can be derived:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_k = \min_{\bar{a_{ik}}&amp;gt;0} \, \frac{\bar{b_i}}{\bar{a_{ik}}} \quad i=1,2,...,n+m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the leaving-basic and entering-nonbasic variables are chosen, reasonable row operation should be conducted to switch from the current dictionary to the new dictionary, as this step is called &#039;&#039;pivot.&#039;&#039;&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the pivot process, the coefficient for the selected pivot element should be one, meaning the reciprocal of this coefficient should be multiplied to every element within this row. Afterward, multiplying this specific row with corresponding coefficients and adding this to different rows, one should get 0 values for all other entries in this pivot element&#039;s column.&lt;br /&gt;
&lt;br /&gt;
If there are any negative variables after the pivot process, one should continue finding the pivot element by repeating the process above. At once there are no more negative values for basic and non-basic variables. The optimal solution is found.&amp;lt;ref&amp;gt;Evar D. Nering and Albert W. Tucker, 1993, &#039;&#039;Linear Programs and Related Problems&#039;&#039;, Academic Press. (elementary)&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Robert J. Vanderbei, &#039;&#039;Linear Programming: Foundations and Extensions&#039;&#039;, 3rd ed., International Series in Operations Research &amp;amp; Management Science, Vol. 114, Springer Verlag, 2008. &amp;lt;nowiki&amp;gt;ISBN 978-0-387-74387-5&amp;lt;/nowiki&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
Considering the following numerical example to gain better understanding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \max{4x_1+x_2+4x_3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the following constraints:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align} &lt;br /&gt;
2x_1 + x_2 + x_3 &amp;amp;\leq 2 \\&lt;br /&gt;
x_1 + 2x_2 +3x_3 &amp;amp;\leq 4\\&lt;br /&gt;
2x_1 + 2x_2 + x_3 &amp;amp;\leq 8 \\&lt;br /&gt;
x_1,x_2,x_3  &amp;amp;\geq 0&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With adding slack variables to get the following equations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{align}&lt;br /&gt;
z - 4x_1 - x_2 -4x_3 &amp;amp;= 0 \\&lt;br /&gt;
2x_1 + x_2 + x_3 + s_1 &amp;amp;= 2 \\&lt;br /&gt;
x_1 + 2x_2 + 3x_3 + s_2 &amp;amp;= 4\\&lt;br /&gt;
2x_1 + 2x_2 + x_3 + s_3 &amp;amp;= 8 \\&lt;br /&gt;
x_1,x_2,x_3,s_1,s_2,s_3 &amp;amp;\geq 0 \end{align} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The simplex tableau can be derived as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{c c c c c c c | r} &lt;br /&gt;
x_1 &amp;amp; x_2 &amp;amp; x_3 &amp;amp; s_1 &amp;amp; s_2 &amp;amp; s_3 &amp;amp; z &amp;amp; b \\&lt;br /&gt;
\hline&lt;br /&gt;
  2 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 2 \\&lt;br /&gt;
  1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 4 \\&lt;br /&gt;
  2 &amp;amp; 2 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 8 \\&lt;br /&gt;
  \hline&lt;br /&gt;
 -4 &amp;amp; -1 &amp;amp; -4 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0&lt;br /&gt;
\end{array} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the last row, the column with the smallest value should be selected. Although there are two smallest values, the result will be the same no matter of which one is selected first. For this solution, the first column is selected. After the least coefficient is found, the pivot process will be conducted by searching for the coefficient &amp;lt;math&amp;gt; \frac{b_i}{x_1} &amp;lt;/math&amp;gt;. Since the coefficient in the first row is 1 and 4 for the second row, the first row should be pivoted. And following tableau can be created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{c c c c c c c | r} &lt;br /&gt;
x_1 &amp;amp; x_2 &amp;amp; x_3 &amp;amp; s_1 &amp;amp; s_2 &amp;amp; s_3 &amp;amp; z &amp;amp; b \\&lt;br /&gt;
\hline&lt;br /&gt;
  1 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&lt;br /&gt;
  1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 4 \\&lt;br /&gt;
  2 &amp;amp; 2 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 8 \\&lt;br /&gt;
  \hline&lt;br /&gt;
 -4 &amp;amp; -1 &amp;amp; -4 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0&lt;br /&gt;
\end{array} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By performing the row operation still every other rows (other than first row) in column 1 are zeroes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{c c c c c c c | r} &lt;br /&gt;
x_1 &amp;amp; x_2 &amp;amp; x_3 &amp;amp; s_1 &amp;amp; s_2 &amp;amp; s_3 &amp;amp; z &amp;amp; b \\&lt;br /&gt;
\hline&lt;br /&gt;
  1 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&lt;br /&gt;
  0 &amp;amp; 1.5 &amp;amp; 2.5 &amp;amp; -0.5 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 3 \\&lt;br /&gt;
  0 &amp;amp; 1 &amp;amp; 0 &amp;amp; -1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 6 \\&lt;br /&gt;
  \hline&lt;br /&gt;
 0 &amp;amp; 1 &amp;amp; -2 &amp;amp; 2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 4&lt;br /&gt;
\end{array} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because there is one negative value in last row, the same processes should be performed again. The smallest value in the last row is in the third column. And in the third column, the second row has the smallest coefficients of &amp;lt;math&amp;gt; \frac{b_i}{x_3}&amp;lt;/math&amp;gt; which is 1.2. Thus, the second row will be selected for pivoting. The simplex tableau is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{c c c c c c c | r} &lt;br /&gt;
x_1 &amp;amp; x_2 &amp;amp; x_3 &amp;amp; s_1 &amp;amp; s_2 &amp;amp; s_3 &amp;amp; z &amp;amp; b \\&lt;br /&gt;
\hline&lt;br /&gt;
  1 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0.5 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&lt;br /&gt;
  0 &amp;amp; 0.6 &amp;amp; 1 &amp;amp; -0.2 &amp;amp; 0.4 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1.2 \\&lt;br /&gt;
  0 &amp;amp; 1 &amp;amp; 0 &amp;amp; -1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 6 \\&lt;br /&gt;
  \hline&lt;br /&gt;
 0 &amp;amp; 1 &amp;amp; -2 &amp;amp; 2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 4&lt;br /&gt;
\end{array} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By performing the row operation to make other columns 0&#039;s, the following could be derived&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{c c c c c c c | r} &lt;br /&gt;
x_1 &amp;amp; x_2 &amp;amp; x_3 &amp;amp; s_1 &amp;amp; s_2 &amp;amp; s_3 &amp;amp; z &amp;amp; b \\&lt;br /&gt;
\hline&lt;br /&gt;
  1 &amp;amp; 0.2 &amp;amp; 0 &amp;amp; 0.6 &amp;amp; -0.2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.4 \\&lt;br /&gt;
  0 &amp;amp; 0.6 &amp;amp; 1 &amp;amp; -0.2 &amp;amp; 0.4 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1.2 \\&lt;br /&gt;
  0 &amp;amp; -0.1 &amp;amp; 0 &amp;amp; 0.2 &amp;amp; 0.6 &amp;amp; -1 &amp;amp; 0 &amp;amp; -4.2 \\&lt;br /&gt;
  \hline&lt;br /&gt;
 0 &amp;amp; 2.2 &amp;amp; 0 &amp;amp; 1.6 &amp;amp; 0.8 &amp;amp; 0 &amp;amp; 1 &amp;amp; 6.4&lt;br /&gt;
\end{array} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no need to further conduct calculation since all values in the last row are non-negative. From the tableau above, &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; x_3&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; are basic variables since all rows in their columns are 0&#039;s except one row is 1.Therefore, the optimal solution will be &amp;lt;math&amp;gt;x_1 = 0.4&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x_2 = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x_3 = 1.2&amp;lt;/math&amp;gt;, achieving the maximum value: &amp;lt;math&amp;gt;z = 6.4&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application ==&lt;br /&gt;
The simplex method can be used in many programming problems since those will be converted to LP (Linear Programming) and solved by the simplex method. Besides the mathematical application, much other industrial planning will use this method to maximize the profits or minimize the resources needed. &lt;br /&gt;
&lt;br /&gt;
=== Mathematical Problem ===&lt;br /&gt;
The simplex method is commonly used in many programming problems.  Due to the heavy load of computation on the non-linear problem, many non-linear programming(NLP) problems cannot be solved effectively. Consequently, many NLP will rely on the LP solver, namely the simplex method, to do some of the work in finding the solution (for instance, the upper or lower bound of the feasible solution), or in many cases, those NLP will be wholly linearized to LP and solved from the simplex method.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; Other than solving the problems, simplex method can also be used reliably to support the LP&#039;s solution from other theorem, for instance the [[wikipedia:Farkas&#039;_lemma#:~:text=Farkas&#039;%20lemma%20is%20a%20solvability,the%20Hungarian%20mathematician%20Gyula%20Farkas.&amp;amp;text=Farkas&#039;%20lemma%20belongs%20to%20a,two%20systems%20has%20a%20solution.|Farkas&#039; theorem]] in which Simplex method proves the suggested feasible solutions.&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; Besides solving the problems, the Simplex method can also enlighten the scholars with the ways of solving other problems, for instance, Quadratic Programming (QP).&amp;lt;ref&amp;gt;Wolfe, P. (1959). The simplex method for quadratic programming. &#039;&#039;Econometrica,&#039;&#039; &#039;&#039;27&#039;&#039;(3), 382. doi:10.2307/1909468&amp;lt;/ref&amp;gt; For some QP problems, they have linear constraints to the variables which can be solved analogous to the idea of the Simplex method.   &lt;br /&gt;
=== Industrial Application ===&lt;br /&gt;
The industries from different fields will use the simplex method to plan under the constraints. With considering that it is usually the case that the constraints or tradeoffs and desired outcomes are linearly related to the controllable variables, many people will develop the models to solve the LP problem via the simplex method, for instance, the agricultural and economic problems  &lt;br /&gt;
&lt;br /&gt;
Farmers usually need to rationally allocate the existed resources to obtain the maximum profits. The potential constraints are raised from multiple perspectives including policy restriction, budget concerns as well as farmland area. Farmers may incline to use the simplex-method-based model to have a better plan, as those constraints may be constant in many scenarios and the profits are usually linearly related to the farm production, thereby forming the LP problem. Currently, there is an existing plant-model that can accept inputs such as price, farm production, and return the optimal plan to maximize the profits with given information.&amp;lt;ref&amp;gt;Hua, W. (1998). [https://shareok.org/bitstream/handle/11244/12005/Thesis-1998-H8735a.pdf?sequence=1 Application of the revised simplex method to the farm planning model].&amp;lt;/ref&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Besides agricultural purposes, the Simplex method can also be used by enterprises to make profits. The rational sale-strategy will be indispensable to the successful practice of marketing. Since there are so many enterprises international wide, the marketing strategy from enamelware is selected for illustration. After widely collecting the data of the quality of varied products manufactured, cost of each and popularity among the customers, the company may need to determine which kind of products well worth the investment and continue making profits as well as which won&#039;t. Considering the cost and profit factors are linearly dependent on the production, economists will suggest an LP model that can be solved via the simplex method.&amp;lt;ref&amp;gt;Nikitenko, A. V. (1996). Economic analysis of the potential use of a simplex method in designing the sales strategy of an enamelware enterprise. &#039;&#039;Glass and Ceramics,&#039;&#039; &#039;&#039;53&#039;&#039;(12), 367-369. doi:10.1007/bf01129674.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above professional fields are only the tips of the iceberg to the simplex method application. Many other fields will use this method since the LP problem is gaining popularity in recent days and the simplex method plays a crucial role in solving those problems.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
It is indisputable to acknowledge the influence of the Simplex method to programming, as this method won the &#039;National Medal of Science&#039; to its inventor, George Dantzig.&amp;lt;ref&amp;gt;Cottle, R., Johnson, E. and Wets, R. (2007). George B. Dantzig (1914–2005). &#039;&#039;Notices Amer. Math. Soc.&#039;&#039; 54, 344–362.&amp;lt;/ref&amp;gt; Not only for its wide usage in the mathematic models and industrial manufacture, but the Simplex method also provides a new perspective in solving the inequality problems. As its contribution to the programming substantially boosts the advancement of the current technology and economy from making the optimal plan with the constraints. Nowadays, with the development of technology and economics, the Simplex method is substituted with some more advanced solvers which can solve the problems with faster speed and handle a larger amount of constraints and variables, but this innovative method marks the creativity at that age and continuously offer the inspiration to the upcoming challenges.   &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Duality&amp;diff=2721</id>
		<title>Duality</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Duality&amp;diff=2721"/>
		<updated>2020-12-21T11:27:37Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Claire Gauthier, Trent Melsheimer, Alexa Piper, Nicholas Chung, Michael Kulbacki (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Every optimization problem may be viewed either from the primal or the dual, this is the principle of &#039;&#039;&#039;duality&#039;&#039;&#039;. Duality develops the relationships between one optimization problem and another related optimization problem. If the primal optimization problem is a maximization problem, the dual can be used to find upper bounds on its optimal value. If the primal problem is a minimization problem, the dual can be used to find the lower bounds. &lt;br /&gt;
&lt;br /&gt;
According to the American mathematical scientist George Dantzig, Duality for Linear Optimization was conjectured by Jon von Neumann after Dantzig presented a problem for Linear Optimization. Von Neumann determined that two person zero sum matrix game (from Game Theory) was equivalent to Linear Programming. Proofs of the Duality theory were published by Canadian Mathematician Albert W. Tucker and his group in 1948. &amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt; Duality (Optimization). (2020, July 12). &#039;&#039;In Wikipedia. &#039;&#039;https://en.wikipedia.org/wiki/Duality_(optimization)#:~:text=In%20mathematical%20optimization%20theory%2C%20duality,the%20primal%20(minimization)%20problem.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory, methodology, and/or algorithmic discussions ==&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primal&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;Maximize &amp;lt;math&amp;gt;z=\textstyle \sum_{j=1}^n \displaystyle c_j x_j&amp;lt;/math&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;subject to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;math&amp;gt;\textstyle \sum_{j=1}^n \displaystyle a_{i,j} x_j\lneq b_i \qquad (i=1, 2, ... ,m)  &amp;lt;/math&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;math&amp;gt;x_j\gneq 0 \qquad (j=1, 2, ... ,n)  &amp;lt;/math&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Dual&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Minimize &amp;lt;math&amp;gt;v=\textstyle \sum_{i=1}^m \displaystyle b_i y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
subject to:&amp;lt;blockquote&amp;gt;&amp;lt;math&amp;gt;\textstyle \sum_{i=1}^m \displaystyle y_ia_{i,j}\gneq c_j \qquad (j=1, 2, ... , n)  &amp;lt;/math&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;math&amp;gt;y_j\gneq 0 \qquad (i=1, 2, ... , m)&amp;lt;/math&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;/blockquote&amp;gt;Between the primal and the dual, the variables &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; switch places with each other. The coefficient (&amp;lt;math&amp;gt;c_j&amp;lt;/math&amp;gt;) of the primal becomes the right-hand side (RHS) of the dual. The RHS of the primal (&amp;lt;math&amp;gt;b_j&amp;lt;/math&amp;gt;) becomes the coefficient of the dual. The less than or equal to constraints in the primal become greater than or equal to in the dual problem. &amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt; Ferguson, Thomas S. &#039;&#039;A Concise Introduction to Linear Programming.&#039;&#039; University of California Los Angeles. https://www.math.ucla.edu/~tom/LP.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constructing a Dual ===&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix} \max(c^Tx)  \\ \ s.t. Ax\leq b \\ x \geq 0 \end{matrix}&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \quad \longrightarrow \quad&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\begin{matrix} \min(b^Ty)  \\ \ s.t. A^Tx\geq c \\ y \geq 0 \end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Duality Properties ===&lt;br /&gt;
The following duality properties hold if the primal problem is a maximization problem as considered above. This especially holds for weak duality.&lt;br /&gt;
&lt;br /&gt;
==== Weak Duality ====&lt;br /&gt;
&lt;br /&gt;
* Let &amp;lt;math&amp;gt;x=[x_1, ... , x_n]  &amp;lt;/math&amp;gt; be any feasible solution to the primal&lt;br /&gt;
* Let &amp;lt;math&amp;gt;y = [y_1, ... , y_m]  &amp;lt;/math&amp;gt;be any feasible solution to the dual&lt;br /&gt;
* &amp;lt;math&amp;gt;\therefore   &amp;lt;/math&amp;gt;(z value for x) &amp;lt;math&amp;gt;\leq  &amp;lt;/math&amp;gt;(v value for y)&lt;br /&gt;
&lt;br /&gt;
The weak duality theorem says that the z value for x in the primal is always less than or equal to the v value of y in the dual. &lt;br /&gt;
&lt;br /&gt;
The difference between (v value for y) and (z value for x) is called the optimal &#039;&#039;duality gap&#039;&#039;, which is always nonnegative. &amp;lt;ref&amp;gt; Bradley, Hax, and Magnanti. (1977). &#039;&#039;Applied Mathematical Programming.&#039;&#039; Addison-Wesley. http://web.mit.edu/15.053/www/AMP-Chapter-04.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Strong Duality Lemma ====&lt;br /&gt;
&lt;br /&gt;
* Let &amp;lt;math&amp;gt;x=[x_1, ... , x_n]  &amp;lt;/math&amp;gt; be any feasible solution to the primal&lt;br /&gt;
* Let &amp;lt;math&amp;gt;y = [y_1, ... , y_m]  &amp;lt;/math&amp;gt;be any feasible solution to the dual&lt;br /&gt;
* If (z value for x) &amp;lt;math&amp;gt;=  &amp;lt;/math&amp;gt; (v value for y), then &#039;&#039;&#039;x&#039;&#039;&#039; is optimal for the primal and &#039;&#039;&#039;y&#039;&#039;&#039; is optimal for the dual&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Graphical Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Essentially, as you choose values of x or y that come closer to the optimal solution, the value of z for the primal, and v for the dual will converge towards the optimal solution. On a number line, the value of z which is being maximized will approach from the left side of the optimum value while the value of v which is being minimized will approach from the right-hand side. &lt;br /&gt;
[[File:Duality numberline .png|thumb|      &#039;&#039;&#039;Figure 1: Graphical Representation of Duality&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
* If the primal is unbounded, then the dual is infeasible&lt;br /&gt;
* If the dual is unbounded, then the primal is infeasible&lt;br /&gt;
&lt;br /&gt;
==== Strong Duality Theorem ====&lt;br /&gt;
If the primal solution has an optimal solution &amp;lt;math&amp;gt;x^*&amp;lt;/math&amp;gt; then the dual problem has an optimal solution &amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt; such that&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textstyle \sum_{j=1}^n \displaystyle c_j x_j^* = \textstyle \sum_{i=1}^m \displaystyle b_i y_i^*&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dual problems and their solutions are used in connection with the following optimization topics:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Karush-Kuhn-Tucker (KKT) Variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The optimal solution to the dual problem is a vector of the KKT multipliers. Consider we have a convex optimization problem where &amp;lt;math&amp;gt;f(x), g_1(x),...,g_m(x) &amp;lt;/math&amp;gt; are convex differentiable functions. Suppose the pair &amp;lt;math&amp;gt;(\bar{x},\bar{u}) &amp;lt;/math&amp;gt; is a saddlepoint of the Lagrangian and that &amp;lt;math&amp;gt;\bar{x} &amp;lt;/math&amp;gt; together with &amp;lt;math&amp;gt;\bar{u} &amp;lt;/math&amp;gt; satisfy the KKT conditions. The optimal solutions of this optimization problem are then &amp;lt;math&amp;gt;\bar{x} &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\bar{u} &amp;lt;/math&amp;gt; with no duality gap. &amp;lt;ref&amp;gt; &#039;&#039;KKT Conditions and Duality.&#039;&#039; (2018, February 18). Dartmouth College. https://math.dartmouth.edu/~m126w18/pdf/part4.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
* To have strong duality as described above, you must meet the KKT conditions. &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dual Simplex Method&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* Solving a Linear Programming problem by the Simplex Method gives you a solution of its dual as a by-product. This simplex algorithm tries to reduce the infeasibility of the dual problem. The dual simplex method can be thought of as a disguised simplex method working on the dual. The dual simplex method is when we maintain dual feasibility by imposing the condition that the objective function includes every variable with a nonpositive coefficient, and terminating when the primal feasibility conditions are satisfied. &amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt; Chvatal, Vasek. (1977). &#039;&#039;The Dual Simplex Method.&#039;&#039; W.H. Freeman and Co. http://cgm.cs.mcgill.ca/~avis/courses/567/notes/ch10.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Duality Interpretation ===&lt;br /&gt;
&lt;br /&gt;
* Duality can be leveraged in a multitude of interpretations. The following example includes an economic optimization problem that leverages duality: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Economic Interpretation Example&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* A rancher is preparing for a flea market sale in which he intends to sell three types of clothing that are all comprised of wool from his sheep: peacoats, hats, and scarves. With locals socializing the high quality of his clothing, the rancher plans to sell out of all of his products each time he opens up a store at the flea market. The following shows the rancher&#039;s materials, time, and profits received for his peacoats, hats, and scarves, respectively.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Clothing&lt;br /&gt;
!Wool (ft^2)&lt;br /&gt;
!Sewing Material (in)&lt;br /&gt;
!Production Time (hrs)&lt;br /&gt;
!Profit ($)&lt;br /&gt;
|-&lt;br /&gt;
|Peacoat&lt;br /&gt;
|12&lt;br /&gt;
|80&lt;br /&gt;
|7&lt;br /&gt;
|175&lt;br /&gt;
|-&lt;br /&gt;
|Hat&lt;br /&gt;
|2&lt;br /&gt;
|40&lt;br /&gt;
|3&lt;br /&gt;
|25&lt;br /&gt;
|-&lt;br /&gt;
|Scarf&lt;br /&gt;
|4&lt;br /&gt;
|20&lt;br /&gt;
|1&lt;br /&gt;
|21&lt;br /&gt;
|}&lt;br /&gt;
* With limited materials and time for an upcoming flea market event in which the rancher will once again sell his products, the rancher needs to determine how he can make best use of his time and materials to ultimately maximize his profits. The rancher is running lower than usual on wool supply; he only has 50 square feet of wool sheets to be made for his clothing this week. Furthermore, the rancher only has 460 inches of sewing materials left. Lastly, with the rancher has a limited time of 25 hours to produce his clothing line.&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
* With the above information the rancher creates the following linear program:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;maximize&#039;&#039;&#039; &amp;lt;math&amp;gt;z=175x_1+25x_2+21x_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;subject to:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;12x_1+2x_2+3x_3\leq 50&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;80x_1+40x_2+20x_3\leq 460&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;7x_1+3x_2+1x_3\leq 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2,x_3\geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Before the rancher finds the optimal number of peacoats, hats, and scarves to produce, a local clothing store owner approaches him and asks if she can purchase his labor and materials for her store. Unsure of what is a fair purchase price to ask for these services, the clothing store owner decides to create a dual of the original primal:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;minimize&#039;&#039;&#039; &amp;lt;math&amp;gt;v=50y_1+460y_2+25y_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;subject to:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;12y_1+80y_2+7y_3\geq 175&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2y_1+40y_2+3y_3\geq 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3y_1+20y_2+1y_3\geq 21&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_1,y_2,y_3\geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* By leveraging the above dual, the clothing store owner is able to determine the asking price for the rancher&#039;s materials and labor. In the dual, the clothing store owner&#039;s objective is now to minimize the asking price, where &amp;lt;math&amp;gt;y_1&amp;lt;/math&amp;gt; represents the the amount of wool, &amp;lt;math&amp;gt;y_2&amp;lt;/math&amp;gt; represents the amount of sewing material, and &amp;lt;math&amp;gt;y_3&amp;lt;/math&amp;gt; represents the rancher&#039;s labor.&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
&lt;br /&gt;
=== Construct the Dual for the following maximization problem: ===&lt;br /&gt;
&#039;&#039;&#039;maximize&#039;&#039;&#039; &amp;lt;math&amp;gt;z=6x_1+14x_2+13x_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;subject to:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tfrac{1}{2}x_1+2x_2+x_3\leq 24&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1+2x_2+4x_3\leq 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3x_1+5x_3\leq 12&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the problem above, form augmented matrix A. The first two rows represent constraints one and two respectively. The last row represents the objective function. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A =\begin{bmatrix} \tfrac{1}{2} &amp;amp; 2 &amp;amp; 1\\ 1 &amp;amp; 2 &amp;amp; 4 \\ 3 &amp;amp; 0 &amp;amp; 5 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the transpose of matrix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^T=\begin{bmatrix} \tfrac{1}{2} &amp;amp; 1 &amp;amp; 3 \\ 2 &amp;amp; 2 &amp;amp; 0 \\ 1 &amp;amp; 4 &amp;amp; 5 \end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From the last row of the transpose of matrix A, we can derive the objective function of the dual. Each of the preceding rows represents a constraint. Note that the original maximization problem had three variables and two constraints. The dual problem has two variables and three constraints.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;minimize&#039;&#039;&#039; &amp;lt;math&amp;gt;v=24y_1+60y_2+12y_3&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;subject to:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tfrac{1}{2}y_1+y_2+3y_3 \geq 6&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2y_1+2y_2\geq 14&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_1+4y_2+5y_3\geq 13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
Duality appears in many linear and nonlinear optimization models. In many of these applications we can solve the dual in cases when solving the primal is more difficult. If for example, there are more constraints than there are variables &#039;&#039;(m &amp;gt;&amp;gt; n)&#039;&#039;, it may be easier to solve the dual. A few of these applications are presented and described in more detail below. &amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt; R.J. Vanderbei. (2008). &#039;&#039;Linear Programming: Foundations and Extensions.&#039;&#039; Springer. http://link.springer.com/book/10.1007/978-0-387-74388-2. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Economics&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* When calculating optimal product to yield the highest profit, duality can be used. For instance, the primal could be to maximize the profit, but by taking the dual the problem can be reframed into minimizing the cost. By transitioning the problem to set the raw material prices one can determine the price that the owner is willing to accept for the raw material. These dual variables are related to the values of resources available, and are often referred to as resource shadow prices. &amp;lt;ref&amp;gt; Alaouze, C.M. (1996). &#039;&#039;Shadow Prices in Linear Programming Problems.&#039;&#039;  New South Wales - School of Economics. https://ideas.repec.org/p/fth/nesowa/96-18.html#:~:text=In%20linear%20programming%20problems%20the,is%20increased%20by%20one%20unit. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Structural Design&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An example of this is in a structural design model, the tension on the beams are the primal variables, and the displacements on the nodes are the dual variables. &amp;lt;ref&amp;gt; Freund, Robert M. (2004, February 10). &#039;&#039;Applied Language Duality for Constrained Optimization.&#039;&#039; Massachusetts Institute of Technology. https://ocw.mit.edu/courses/sloan-school-of-management/15-094j-systems-optimization-models-and-computation-sma-5223-spring-2004/lecture-notes/duality_article.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Electrical Networks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*When modeling electrical networks the current flows can be modeled as the primal variables, and the voltage differences are the dual variables. &amp;lt;ref&amp;gt; Freund, Robert M. (2004, March). &#039;&#039;Duality Theory of Constrained Optimization.&#039;&#039; Massachusetts Institute of Technology. https://ocw.mit.edu/courses/sloan-school-of-management/15-084j-nonlinear-programming-spring-2004/lecture-notes/lec18_duality_thy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Game Theory&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Duality theory is closely related to game theory. Game theory is an approach used to deal with multi-person decision problems. The game is the decision-making problem, and the players are the decision-makers. Each player chooses a strategy or an action to be taken. Each player will then receive a payoff when each player has selected a strategy. The zero sum game that Von Neumann conjectured was the same as linear programming, is when the gain of one player results in the loss of another. This general situation of a zero sum game has similar characteristics to duality. &amp;lt;ref&amp;gt; Stolee, Derrick. (2013). &#039;&#039;Game Theory and Duality.&#039;&#039; University of Illinois at Urbana-Champaigna. https://faculty.math.illinois.edu/~stolee/Teaching/13-482/gametheory.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Support Vector Machines&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* Support Vector Machines (SVM) is a popular machine learning algorithm for classification. The concept of SVM can be broken down into three parts, the first two being Linear SVM and the last being Non-Linear SVM. There are many other concepts to SVM including hyperplanes, functional and geometric margins, and quadratic programming &amp;lt;ref&amp;gt; Jana, Abhisek. (2020, April). &#039;&#039;Support Vector Machines for Beginners - Linear SVM.&#039;&#039; http://www.adeveloperdiary.com/data-science/machine-learning/support-vector-machines-for-beginners-linear-svm/ &amp;lt;/ref&amp;gt;. In relation to Duality, the primal problem is helpful in solving Linear SVM, but in order to get to the goal of solving Non-Linear SVM, the primal problem is not useful. This is where we need Duality to look at the dual problem to solve the Non-Linear SVM &amp;lt;ref&amp;gt; Jana, Abhisek. (2020, April 5). &#039;&#039;Support Vector Machines for Beginners - Duality Problem.&#039;&#039; https://www.adeveloperdiary.com/data-science/machine-learning/support-vector-machines-for-beginners-duality-problem/. &amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Since proofs of Duality theory were published in 1948 &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; duality has been such an important technique in solving linear and nonlinear optimization problems.  This theory provides the idea that the dual of a standard maximum problem is defined to be the standard minimum problem &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;.  This technique allows for every feasible solution for one side of the optimization problem to give a bound on the optimal objective function value for the other &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;.  This technique can be applied to situations such as solving for economic constraints, resource allocation, game theory and bounding optimization problems.  By developing an understanding of the dual of a linear program one can gain many important insights on nearly any algorithm or optimization of data.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2720</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2720"/>
		<updated>2020-12-21T11:12:01Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Network flow problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example and Solution&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
* Reference&lt;br /&gt;
*# Many references listed here are not used in any of the text in the Wiki. Please link them appropriately.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2719</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2719"/>
		<updated>2020-12-21T11:08:59Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Adam */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
* Reference&lt;br /&gt;
*# Many references listed here are not used in any of the text in the Wiki. Please link them appropriately.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2718</id>
		<title>Adam</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Adam&amp;diff=2718"/>
		<updated>2020-12-21T11:08:31Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Nicholas Kincaid (CHEME 6800 Fall 2020)&amp;lt;br&amp;gt;&lt;br /&gt;
Steward: Fengqi You&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Adam &amp;lt;ref name=&amp;quot;adam&amp;quot;&amp;gt; Kingma, Diederik P., and Jimmy Lei Ba. Adam: A Method for Stochastic Optimization. 3rd International Conference on Learning Representations, ICLR 2015 - Conference Track Proceedings, 2015, pp. 1–15.&amp;lt;/ref&amp;gt; is a variant of gradient descent that has become widely popular in the machine learning community. Presented in 2015, the Adam algorithm is often recommended as the default algorithm for training neural networks as it has shown improved performance over other variants of gradient descent algorithms for a wide range of problems. Adam&#039;s name is derived from adaptive moment estimation because uses estimates of the first and second moments of the gradient to perform updates, which can be seen as incorporating gradient descent with momentum (the first-order moment) and [https://optimization.cbe.cornell.edu/index.php?title=RMSProp RMSProp] algorithm&amp;lt;ref&amp;gt;Tieleman, Tijmen, and Hinton, Geoffrey. Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent magnitude, COURSERA: Neural Networks for Machine Learning, 2012.&amp;lt;/ref&amp;gt; (the second-order moment).&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Batch Gradient Descent ===&lt;br /&gt;
In standard batch gradient descent, the parameters, &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, of the objective function &amp;lt;math&amp;gt;f(\theta)&amp;lt;/math&amp;gt;, are updated based on the gradient of &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; with respect to &lt;br /&gt;
&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; for the entire training dataset, as&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; g_t =\nabla_{\theta_{t-1}} f \big(\theta_{t-1} \big) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha g_t , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; is defined as the learning rate and is a hyper-parameter of the optimization algorithm, and &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; is the iteration number. Key challenges of the standard gradient descent method are the tendency to get stuck in local minima and/or saddle points of the objective function, as well as choosing a proper learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, which can lead to poor convergence.&amp;lt;ref&amp;gt;Ruder, Sebastian. An Overview of Gradient Descent Optimization Algorithms, 2016, pp. 1–14, http://arxiv.org/abs/1609.04747.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Gradient Descent ===&lt;br /&gt;
Another variant of gradient descent is [https://optimization.cbe.cornell.edu/index.php?title=Stochastic_gradient_descent stochastic gradient descent (SGD)], the gradient is computed and parameters are updated as in equation 1, but for each training sample in the training set. &lt;br /&gt;
=== Mini-Batch Gradient Descent ===&lt;br /&gt;
In between batch gradient descent and stochastic gradient descent, mini-batch gradient descent computes parameters updates on the gradient computed from a subset of the training set, where the size of the subset is often referred to as the batch size.&lt;br /&gt;
&lt;br /&gt;
== Adam Algorithm ==&lt;br /&gt;
The Adam algorithm first computes the gradient, &amp;lt;math&amp;gt;g_t&amp;lt;/math&amp;gt; of the objective function with respect to the parameters &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, but then computes and stores first and second order moments of the gradient, &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;&lt;br /&gt;
respectively, as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2, &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt; are hyper-parameters that are &amp;lt;math&amp;gt;\in [0,1]&amp;lt;/math&amp;gt;. These parameters can seen as exponential decay rates of the estimated moments, as the previous value is successively multiplied by the value less than 1 in each iteration. The authors of the original paper suggest values &amp;lt;math&amp;gt;\beta_1 = 0.9&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\beta_2 = 0.999&amp;lt;/math&amp;gt;. In the current notation, the first iteration of the algorithm is at &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; and both, &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; are initialized to zero. Since both moments are initialized to zero, at early time steps, these values are biased towards zero. To counter this, the authors proposed a corrected update to &amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt; as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_t = m_t / (1-\beta_1 ^t) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_t = v_t / (1-\beta_2 ^t). &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Finally, the parameter update is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - \alpha \cdot \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon), &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; is a small constant for stability. The authors recommend a value of &amp;lt;math&amp;gt;\epsilon=10^{-8}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Numerical Example ==&lt;br /&gt;
&lt;br /&gt;
[[File:Contour.png|thumb|Contour plot of the loss function showing the trajectory of Adam algorithm from the initial point]]&lt;br /&gt;
&lt;br /&gt;
[[File:Model fit .png|thumb|Plot showing original data points and resulting model fit from the Adam algorithm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To illustrate how updates occur in the Adam algorithm, consider a linear, least-squares regression problem formulation. The table below shows a sample data-set of student exam grades and the number of hours spent studying for the exam. The goal of this example will be to generate a linear model to predict exam grades as a function of time spent studying.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Hours Studying || 9.0 || 4.9 || 1.6 || 1.9 || 7.9 || 2.0 || 11.5 || 3.9 || 1.1 || 1.6 || 5.1 || 8.2 || 7.3 || 10.4 || 11.2&lt;br /&gt;
|-&lt;br /&gt;
| Exam Grad || 88.0 || 72.3 || 66.5 || 65.1 || 79.5 || 60.8 || 94.3, || 66.7 || 65.4 || 63.8 || 68.4 || 82.5 || 75.9 || 87.8 || 85.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The hypothesized model function will be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_\theta(x) = \theta_0 + \theta_1 x.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cost function is defined as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; J({\theta}) =  \frac{1}{2}\sum_i^n \big(f_\theta(x_i) - y_i \big)^2, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where the &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt; coefficient is used only to make the derivatives cleaner. The optimization problem can then be formulated as trying to find the values of &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; that minimize the squared residuals of &amp;lt;math&amp;gt;f_\theta(x)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \mathrm{argmin}_{\theta} \quad \frac{1}{n}\sum_{i}^n \big(f_\theta(x_i) - y_i \big) ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, parameters will be updated after every data point i.e. a batch size of 1. For a single data point the derivatives of the cost function with respect to &amp;lt;math&amp;gt;\theta_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big(f_\theta(x) - y \big)   &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big(f_\theta(x) - y \big) x &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial values of &amp;lt;math&amp;gt;{\theta}&amp;lt;/math&amp;gt; will be set to [50, 1] and  The learning rate, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, is set to 0.1 and the suggested parameters for &amp;lt;math&amp;gt;\beta_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\beta_2&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt; are used. With the first data sample of &amp;lt;math&amp;gt; (x,y)=[8.98, 88.01]&amp;lt;/math&amp;gt;, the computed gradients are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_0} = \big((50 + 1\cdot 9 - 88.01 \big) = -29.0  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial J(\theta)}{\partial \theta_1} = \big((50 + 1\cdot 9 - 88.01 \big)\cdot 9.0 = -261  &amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;math&amp;gt;m_0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_0&amp;lt;/math&amp;gt; being initialized to zero, the calculations of &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; m_1 = 0.9 \cdot 0 + (1-0.9) \cdot \begin{bmatrix} -29\\ -261 \end{bmatrix} = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; v_1 = 0.999\cdot 0 + (1-0.999) \cdot \begin{bmatrix} -29^2\\-261^2 \end{bmatrix} = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix} , &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bias-corrected terms are computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{m}_1 = \begin{bmatrix} -2.9\\ -26.1\end{bmatrix} \frac{1}{ (1-0.9^1)} =  \begin{bmatrix} -29.0\\-261.1\end{bmatrix}&amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \hat{v}_1 = \begin{bmatrix} 0.84\\ 68.2\end{bmatrix}  \frac{1} {(1-0.999^1)} = \begin{bmatrix} 851.5\\68168\end{bmatrix}. &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the parameter update is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_0 = 50 - 0.1 \cdot -29 / (\sqrt{851.5} + 10^{-8}) = 50.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_1 = 1 - 0.1 \cdot -261 / (\sqrt{68168} + 10^{-8}) = 1.1 &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This procedure is repeated until the parameters have converged, giving &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; values of &amp;lt;math&amp;gt;[58.98, 2.72]&amp;lt;/math&amp;gt;. The figures to the right show the trajectory of the Adam algorithm over a contour plot of the objective function and the resulting model fit. It should be noted that the stochastic gradient descent algorithm with a learning rate of 0.1 diverges and with a rate of 0.01, SGD oscillates around the global minimum due to the large magnitudes of the gradient in the &amp;lt;math&amp;gt;\theta_1&amp;lt;/math&amp;gt; direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
[[File:Adam training.png|thumb|Comparison of training a multilayer neural network on MNIST images for different gradient descent algorithms published in the original Adam paper (Kingma, 2015)&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
The Adam optimization algorithm has been widely used in machine learning applications to train model parameters. When used with backpropagation, the Adam algorithm has been shown to be a very robust and efficient method for training artificial neural networks and is capable of working well with a variety of structures and applications. In their original paper, the authors present three different training examples, logistic regression, multi-layer neural networks for classification of MNIST images, and a convolutional neural network (CNN). The training results from the original Adam paper showing the objective function cost vs. the iteration over the entire data set for the multi-layer neural network is shown to the right.&lt;br /&gt;
&lt;br /&gt;
== Variants of Adam ==&lt;br /&gt;
=== AdaMax ===&lt;br /&gt;
AdaMax&amp;lt;ref name=&amp;quot;adam&amp;quot; /&amp;gt; is a variant of the Adam algorithm proposed in the original Adam paper that uses an exponentially weighted infinity norm instead of the second-order moment estimate. The weighted infinity norm updated &amp;lt;math&amp;gt;u_t&amp;lt;/math&amp;gt;, is computed as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; u_t = \max(\beta_2 \cdot u_{t-1}, |g_t|). &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter update then becomes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \theta_t = \theta_{t-1} - (\alpha / (1-\beta_1^t)) \cdot m_t / u_t. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nadam ===&lt;br /&gt;
The Nadam algorithm&amp;lt;ref&amp;gt;Dozat, Timothy. Incorporating Nesterov Momentum into Adam. ICLR Workshop, no. 1, 2016, pp. 2013–16. &amp;lt;/ref&amp;gt; was proposed in 2016 and incorporates the Nesterov Accelerate Gradient (NAG)&amp;lt;ref&amp;gt;Nesterov, Yuri. A method of solving a convex programming problem with convergence rate O(1/k^2). In Soviet Mathematics Doklady, 1983, pp. 372-376.&amp;lt;/ref&amp;gt;, a popular momentum like SGD variation, into the first-order moment term. &lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Adam is a variant of the gradient descent algorithm that has been widely adopted in the machine learning community. Adam can be seen as the combination of two other variants of gradient descent, SGD with momentum and RMSProp. Adam uses estimations of the first and second-order moments of the gradient to adapt the parameter update. These moment estimations are computed via moving averages,&amp;lt;math&amp;gt;m_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;, of the gradient and the squared gradient respectfully. In a variety of neural network training applications, Adam has shown increased convergence and robustness over other gradient descent algorithms and is often recommended as the default optimizer for training.&amp;lt;ref&amp;gt; &amp;quot;Neural Networks Part 3: Learning and Evaluation,&amp;quot; CS231n: Convolutional Neural Networks for Visual Recognition, Stanford Unversity, 2020&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2717</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2717"/>
		<updated>2020-12-21T11:06:21Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* RMSProp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
* Reference&lt;br /&gt;
*# Many references listed here are not used in any of the text in the Wiki. Please link them appropriately.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=RMSProp&amp;diff=2716</id>
		<title>RMSProp</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=RMSProp&amp;diff=2716"/>
		<updated>2020-12-21T11:05:24Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Jason Huang (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
RMSProp, root mean square propagation, is an optimization algorithm/method designed for Artificial Neural Network (ANN) training. And it is an unpublished algorithm first proposed in the Coursera course. [https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf “Neural Network for Machine Learning”] lecture six by Geoff Hinton.&amp;lt;sup&amp;gt;[9]&amp;lt;/sup&amp;gt; RMSProp lies in the realm of adaptive learning rate methods, which have been growing in popularity in recent years because it is the extension of Stochastic Gradient Descent (SGD) algorithm, momentum method, and the foundation of Adam algorithm. One of the applications of RMSProp is the stochastic technology for mini-batch gradient descent.  &lt;br /&gt;
&lt;br /&gt;
==Theory and Methodology==&lt;br /&gt;
&lt;br /&gt;
=== Perceptron and Neural Networks ===&lt;br /&gt;
Perceptron is an algorithm used for supervised learning of binary classifier, and also can be regard as the simplify version/single layer of the Artificial Neural Network (ANN) to better understanding the neural network, which function is to imitate the human brain and conscious center function in Artificial Intelligence(AI) and present the small unit behavior in neural system when human thinking. The basis form of the perceptron consists inputs, weights, bias, net sum and activation function. &lt;br /&gt;
[[File:Screen Shot 2020-12-14 at 01.09.28.png|thumb|Basis form of perceptron ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of the perceptron is started by initiating input value &amp;lt;math&amp;gt;x_{1},x_{2} &amp;lt;/math&amp;gt; and multiplying them by their weights to obtain &amp;lt;math&amp;gt;w_{1}, w_{2} &amp;lt;/math&amp;gt;. All of the weights will be added up together to create the weight sum&amp;lt;math&amp;gt; \sum_i  w_{i} &amp;lt;/math&amp;gt;. And the weighted sum is then applied to the activation function &amp;lt;math&amp;gt;f  &amp;lt;/math&amp;gt; to produce the perceptron&#039;s output. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A neural network works similarly to the human brain’s neural network. A “neuron” in a neural network is a mathematical function that collects and classifies information according to a specific architecture. A neural network contains layers of interconnected nodes, which can be regards as the perception and is similar to the multiple linear regression. The perceptron transfers the signal by a multiple linear regression into an activation function which may be nonlinear.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;RProp&#039;&#039;&#039; ===&lt;br /&gt;
RProp, or we call Resilient Back Propagation, is the widely used algorithm for supervised learning with multi-layered feed-forward networks. The basic concept of the backpropagation learning algorithm is the repeated application of the chain rule to compute the influence of each weight in the network with respect to an arbitrary error. The derivatives equation of error function can be represented as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{\partial E}{\partial w_{ij}} =  \frac{\partial E}{\partial s_{i}} \frac{\partial s_{i}}{\partial net_{i}} \frac{\partial net_{i}}{\partial w_{ij}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w_{ij}&amp;lt;/math&amp;gt; is the weight from neuron &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; to neuron &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_{i}&amp;lt;/math&amp;gt; is the output , and &amp;lt;math&amp;gt;net_{i}&amp;lt;/math&amp;gt; is the weighted sum of the inputs of neurons &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. Once the weight of each partial derivatives is known, the error function can be presented by performing a simple gradient descent:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w_{ij}(t+1) = w_{ij}(t) - \epsilon \frac{\partial E}{\partial w_{ij}}(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The choice of the learning rate &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;, which scales the derivative, has an important effect on the time needed until convergence is reached. If it is set too small, too many steps are needed to reach an acceptable solution; on the contrary, a large learning rate will possibly lead to oscillation, preventing the error to fall below a certain value&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition, RProp can combine the method with momentum method, to prevent above problem and to accelerate the convergence rate, the equation can rewrite as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \Delta w_{ij}(t) = \epsilon \frac{\partial E}{\partial w_{ij}}(t) + \mu \Delta w_{ij}(t-1) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, It turns out that the optimal value of the momentum parameter &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; in above equation is equally problem dependent as the learning rate &amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;, and that no general improvement can be accomplished. Besides, RProp algorithm is not function well when we have very large datasets and need to perform mini-batch weights updates. Therefore, scientist proposal a novel algorithm, RMSProp, which can cover more scenarios than RProp.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;RMSProp&#039;&#039;&#039; ===&lt;br /&gt;
RProp algorithm does not work for mini-batches is because it violates the central idea behind stochastic gradient descent, when we have a small enough learning rate, it averages the gradients over successive mini-batches. To solve this issue, consider the weight, that gets the gradient 0.1 on nine mini-batches, and the gradient of -0.9 on tenths mini-batch, RMSProp did force those gradients to roughly cancel each other out, so that the stay approximately the same when computing.&lt;br /&gt;
&lt;br /&gt;
By using the sign of gradient from RProp algorithm, and the mini-batches efficiency, and averaging over mini-batches which allows combining gradients in the right way. RMSProp keep moving average of the squared gradients for each weight. And then we divide the gradient by square root the mean square.&lt;br /&gt;
&lt;br /&gt;
The updated equation can be performed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E[g^2](t) =  \beta E[g^2](t-1) + (1- \beta) (\frac{\partial c}{\partial w})^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w_{ij}(t) = w_{ij}(t-1) - \frac{ \eta }{ \sqrt{E[g^2]}}  \frac{\partial c}{\partial w_{ij}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;E[g] &amp;lt;/math&amp;gt; is the moving average of squared gradients, &amp;lt;math&amp;gt; \delta c /  \delta w &amp;lt;/math&amp;gt; is gradient of the cost function with respect to the weight, &amp;lt;math&amp;gt;\eta &amp;lt;/math&amp;gt; is the learning rate and &amp;lt;math&amp;gt;\beta&lt;br /&gt;
 &amp;lt;/math&amp;gt; is moving average parameter (default value — 0.9, to make the sum of default gradient value 0.1 on nine mini-batches and -0.9 on tenths is approximate zero, and the default value &amp;lt;math&amp;gt;\eta &amp;lt;/math&amp;gt; is 0.001 as per experience).&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
For the simple unconstrained optimization problem &amp;lt;math&amp;gt;min f(x) = 0.1x_{1}^2 +2x_{2}^2 &amp;lt;/math&amp;gt; : &lt;br /&gt;
&lt;br /&gt;
settle &amp;lt;math&amp;gt;\beta&lt;br /&gt;
 &amp;lt;/math&amp;gt; = 0.9, &amp;lt;math&amp;gt;\eta &amp;lt;/math&amp;gt; = 0.4, , and transform the optimization problem to the standard RMSProp form, the equations are presented as below: &lt;br /&gt;
[[File:Trajectory.png|alt=the visualization of the trajectory of RMSProp algorithm|thumb|The visualization of the trajectory of RMSProp algorithm]]&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial c_{1}}{\partial w_{2}}, \frac{\partial c_{2}}{\partial w_{2}} = 0.2x_{1}, 4x_{2}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E_{1}(t) = 0.9 E_{1}(t-1) + (1 - 0.9)(\frac{\partial c_{1}}{\partial w_{1}})^2&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E_{2}(t) = 0.9 E_{2}(t-1) + (1 - 0.9)(\frac{\partial c_{2}}{\partial w_{2}})^2&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w_{1}(t) = w_{1}(t-1) - \frac{0.4}{ \sqrt{E_{1}}} \frac{\partial c_{1}}{\partial w_{1}}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w_{2}(t) = w_{2}(t-1) - \frac{0.4}{ \sqrt{E_{1}}} \frac{\partial c_{2}}{\partial w_{2}}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
while using programming language to help us to solve optimization problem and visualize the trajectory of RMSProp algorithm, we can observe that the curve converge to a certain point. For this particular question, minimize solution &amp;lt;math&amp;gt;0 &amp;lt;/math&amp;gt; will be obtained with &amp;lt;math&amp;gt;(x_{1}, x_{2}) &amp;lt;/math&amp;gt; is &amp;lt;math&amp;gt;(0, 0) &amp;lt;/math&amp;gt;.  [[File:1 - 2dKCQHh - Long Valley.gif|thumb|Visualizing Optimization algorithm comparing convergence with similar algorithm&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;]]  &lt;br /&gt;
&lt;br /&gt;
== Applications and Discussion ==&lt;br /&gt;
[[File:2 - pD0hWu5 - Beale&#039;s function.gif|thumb|Visualizing Optimization algorithm comparing convergence with similar algorithm&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
The applications of RMSprop concentrate on the optimization with complex function like the neural network, or the non-convex optimization problem with adaptive learning rate, and widely used in the stochastic problem. The RMSprop optimizer restricts the oscillations in the vertical direction. Therefore, we can increase the learning rate or the algorithm could take larger steps in the horizontal direction converging to faster the similar approach gradient descent algorithm combine with momentum method.&lt;br /&gt;
&lt;br /&gt;
In the first visualization scheme, the gradients based optimization algorithm has a different convergence rate. As the visualizations are shown, without scaling based on gradient information algorithms are hard to break the symmetry and converge rapidly. RMSProp has a relative higher converge rate than SGD, Momentum, and NAG, beginning descent faster, but it is slower than Ada-grad, Ada-delta, which are the Adam based algorithm. In conclusion, when handling the large scale/gradients problem, the scale gradients/step sizes like Ada-delta, Ada-grad, and RMSProp perform better with high stability.&lt;br /&gt;
&lt;br /&gt;
Ada-grad adaptive learning rate algorithms that look a lot like RMSProp. Ada-grad adds element-wise scaling of the gradient-based on the historical sum of squares in each dimension. This means that we keep a running sum of squared gradients, and then we adapt the learning rate by dividing it by the sum to get the result. Considering the concepts in RMSProp widely used in other machine learning algorithms, we can say that it has high potential to coupled with other methods such as momentum,...etc.  &lt;br /&gt;
&lt;br /&gt;
== Conclusion==&lt;br /&gt;
RMSProp, root mean squared propagation is the optimization machine learning algorithm to train the Artificial Neural Network (ANN)  by different adaptive learning rate and derived from the concepts of gradients descent and RProp. Combining averaging over mini-batches, efficiency, and the gradients over successive mini-batches, RMSProp can reach the faster convergence rate than the original optimizer, but lower than the advanced optimizer such as Adam. As knowing the high performance of RMSProp and possibility of combining with other algorithm, harder problem could be better described and converged in the future.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
1. A. Radford, &amp;quot;[https://imgur.com/a/Hqolp#NKsFHJb Visualizing Optimization Algos (open sourse)&amp;quot;.] &lt;br /&gt;
&lt;br /&gt;
2. R. Yamashita, M Nishio and R KGian, &amp;quot;Convolutional neural networks: an overview and application in radiology&amp;quot;, pp. 9:611–629, 2018.[[File:3 - NKsFHJb - Saddle Point.gif|thumb|Visualizing Optimization algorithm comparing convergence with similar algorithm&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;]]3. V. Bushave, &amp;quot;Understanding RMSprop — faster neural network learning&amp;quot;, 2018.&lt;br /&gt;
&lt;br /&gt;
4. V. Bushave, &amp;quot;How do we ‘train’ neural networks ?&amp;quot;, 2017.&lt;br /&gt;
&lt;br /&gt;
5. S. Ruder, &amp;quot;An overview of gradient descent optimization algorithms&amp;quot; ,2016.&lt;br /&gt;
&lt;br /&gt;
6. R. Maksutov, &amp;quot;Deep study of a not very deep neural network. Part 3a: Optimizers overview&amp;quot;, 2018.&lt;br /&gt;
&lt;br /&gt;
7. M. Riedmiller, H Braun, &amp;quot;A Direct Adaptive Method for Faster Back-propagation Learning: The RPROP Algorithm&amp;quot;, pp.586-591, 1993.&lt;br /&gt;
&lt;br /&gt;
8. D. Garcia-Gasulla, &amp;quot;An Out-of-the-box Full-network Embedding for Convolutional Neural Networks&amp;quot; pp.168-175, 2018.&lt;br /&gt;
&lt;br /&gt;
9. [https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf Geoffrey Hinton, &amp;quot;Coursera Neural Networks for Machine Learning lecture 6&amp;quot;, 2018.] &lt;br /&gt;
&lt;br /&gt;
10. [https://www.programcreek.com/python/example/104283/keras.optimizers.RMSprop Python keras.optimizers.RMSprop() Examples.]&lt;br /&gt;
&lt;br /&gt;
11. [https://d2l.ai/chapter_optimization/rmsprop.html RMSProp Algorithm Implementation Example.]&lt;br /&gt;
&lt;br /&gt;
12. S.De, A. Mukherjee, and E. Ullah, &amp;quot;Convergence guarantees for RMSProp and Adam in non-convex optimization and and empirical  comparison to Nesterov acceleration&amp;quot;, conference paper at ICLR, 2019.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2715</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2715"/>
		<updated>2020-12-21T10:55:55Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Adaptive robust optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2714</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2714"/>
		<updated>2020-12-21T10:54:23Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Branch and cut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2713</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2713"/>
		<updated>2020-12-21T10:53:27Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Branch and cut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted. Please fix the same.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Branch_and_cut&amp;diff=2712</id>
		<title>Branch and cut</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Branch_and_cut&amp;diff=2712"/>
		<updated>2020-12-21T10:53:15Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Strong Branching: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Lindsay Siegmundt, Peter Haddad, Chris Babbington, Jon Boisvert, Haris Shaikh (SysEn 6800 Fall 2020)&lt;br /&gt;
&lt;br /&gt;
Steward: Wei-Han Chen, Fengqi You&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Branch and Cut methodology was discovered in the 90s as a way to solve/optimize Mixed-Integer Linear Programs (Karamanov, Miroslav)&amp;lt;ref&amp;gt;Karamanov, Miroslav. “Branch and Cut: An Empirical Study.” &#039;&#039;Carnegie Mellon University&#039;&#039; , Sept. 2006, https://www.cmu.edu/tepper/programs/phd/program/assets/dissertations/2006-operations-research-karamanov-dissertation.pdf.&amp;lt;/ref&amp;gt;. This concept is comprised of two known optimization methodologies - Branch and Bound and Cutting Planes. Utilizing these two tools allows for the Branch and Cut to find an optimal solution through relaxing the problem to produce the upper bound. Relaxing the problem allows for the complex problem to be simplified in order for it to be solve more easily. Furthermore, the upper bound represents the highest value the objective can take in order to be feasible. The optimal solution is found when the objective is equal to the upper bound (Luedtke, Jim)&amp;lt;ref&amp;gt;Luedtke, Jim. “The Branch-and-Cut Algorithm for Solving Mixed-Integer Optimization Problems.” &#039;&#039;Institute for Mathematicians and Its Applications&#039;&#039;, 10 Aug. 2016, https://www.ima.umn.edu/materials/2015-2016/ND8.1-12.16/25397/Luedtke-mip-bnc-forms.pdf.&amp;lt;/ref&amp;gt;. This methodology is critical to the future of optimization since it combines two common tools in order to utilize each component in order to find the optimal solution. Moving forward, the critical components of different methodologies could be combined in order to find optimality in a more simple and direct manner. &lt;br /&gt;
&lt;br /&gt;
== Methodology &amp;amp; Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Methodology ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Abbreviation Details&lt;br /&gt;
!Acronym&lt;br /&gt;
!Expansion&lt;br /&gt;
|-&lt;br /&gt;
|LP&lt;br /&gt;
|Linear Programming&lt;br /&gt;
|-&lt;br /&gt;
|B&amp;amp;B&lt;br /&gt;
|Branch and Bound&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Most Infeasible Branching: ====&lt;br /&gt;
Most infeasible branching is a very popular method that picks the variable with fractional part closest to &amp;lt;math&amp;gt;0:5&amp;lt;/math&amp;gt;, i.e.,&amp;lt;math&amp;gt; si = 0:5-|xA_i- xA_i-0:5|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Branching rules revisited Tobias Achterberga;∗, Thorsten Kocha, Alexander Martinb https://www-m9.ma.tum.de/downloads/felix-klein/20B/AchterbergKochMartin-BranchingRulesRevisited.pdf&amp;lt;/ref&amp;gt;. Most infeasible branching picks a variable where the least tendency can be recognized to which side the variable should be rounded. However, the performance of this method is not any superior to the rule of selecting a variable randomly.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Strong Branching:&#039;&#039;&#039; ====&lt;br /&gt;
For each fractional variable, strong branching tests the dual bound increase by computing the LP relaxations result from the branching on that variable. As a branching variable for the current node, the variable that leads to the largest increases is selected. Despite its obvious simplicity, strong branching is so far the most powerful branching technique in terms of the number of nodes available in the B&amp;amp;B tree, this effectiveness can however be accomplished only at the cost of computation.&amp;lt;ref&amp;gt;A Branch-and-Cut Algorithm for Mixed Integer Bilevel Linear Optimization Problems and Its Implementation&amp;lt;nowiki/&amp;gt;https://coral.ise.lehigh.edu/~ted/files/papers/MIBLP16.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pseudo Cost:&#039;&#039;&#039; ====&lt;br /&gt;
[[File:Image.png|thumb|Pure psuedo cost branching]]&lt;br /&gt;
&lt;br /&gt;
Another way to approximate a relaxation value is by utilizing a pseudo cost method. The pseudo-cost of a variable is an estimate of the per unit change in the objective function from making the value of the variable to be rounded up or down.  For each variable we choose variable with the largest estimated LP objective gain&amp;lt;ref&amp;gt;Advances in Mixed Integer Programming http://scip.zib.de/download/slides/SCIP-branching.ppt&amp;lt;/ref&amp;gt;.   &lt;br /&gt;
===&#039;&#039;&#039;Algorithm&#039;&#039;&#039;===&lt;br /&gt;
Branch and Cut for is a variation of the Branch and Bound algorithm. Branch and Cut incorporates Gomery cuts allowing the search space of the given problem. The standard Simplex Algorithm will be used to solve each Integer Linear Programming Problem (LP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min: c^tx&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s.t. Ax &amp;lt; b&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x \geq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i = int, i = 1,2,3...,n&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Above is a mix-integer linear programming problem. x and c are a part of the n-vector. These variables can be set to 0 or 1 allow binary variables. The above problem can be denoted as &amp;lt;math&amp;gt;LP_n &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an Algorithm to utilize the Branch and Cut algorithm with Gomery cuts and Partitioning:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 0:&#039;&#039;&#039;&lt;br /&gt;
 Upper Bound = ∞&lt;br /&gt;
 Lower Bound = -∞&lt;br /&gt;
&#039;&#039;&#039;Step 1. Initialize:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the first node as &amp;lt;math&amp;gt;LP_0&amp;lt;/math&amp;gt; while setting the active nodes set as &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. The set can be accessed via &amp;lt;math&amp;gt;LP_n &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Step 2. Terminate:&#039;&#039;&#039;====&lt;br /&gt;
Step 3. Iterate through list L:&lt;br /&gt;
&lt;br /&gt;
While &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is not empty (i is the index of the list of L), then:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3.1. Convert to a Relaxation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solve 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Solve for the Relaxed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3.3.&#039;&#039;&#039;&lt;br /&gt;
 If Z is infeasible:&lt;br /&gt;
    Return to step 3.&lt;br /&gt;
 else:&lt;br /&gt;
    Continue with solution Z.&lt;br /&gt;
&#039;&#039;&#039;Step 4. Cutting Planes:&#039;&#039;&#039;&lt;br /&gt;
 If a cutting plane is found:&lt;br /&gt;
    then add to the Linear Relaxation problem (as a constraint) and return to step 3.2&lt;br /&gt;
 Else:&lt;br /&gt;
    Continue.&lt;br /&gt;
&#039;&#039;&#039;Step 5. Pruning and Fathoming:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(a)If ≥ Z:, then go to step 3.&lt;br /&gt;
 If Z^l &amp;lt;= Z AND X_i is an integral feasible:&lt;br /&gt;
    Z = Z^i&lt;br /&gt;
    Remove all Z^i from Set(L)&lt;br /&gt;
&#039;&#039;&#039;Step 6. Partition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;D^{lj=k}_{j=1}&amp;lt;/math&amp;gt; be a partition of the constraint set &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; of problem  &amp;lt;math&amp;gt;LP_l&amp;lt;/math&amp;gt;. Add problems &amp;lt;math&amp;gt;D^{lj=k}_{j=1}&amp;lt;/math&amp;gt; to L, where  &amp;lt;math&amp;gt;LP^l_j&amp;lt;/math&amp;gt; is &amp;lt;math&amp;gt;LP_l&amp;lt;/math&amp;gt; with feasible region restricted to &amp;lt;math&amp;gt;D^l_j&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Z_{lj}&amp;lt;/math&amp;gt; for j=1,...k is set to the value of &amp;lt;math&amp;gt;Z^l&amp;lt;/math&amp;gt; for the parent problem l. Go to step 3.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;Benders, J. F. (Sept. 1962), &amp;quot;Partitioning procedures for solving mixed-variables programming problems&amp;quot;, Numerische Mathematik 4(3): 238–252.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
First, list out the MILP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to original LP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-19.56, x_1=1.88, x_2=1.72 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Branch on x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; to generate sub-problems&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\geq2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to fist branch sub-problem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-15, x_1=2, x_2=1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\leq1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to second branch sub-problem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z =-14.5, x_1=1, x_2=1.5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adding a cut&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;min  \ z=-4x_1-7x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;6x_1 + x_2 \leq13&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;-x_1+4x_2\leq5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2x_1+x_2\leq 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1\leq1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_1,x_2\geq0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution to cut LP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=-13.222,x_1=.778,x_2=1.444&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Application==&lt;br /&gt;
Several of the Branch and Cut applications are described below in more detail and how they can be used. These applications serve as methods in which Branch and Cut can be used to optimize various problems efficiently.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Combinatorial Optimization&#039;&#039;&#039; ===&lt;br /&gt;
Combinatorial Optimization is a great application for Branch and Cut. This style of optimization is the methodology of utilizing the finite known sets and information of the sets to optimize the solution. The original intent for this application was for maximizing flow as well as in the transportation industry (Maltby and Ross). This combinatorial optimization has also taken on some new areas where it is used often. Combinatorial Optimization is now an imperative component in studying artificial intelligence and machine learning algorithms to optimize solutions. The finite sets that Combinatorial Optimization tends to utilize and focus on includes graphs, partially ordered sets, and structures that define linear independence call matroids.&amp;lt;ref&amp;gt;[https://brilliant.org/wiki/combinatorial-optimization/ Maltby, Henry, and Eli Ross. “Combinatorial Optimization.” &#039;&#039;Brilliant Math &amp;amp; Science Wiki&#039;&#039;, https://brilliant.org/wiki/combinatorial-optimization/.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Bender’s Decomposition&#039;&#039;&#039; ===&lt;br /&gt;
Bender’s Decomposition is another Branch and Cut application that is utilized widely in Stochastic Programming. Bender’s Decomposition is where you take the initial problem and divide into two distinct subsets. By dividing the problem into two separate problems you are able to solve each set easier than the original instance (Benders). Therefore the first problem within the subset created can be solved for the first variable set. The second sub problem is then solved for, given that first problem solution. Doing this allows for the sub problem to be solved to determine whether the first problem is infeasible (Benders). Bender’s cuts can be added to constrain the problem until a feasible solution can be found.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Large-Scale Symmetric Traveling Salesmen Problem&#039;&#039;&#039; ===&lt;br /&gt;
The Large-Scale Symmetric Traveling Salesmen Problem is a common problem that was always looked into optimizing for the shortest route while visiting each city once and returning to the original city at the end. On a larger scale this style of problem must be broken down into subsets or nodes (SIAM). By constraining this style of problem such as the methods of Combinatorial Optimization, the Traveling Salesmen Problem can be viewed as partially ordered sets. By doing this on a large scale with finite cities you are able to optimize the shortest path taken and ensure each city is only visited once.&amp;lt;ref&amp;gt;Society for Industrial and Applied Mathematics. “SIAM Rev.” &#039;&#039;SIAM Review&#039;&#039;, 18 July 2006, https://epubs.siam.org/doi/10.1137/1033004&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Submodular Function&#039;&#039;&#039; ===&lt;br /&gt;
Submodular Function is another function in which is used throughout artificial intelligence as well as machine learning. The reason for this is because as inputs are increased into the function the value or outputs decrease. This allows for a great optimization features in the cases stated above because inputs are continually growing. This allows for machine learning and artificial intelligence to continue to grow based on these algorithms (Tschiatschek, Iyer, and Bilmes)&amp;lt;ref&amp;gt;S. Tschiatschek, R. Iyer, H. Wei and J. Bilmes, Learning Mixtures of Submodular Functions for Image Collection Summarization, NIPS-2014.&amp;lt;/ref&amp;gt;. By enforcing new inputs to the system the system will learn more and more to ensure it optimizes the solution that is to be made.&amp;lt;ref&amp;gt;A. Krause and C. Guestrin, Beyond Convexity: Submodularity in Machine Learning, Tutorial at ICML-2008&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The Branch and Cut is an optimization algorithm used to optimize integer linear programming. It combines two other optimization algorithms - branch and bound and cutting planes in order to utilize the results from each method in order to create the most optimal solution. There are three different methodologies used within the specific method - most infeasible branching, strong branching, and pseudo code. Furthermore, Branch and Cut can be utilized it multiple scenarios - Submodular function, large-scale symmetric traveling salesmen problem, bender&#039;s decomposition, and combination optimization which increases the impact of the methodology. &lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2711</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2711"/>
		<updated>2020-12-21T10:51:38Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Heuristic algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted. Please fix the same.&lt;br /&gt;
*# Fix typos:  e.g., repeated “for the current”.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Heuristic_algorithms&amp;diff=2710</id>
		<title>Heuristic algorithms</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Heuristic_algorithms&amp;diff=2710"/>
		<updated>2020-12-21T10:51:16Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Anmol Singh (as2753)&lt;br /&gt;
&lt;br /&gt;
Steward: Fengqi You, Allen Yang&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
In mathematical programming, a heuristic algorithm is a procedure that determines near-optimal solutions to an optimization problem. However, this is achieved by trading optimality, completeness, accuracy, or precision for speed.&amp;lt;ref&amp;gt; Eiselt, Horst A et al. Integer Programming and Network Models. Springer, 2011.&amp;lt;/ref&amp;gt; Nevertheless, heuristics is a widely used technique for a variety of reasons:&lt;br /&gt;
&lt;br /&gt;
*Problems that do not have an exact solution or for which the formulation is unknown&lt;br /&gt;
*The computation of a problem is computationally intensive&lt;br /&gt;
*Calculation of bounds on the optimal solution in branch and bound solution processes&lt;br /&gt;
==Methodology==&lt;br /&gt;
Optimization heuristics can be categorized into two broad classes depending on the way the solution domain is organized:&lt;br /&gt;
&lt;br /&gt;
===Construction methods (Greedy algorithms)===&lt;br /&gt;
The greedy algorithm works in phases, where the algorithm makes the optimal choice at each step as it attempts to find the overall optimal way to solve the entire problem.&amp;lt;ref&amp;gt;&lt;br /&gt;
&#039;&#039;Introduction to Algorithms&#039;&#039; (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 16 &amp;quot;Greedy Algorithms&amp;quot;.&amp;lt;/ref&amp;gt; It is a technique used to solve the famous “traveling salesman problem” where the heuristic followed is: &amp;quot;At each step of the journey, visit the nearest unvisited city.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
====Example: Scheduling Problem====&lt;br /&gt;
You are given a set of N schedules of lectures for a single day at a university. The schedule for a specific lecture is of the form (s time, f time) where s time represents the start time for that lecture, and similarly, the f time represents the finishing time. Given a list of N lecture schedules, we need to select a maximum set of lectures to be held out during the day such that none of the lectures overlaps with one another i.e. if lecture L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and L&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt; are included in our selection then the start time of j ≥ finish time of i or vice versa. The most optimal solution to this would be to consider the earliest finishing time first. We would sort the intervals according to the increasing order of their finishing times and then start selecting intervals from the very beginning. &lt;br /&gt;
&lt;br /&gt;
===Local Search methods===&lt;br /&gt;
The Local Search method follows an iterative approach where we start with some initial solution, explore the neighborhood of the current solution, and then replace the current solution with a better solution.&amp;lt;ref&amp;gt; Eiselt, Horst A et al. Integer Programming and Network Models. Springer, 2011.&amp;lt;/ref&amp;gt; For this method, the “traveling salesman problem” would follow the heuristic in which a solution is a cycle containing all nodes of the graph and the target is to minimize the total length of the cycle.&lt;br /&gt;
&lt;br /&gt;
==== Example Problem  ====&lt;br /&gt;
Suppose that the problem P is to find an optimal ordering of N jobs in a manufacturing system. A solution to this problem can be described as an N-vector of job numbers, in which the position of each job in the vector defines the order in which the job will be processed. For example, [3, 4, 1, 6, 5, 2] is a possible ordering of 6 jobs, where job 3 is processed first, followed by job 4, then job 1, and so on, finishing with job 2. Define now M as the set of moves that produce new orderings by the swapping of any two jobs. For example, [3, 1, 4, 6, 5, 2] is obtained by swapping the positions of jobs 4 and 1.&lt;br /&gt;
==Popular Heuristic Algorithms==&lt;br /&gt;
&lt;br /&gt;
===Genetic Algorithm===&lt;br /&gt;
The term Genetic Algorithm was first used by John Holland.&amp;lt;ref&amp;gt;J.H. Holland (1975) &#039;&#039;Adaptation in Natural and Artificial Systems,&#039;&#039; University of Michigan Press, Ann Arbor, Michigan; re-issued by MIT Press (1992).&amp;lt;/ref&amp;gt; They are designed to mimic the Darwinian theory of evolution, which states that populations of species evolve to produce more complex organisms and fitter for survival on Earth. Genetic algorithms operate on string structures, like biological structures, which are evolving in time according to the rule of survival of the fittest by using a randomized yet structured information exchange. Thus, in every generation, a new set of strings is created, using parts of the fittest members of the old set.&amp;lt;ref&amp;gt;Optimal design of heat exchanger networks, Editor(s): Wilfried Roetzel, Xing Luo, Dezhen Chen, Design and Operation of Heat Exchangers and their Networks, Academic Press, 2020, Pages 231-317, &amp;lt;nowiki&amp;gt;ISBN 9780128178942&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-12-817894-2.00006-6.&amp;lt;/ref&amp;gt; The algorithm terminates when the satisfactory fitness level has been reached for the population or the maximum generations have been reached. The typical steps are&amp;lt;ref&amp;gt;Wang FS., Chen LH. (2013) Genetic Algorithms. In: Dubitzky W., Wolkenhauer O., Cho KH., Yokota H. (eds) Encyclopedia of Systems Biology. Springer, New York, NY. https://doi.org/10.1007/978-1-4419-9863-7_412 &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1.     Choose an initial population of candidate solutions&lt;br /&gt;
&lt;br /&gt;
2.     Calculate the fitness, how well the solution is, of each individual&lt;br /&gt;
&lt;br /&gt;
3.     Perform crossover from the population. The operation is to randomly choose some pair of individuals like parents and exchange so parts from the parents to generate new individuals&lt;br /&gt;
&lt;br /&gt;
4.     Mutation is to randomly change some individuals to create other new individuals&lt;br /&gt;
&lt;br /&gt;
5.     Evaluate the fitness of the offspring&lt;br /&gt;
&lt;br /&gt;
6.     Select the survive individuals&lt;br /&gt;
&lt;br /&gt;
7.    Proceed from 3 if the termination criteria have not been reached&lt;br /&gt;
&lt;br /&gt;
===Tabu Search Algorithm===&lt;br /&gt;
Tabu search (TS) is a heuristic algorithm created by Fred Glover&amp;lt;ref&amp;gt;Fred Glover (1986). &amp;quot;Future Paths for Integer Programming and Links to Artificial Intelligence&amp;quot;. Computers and Operations Research. &#039;&#039;&#039;13&#039;&#039;&#039; (5): 533–549,https://doi.org/10.1016/0305-0548(86)90048-1&amp;lt;/ref&amp;gt; using a gradient-descent search with memory techniques to avoid cycling for determining an optimal solution. It does so by forbidding or penalizing moves that take the solution, in the next iteration, to points in the solution space previously visited. The algorithm spends some memory to keep a Tabu list of forbidden moves, which are the moves of the previous iterations or moves that might be considered unwanted. A general algorithm is as follows&amp;lt;ref&amp;gt;Optimization of Preventive Maintenance Program for Imaging Equipment in Hospitals, Editor(s): Zdravko Kravanja, Miloš Bogataj, Computer-Aided Chemical Engineering, Elsevier, Volume 38, 2016, Pages 1833-1838, ISSN 1570-7946, &amp;lt;nowiki&amp;gt;ISBN 9780444634283&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-444-63428-3.50310-6.&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
1.     Select an initial solution &#039;&#039;s&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ∈ &#039;&#039;S&#039;&#039;. Initialize the Tabu List &#039;&#039;L&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = ∅ and select a list tabu size. Establish &#039;&#039;k&#039;&#039; = 0.&lt;br /&gt;
&lt;br /&gt;
2.     Determine the neighborhood feasibility &#039;&#039;N&#039;&#039;(&#039;&#039;s&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;) that excludes inferior members of the tabu list &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3.     Select the next movement &#039;&#039;s&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; &amp;lt;sub&amp;gt;+ 1&amp;lt;/sub&amp;gt; from &#039;&#039;N&#039;&#039;(&#039;&#039;S&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039;) or &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; if there is a better solution and update &#039;&#039;L&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&#039;&#039; &amp;lt;sub&amp;gt;+ 1&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.     Stop if a condition of termination is reached, else, &#039;&#039;k&#039;&#039; = &#039;&#039;k&#039;&#039; + 1 and return to 1&lt;br /&gt;
&lt;br /&gt;
==== Example: The Classical Vehicle Routing Problem  ====&lt;br /&gt;
&#039;&#039;Vehicle Routing Problems&#039;&#039; have very important applications in distribution management and have become some of the most studied problems in the combinatorial optimization literature. These include several Tabu Search implementations that currently rank among the most effective. The &#039;&#039;Classical Vehicle Routing Problem&#039;&#039; (CVRP) is the basic variant in that class of problems. It can formally be defined as follows. Let &#039;&#039;G&#039;&#039; = (&#039;&#039;V, A&#039;&#039;) be a graph where &#039;&#039;V&#039;&#039; is the vertex set and &#039;&#039;A&#039;&#039; is the arc set. One of the vertices represents the &#039;&#039;depot&#039;&#039; at which a fleet of identical vehicles of capacity &#039;&#039;Q&#039;&#039; is based, and the other vertices customers that need to be serviced. With each customer vertex v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are associated a demand q&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and a service time t&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;. With each arc (v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, v&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;) of &#039;&#039;A&#039;&#039; are associated a cost c&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; and a travel time t&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt;.&amp;lt;ref&amp;gt;Glover, Fred, and Gary A Kochenberger. Handbook Of Metaheuristics. Kluwer Academic Publishers, 2003.&amp;lt;/ref&amp;gt; The CVRP consists of finding a set of routes such that:&lt;br /&gt;
&lt;br /&gt;
1.     Each route begins and ends at the depot&lt;br /&gt;
&lt;br /&gt;
2.     Each customer is visited exactly once by exactly one route&lt;br /&gt;
&lt;br /&gt;
3.     The total demand of the customers assigned to each route does not exceed &#039;&#039;Q&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4.     The total duration of each route (including travel and service times) does not exceed a specified value &#039;&#039;L&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5.     The total cost of the routes is minimized&lt;br /&gt;
&lt;br /&gt;
A feasible solution for the problem thus consists of a partition of the customers into m groups, each of total demand no larger than &#039;&#039;Q&#039;&#039;, that are sequenced to yield routes (starting and ending at the depot) of duration no larger than &#039;&#039;L&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Simulated Annealing Algorithm===&lt;br /&gt;
The Simulated Annealing Algorithm was developed by Kirkpatrick et. al. in 1983&amp;lt;ref&amp;gt;Kirkpatrick, S., Gelatt, C., &amp;amp; Vecchi, M. (1983). Optimization by Simulated Annealing. &#039;&#039;Science,&#039;&#039; &#039;&#039;220&#039;&#039;(4598), 671-680. Retrieved November 25, 2020, from http://www.jstor.org/stable/1690046&amp;lt;/ref&amp;gt; and is based on the analogy of ideal crystals in thermodynamics. The annealing process in metallurgy can make particles arrange themselves in the position with minima potential as the temperature is slowly decreased. The Simulation Annealing algorithm mimics this mechanism and uses the objective function of an optimization problem instead of the energy of a material to arrive at a solution. A general algorithm is as follows&amp;lt;ref&amp;gt;Brief review of static optimization methods, Editor(s): Stanisław Sieniutycz, Jacek Jeżowski, Energy Optimization in Process Systems and Fuel Cells (Third Edition), Elsevier, 2018, Pages 1-41, &amp;lt;nowiki&amp;gt;ISBN 9780081025574&amp;lt;/nowiki&amp;gt;, https://doi.org/10.1016/B978-0-08-102557-4.00001-3.&amp;lt;/ref&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
1.    Fix initial temperature (&#039;&#039;T&#039;&#039;&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
2.    Generate starting point &#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; (this is the best point &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; at present)&lt;br /&gt;
&lt;br /&gt;
3.    Generate randomly point &#039;&#039;&#039;&#039;&#039;X&amp;lt;sup&amp;gt;S&amp;lt;/sup&amp;gt;&#039;&#039;&#039;&#039;&#039; (neighboring point)&lt;br /&gt;
&lt;br /&gt;
4.    Accept &#039;&#039;&#039;&#039;&#039;X&amp;lt;sup&amp;gt;S&amp;lt;/sup&amp;gt;&#039;&#039;&#039;&#039;&#039; as &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; (currently best solution) if an acceptance criterion is met. This must be such a condition that the probability of accepting a worse point is greater than zero, particularly at higher temperatures&lt;br /&gt;
&lt;br /&gt;
5.    If an equilibrium condition is satisfied, go to (6), otherwise jump back to (3).&lt;br /&gt;
&lt;br /&gt;
6.    If termination conditions are not met, decrease the temperature according to a certain cooling scheme and jump back to (1). If the termination conditions are satisfied, stop calculations accepting the current best value &#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; as the final (‘optimal’) solution.  &lt;br /&gt;
&lt;br /&gt;
== Numerical Example: Knapsack Problem ==&lt;br /&gt;
One of the most common applications of the heuristic algorithm is the Knapsack Problem, in which a given set of items (each with a mass and a value) are grouped to have a maximum value while being under a certain mass limit. It uses the Greedy Approximation Algorithm to sort the items based on their value per unit mass and then includes the items with the highest value per unit mass if there is still space remaining.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Example&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following table specifies the weights and values per unit of five different products held in storage. The quantity of each product is unlimited. A plane with a weight capacity of 13 is to be used, for one trip only, to transport the products. We would like to know how many units of each product should be loaded onto the plane to maximize the value of goods shipped.   &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
Product (i) &lt;br /&gt;
!Weight per unit (w&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
!Value per unit (v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|7&lt;br /&gt;
|9&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|0.5&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Solution:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(a) Stages:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We view each type of product as a stage, so there are 5 stages. We can also add a sixth stage representing the endpoint after deciding&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(b) States:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can view the remaining capacity as states, so there are 14 states in each stage: 0,1, 2, 3, …13&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(c) Possible decisions at each stage:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose we are in state s in stage n (n &amp;lt; 6), hence there are s capacity remaining. Then the possible number of items we can pack is:&lt;br /&gt;
&lt;br /&gt;
j = 0, 1, …[s/w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For each such action j, we can have an arc going from the state s in stage n to the state n – j*w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; in stage n + 1. For each arc in the graph, there is a corresponding benefit j*v&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;. We are trying to find a maximum benefit path from state 13 in stage 1, to stage 6.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(d) Optimization function:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Let f&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;(s) be the value of the maximum benefit possible with items of type n or greater using total capacity at most s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(e) Boundary conditions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The sixth stage should have all zeros, that is, f&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(s) = 0 for each s = 0,1, … 13&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(f) Recurrence relation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
f&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;(s) = max {j*v&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;n+1&amp;lt;/sub&amp;gt;(s – j*w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;)}, j = 0, 1, …, [s/w&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(g) Compute:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The solution will not show all the computations steps. Instead, only a few cases are given below to illustrate the idea.&lt;br /&gt;
&lt;br /&gt;
* For stage 5, f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(s) = max&amp;lt;sub&amp;gt;j=0, 1, …[s/1]&amp;lt;/sub&amp;gt; {j*0.5 + 0} = 0.5s because given the all zero states in stage 6, the maximum possible value is to use up all the remaining s capacity.&lt;br /&gt;
* For stage 4, state 7,&lt;br /&gt;
&lt;br /&gt;
f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(7) = max&amp;lt;sub&amp;gt;j=0,1, …, [7/w4]&amp;lt;/sub&amp;gt; = {j*v&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(7 - w&amp;lt;sub&amp;gt;4*&amp;lt;/sub&amp;gt;j)}&lt;br /&gt;
&lt;br /&gt;
= max {0 + 3.5; 2 + 2; 4 + 0.5}&lt;br /&gt;
&lt;br /&gt;
= 4.5&lt;br /&gt;
&lt;br /&gt;
Using the recurrence relation above, we get the following table:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Unused Capacity&lt;br /&gt;
s&lt;br /&gt;
!f&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 1 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 2 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 3 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 4 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
!Type 5 &lt;br /&gt;
opt&lt;br /&gt;
!f&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(s)&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|13.5&lt;br /&gt;
|1&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|9.5&lt;br /&gt;
|3&lt;br /&gt;
|8.5&lt;br /&gt;
|4&lt;br /&gt;
|6.5&lt;br /&gt;
|13&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|9&lt;br /&gt;
|2&lt;br /&gt;
|9&lt;br /&gt;
|3&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|6&lt;br /&gt;
|12&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|12&lt;br /&gt;
|1&lt;br /&gt;
|8.5&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|5.5&lt;br /&gt;
|11&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|11&lt;br /&gt;
|1&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|2&lt;br /&gt;
|6.5&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|10&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|10&lt;br /&gt;
|1&lt;br /&gt;
|7&lt;br /&gt;
|1&lt;br /&gt;
|6.5&lt;br /&gt;
|2&lt;br /&gt;
|6&lt;br /&gt;
|3&lt;br /&gt;
|4.5&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|9.5&lt;br /&gt;
|1&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|4.5&lt;br /&gt;
|2&lt;br /&gt;
|3.5&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|4.5&lt;br /&gt;
|0&lt;br /&gt;
|4.5&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|3.5&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|1&lt;br /&gt;
|2.5&lt;br /&gt;
|5&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|1&lt;br /&gt;
|2.5&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|1.5&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|0&lt;br /&gt;
|0.5&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Optimal solution:&#039;&#039;&#039; The maximum benefit possible is 13.5. Tracing forward to get the optimal solution: the optimal decision corresponding to the entry 13.5 for f&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;(1) is 1, therefore we should pack 1 unit of type 1. After that we have 6 capacity remaining, so look at f&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(6) which is 4.5, corresponding to the optimal decision of packing 1 unit of type 2. After this, we have 6-5 = 1 capacity remaining, and f&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;(1) = f&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;(1) = 0, which means we are not able to pack any type 3 or type 4. Hence we go to stage 5 and find that f&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;(1) = 1, so we should pack 1 unit of type 5. This gives the entire optimal solution as can be seen in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Optimal solution&lt;br /&gt;
|-&lt;br /&gt;
!Product (i)&lt;br /&gt;
!Number of units&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
Heuristic algorithms have become an important technique in solving current real-world problems. Its applications can range from optimizing the power flow in modern power systems&amp;lt;ref&amp;gt; NIU, M., WAN, C. &amp;amp; Xu, Z. A review on applications of heuristic optimization algorithms for optimal power flow in modern power systems. J. Mod. Power Syst. Clean Energy 2, 289–297 (2014), https://doi.org/10.1007/s40565-014-0089-4&amp;lt;/ref&amp;gt; to groundwater pumping simulation models&amp;lt;ref&amp;gt; J. L. Wang, Y. H. Lin and M. D. Lin, &amp;quot;Application of heuristic algorithms on groundwater pumping source identification problems,&amp;quot; 2015 IEEE International Conference on Industrial Engineering and Engineering Management (IEEM), Singapore, 2015, pp. 858-862, https://doi.org/10.1109/IEEM.2015.7385770.&amp;lt;/ref&amp;gt;. Heuristic optimization techniques are increasingly applied in environmental engineering applications as well such as the design of a multilayer sorptive barrier system for landfill liner.&amp;lt;ref&amp;gt;Matott, L. Shawn, et al. “Application of Heuristic Optimization Techniques and Algorithm Tuning to Multilayered Sorptive Barrier Design.” Environmental Science &amp;amp;amp; Technology, vol. 40, no. 20, 2006, pp. 6354–6360., https://doi.org/10.1021/es052560+.&amp;lt;/ref&amp;gt; Heuristic algorithms have also been applied in the fields of bioinformatics, computational biology, and systems biology.&amp;lt;ref&amp;gt;Larranaga P, Calvo B, Santana R, Bielza C, Galdiano J, Inza I, Lozano JA, Armananzas R, Santafe G, Perez A, Robles V (2006) Machine learning in bioinformatics. Brief Bioinform 7(1):86–112 &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Heuristic algorithms are not a panacea, but they are handy tools to be used when the use of exact methods cannot be implemented. Heuristics can provide flexible techniques to solve hard problems with the advantage of simple implementation and low computational cost. Over the years, we have seen a progression in heuristics with the development of hybrid systems that combine selected features from various types of heuristic algorithms such as tabu search, simulated annealing, and genetic or evolutionary computing. Future research will continue to expand the capabilities of existing heuristics to solve complex real-world problems.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2709</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2709"/>
		<updated>2020-12-21T10:48:42Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Column generation algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Please use proper symbol for &amp;quot;greater than or equal to&amp;quot;.&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted. Please fix the same.&lt;br /&gt;
*# Fix typos:  e.g., repeated “for the current”.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2708</id>
		<title>Column generation algorithms</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2708"/>
		<updated>2020-12-21T10:46:30Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Lorena Garcia Fernandez (lgf572)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Column Generation techniques have the scope of solving large linear optimization problems by generating only the variables that will have an influence on the objective function. This is important for big problems with many variables where the formulation with these techniques would simplify the problem formulation, since not all the possibilities need to be explicitly listed.&amp;lt;ref&amp;gt;Desrosiers, Jacques &amp;amp; Lübbecke, Marco. (2006). A Primer in Column Generation.p7-p14 10.1007/0-387-25486-2_1. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory, methodology and algorithmic discussions ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Theory&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The way this method work is as follows; first, the original problem that is being solved needs to be split into two problems: the master problem and the sub-problem.&lt;br /&gt;
&lt;br /&gt;
* The master problem is the original column-wise (i.e: one column at a time) formulation of the problem with only a subset of variables being considered.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The sub-problem is a new problem created to identify a new promising variable. The objective function of the sub-problem is the reduced cost of the new variable with respect to the current dual variables, and the constraints require that the variable obeys the naturally occurring constraints. The subproblem is also referred to as the RMP or “restricted master problem”. From this we can infer that this method will be a good fit for problems whose constraint set admit a natural breakdown (i.e: decomposition) into sub-systems representing a well understood combinatorial structure.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To execute that decomposition from the original problem into Master and subproblems there are different techniques. The theory behind this method relies on the Dantzig-Wolfe decomposition.&amp;lt;ref&amp;gt;Dantzig-Wolfe decomposition. Encyclopedia of Mathematics. URL: http://encyclopediaofmath.org/index.php?title=Dantzig-Wolfe_decomposition&amp;amp;oldid=50750&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, when the master problem is solved, we are able to obtain dual prices for each of the constraints in the master problem. This information is then utilized in the objective function of the subproblem. The subproblem is solved. If the objective value of the subproblem is negative, a variable with negative reduced cost has been identified. This variable is then added to the master problem, and the master problem is re-solved. Re-solving the master problem will generate a new set of dual values, and the process is repeated until no negative reduced cost variables are identified. The subproblem returns a solution with non-negative reduced cost, we can conclude that the solution to the master problem is optimal.&amp;lt;ref&amp;gt;Wikipedia, the free encyclopeda. Column Generation. URL: https://en.wikipedia.org/wiki/Column_generation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Methodology&#039;&#039;&#039;&#039;&#039;&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:Column Generation.png|thumb|468x468px|Column generation schematics&amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;GERARD. (2005). Personnel and Vehicle scheduling, Column Generation, slide 12. URL: https://slideplayer.com/slide/6574/&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Consider the problem in the form:&lt;br /&gt;
&lt;br /&gt;
(IP)    &lt;br /&gt;
&amp;lt;math&amp;gt;z=max\left \{\sum_{k=1}^{K}c^{k}x^{k}:\sum_{k=1}^{K}A^{k}x^{k}=b,x^{k}\epsilon X^{k}\; \; \; for\; \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;X^{k}=\left \{x^{k}\epsilon Z_{+}^{n_{k}}: D^{k}x^{k}\leq d^{_{k}}   \right \}&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt;. Assuming that each set &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; contains a large but finite set of points &amp;lt;math&amp;gt;\left \{ x^{k,t} \right \}_{t=1}^{T_{k}}&amp;lt;/math&amp;gt;, we have that &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\left \{ x^{k}\epsilon R^{n_{k}}:x^{k}=\sum_{t=1}^{T_{k}}\lambda _{k,t}x^{k,t},\sum_{t=1}^{T_{k}}\lambda _{k,t}=1,\lambda _{k,t}\epsilon \left \{ 0,1 \right \}for \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that, on the assumption that each of the sets &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt; is bounded for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the approach will involve solving an equivalent problem of the form as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;max\left \{ \sum_{k=1}^{K}\gamma ^{k}\lambda ^{k}: \sum_{k=1}^{K}B^{k}\lambda ^{k}=\beta ,\lambda ^{k}\geq 0\; \; integer\; \; for\; \; k=1,...,K \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where each matrix &amp;lt;math&amp;gt;B^{k}&amp;lt;/math&amp;gt; has a very large number of columns, one for each of the feasible points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt;, and each vector &amp;lt;math&amp;gt;\lambda ^{k}&amp;lt;/math&amp;gt; contains the corresponding variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, substituting for &amp;lt;math&amp;gt;x^{k}=&amp;lt;/math&amp;gt; leads to an equivalent &#039;&#039;IP Master Problem (IPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(IPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left(c^{k}x^{k,t}\right )\lambda _{k,t} \\      \sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b\\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \; for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t}\epsilon \left \{ 0,1 \right \}\; \; for\; \; t=1,...,T_{k}\; \; and\; \; k=1,...,K.&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To solve the Master Linear Program, we use a column generation algorithm. This is in order to solve the linear programming relaxation of the Integer Programming Master Problem, called the &#039;&#039;Linear Programming Master Problem (LPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(LPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( c^{k}x^{k,t} \right )\lambda _{k,t}\\&lt;br /&gt;
\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b \\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \;for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t} \geq 0\; \; for\; \; t=1,...,T_{k},\; k=1,...,K&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where there is a column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; for each &#039;&#039;&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;X^{k}&amp;lt;/math&amp;gt;&#039;&#039;. On the next steps of this method, we will use &amp;lt;math&amp;gt;\left \{ \pi _{i} \right \}_{i=1}^{m}&amp;lt;/math&amp;gt; as the dual variables associated with the joint constraints, and &amp;lt;math&amp;gt;\left \{ \mu_{k} \right \}_{k=1}^{K}&amp;lt;/math&amp;gt; as dual variables for the second set of constraints.The latter are also known as convexity constraints.&lt;br /&gt;
The idea is to solve the linear program by the primal simplex algorithm. However, the pricing step of choosing a column to enter the basis must be modified because of the very big number of columns in play. Instead of pricing the columns one at a time, the question of finding a column with the biggest reduced price is itself a set of &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; optimization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Initialization:&#039;&#039; we suppose that a subset of columns (at least one for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;) is available, providing a feasible &#039;&#039;Restricted Linear Programming Master Problem&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(RLPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\tilde{c}\tilde{\lambda} \\&lt;br /&gt;
\tilde{A}\tilde{\lambda }=b \\&lt;br /&gt;
\tilde{\lambda }\geq 0 &lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\tilde{b}=\begin{pmatrix}&lt;br /&gt;
b\\ &lt;br /&gt;
1\\ &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tilde{A}&amp;lt;/math&amp;gt; is generated by the available set of columns and &amp;lt;math&amp;gt;\tilde{c}\tilde{\lambda }&amp;lt;/math&amp;gt; are the corresponding costs and variables. Solving the RLPM gives an optimal primal solution &amp;lt;math&amp;gt;\tilde{\lambda ^{*}}&amp;lt;/math&amp;gt; and an optimal dual solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )\epsilon\;  R^{m}\times R^{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Primal feasibility:&#039;&#039; Any feasible solution of &#039;&#039;RLMP&#039;&#039; is feasible for &#039;&#039;LPM&#039;&#039;. More precisely, &amp;lt;math&amp;gt;\tilde{\lambda^{*} }&amp;lt;/math&amp;gt; is a feasible solution of &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;\tilde{z}^{LPM}=\tilde{c}\tilde{\lambda ^{*}}=\sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}\leq z^{LPM}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Optimality check for LPM:&#039;&#039; It is required to check whether &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt;  is dual feasible for &#039;&#039;LPM&#039;&#039;. This means checking for each column, that is for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, and for each &amp;lt;math&amp;gt;x\; \epsilon \; X^{k}&amp;lt;/math&amp;gt; if the reduced price &amp;lt;math&amp;gt;c^{k}x-\pi A^{k}x-\mu _{k}\leq 0&amp;lt;/math&amp;gt;. Rather than examining each point separately, we treat all points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; implicitly, by solving an optimization subproblem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta _{k}=max\left \{ \left (c^{k}-\pi A^{k}  \right )x-\mu _{k}\; :\; x\; \epsilon \; X^{k}\right \}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Stopping criteria:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt; is dual feasible for &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;z^{LPM}\leq \sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}&amp;lt;/math&amp;gt;. As the value of the primal feasible solution &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; equals that of this upper bound, &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; is optimal for &#039;&#039;LPM&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Generating a new column:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for some &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, the column corresponding to the optimal solution &amp;lt;math&amp;gt;\tilde{x}^{k}&amp;lt;/math&amp;gt; of the subproblem has a positive reduced price. Introducing the column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; leads then to a Restricted Linear Programming Master Problem that can be easily reoptimized (e.g., by the primal simplex algorithm)&lt;br /&gt;
&lt;br /&gt;
== Numerical example: The Cutting Stock problem&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998The Cutting Stock problem&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Suppose we want to solve a numerical example of the cutting stock problem, specifically a one-dimensional cutting stock problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Problem Overview&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A company produces steel bars with diameter &amp;lt;math&amp;gt;45&amp;lt;/math&amp;gt; millimeters and length &amp;lt;math&amp;gt;33&amp;lt;/math&amp;gt; meters. The company also takes care of cutting the bars for their different customers, who each require different lengths. At the moment, the following demand forecast is expected and must be satisfied: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|Pieces  needed&lt;br /&gt;
|Piece length(m)&lt;br /&gt;
|Type of item&lt;br /&gt;
|-&lt;br /&gt;
|144&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|105&lt;br /&gt;
|13.5&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|72&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|16.5&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|22.5&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
The objective is to establish what is the minimum number of steel bars that should be used to satisfy the total demand.&lt;br /&gt;
&lt;br /&gt;
A possible model for the problem, proposed by Gilmore and Gomory in the 1960ies is the one below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;K=\left \{ 1,2,3,4,5 \right \}&amp;lt;/math&amp;gt;: set of item types;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;:&#039;&#039; set of patterns (i.e., possible ways) that can be adopted to cut a given bar into portions of the need lengths.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;M&amp;lt;/math&amp;gt;: bar length (before the cutting process);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;L_k&amp;lt;/math&amp;gt;&#039;&#039;:&#039;&#039; length of item &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;R_s&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; required;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; in pattern  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;Y_s&amp;lt;/math&amp;gt; : number of bars that should be portioned using pattern &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min(y)\sum_{s=1}^Sy_s  \\        \       s.t. \sum_kN_{ks}y_s\geq J_k    \forall     k\in K \\ y_s\in \Zeta_+\forall s\in S \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Solving the problem&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The model assumes the availability of the set &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; and the parameters &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; . To generate this data, you would have to list all possible cutting patterns. However, the number of possible cutting patterns is a big number. This is why a direct implementation of the model above is not practical in real-world problems. In this case is when it makes sense to solve the continuous relaxation of the above model. This is because, in reality, the demand figures are so high that the number of bars to cut is also a large number, and therefore a good solution can be determined by rounding up to the next integer each variable &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;found by solving the continuous relaxation. In addition to that, the solution of the relaxed problem will become the starting point for the application of an exact solution method (for instance, the Branch-and Bound).&amp;lt;blockquote&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;Key take-away: In the next steps of this example we will analyze how to solve the continuous relaxation of the model.&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;/blockquote&amp;gt;As a starting point, we need any feasible solution. Such a solution can be constructed as follows:&lt;br /&gt;
&lt;br /&gt;
# We consider any single-item cutting patterns, i.e., &amp;lt;math&amp;gt;\|K\|&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; configurations, each containing  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle N_{k,s} } = \llcorner \frac{W}{L_k}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;;&lt;br /&gt;
# Set &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle y_{k}} = \llcorner \frac{R_s}{N_{k,s}}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; (where pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; is the pattern containing only pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
This solution could also be arrived to by applying the simplex method to the model (without integrality constraints), considering only the decision variables that correspond to the above single-item patterns: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} \ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, if we solve this problem (for example, use CPLEX solver in GAMS) the solution is as below:  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Y1&lt;br /&gt;
|28.8&lt;br /&gt;
|-&lt;br /&gt;
|Y2&lt;br /&gt;
|52.5&lt;br /&gt;
|-&lt;br /&gt;
|Y3&lt;br /&gt;
|24&lt;br /&gt;
|-&lt;br /&gt;
|Y4&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Y5&lt;br /&gt;
|24&lt;br /&gt;
|}&lt;br /&gt;
Next, a new possible pattern (number &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;) will be considered. This pattern contains only one piece of item type number &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. So the question is if the new solution would remain optimal if this new pattern was allowed. Duality helps answer ths question. At every iteration of the simplex method, the outcome is a feasible basic solution (corresponding to some basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;) for the primal problem and a dual solution (the multipliers &amp;lt;math&amp;gt;u^{t}=c^{t}BB^{-1}&amp;lt;/math&amp;gt;) that satisfy the complementary slackness conditions. (Note: the dual solution will be feasible only when the last iteration is reached) &lt;br /&gt;
&lt;br /&gt;
The inclusion of new pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; corresponds to including a new variable in the primal problem, with objective cost &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; (as each time pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; is chosen, one bar is cut) and corresponding to the following column in the constraint matrix: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D_6= \begin{bmatrix}&lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
These variables create a new dual constraint. We then have to check if this new constraint is violated by the current dual solution  (or in other words, &#039;&#039;if the reduced cost of the new variable with respect to basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; is negative)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The new dual constraint is:&amp;lt;math&amp;gt;1\times u_{1}+0\times u_{2}+0\times u_{3}+0\times u_{4}+1\times u_{5}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution for the dual problem can be computed in different software packages, or by hand. The example below shows the solution obtained with GAMS for this example:&lt;br /&gt;
&lt;br /&gt;
(Note the solution for the dual problem would be: &amp;lt;math&amp;gt;u=c_{T}^{B}B^{-1}&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dual  variable&lt;br /&gt;
|Variable value&lt;br /&gt;
|-&lt;br /&gt;
|D1&lt;br /&gt;
|0.067&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|0.333&lt;br /&gt;
|}&lt;br /&gt;
Since &amp;lt;math&amp;gt;0.2+1=1.2&amp;gt; 1&amp;lt;/math&amp;gt;, the new constraint is violated.&lt;br /&gt;
&lt;br /&gt;
This means that the current primal solution (in which the new variable is &amp;lt;math&amp;gt;y_{6}=0&amp;lt;/math&amp;gt;) may not be optimal anymore (although it is still feasible). The fact that the dual constraint is violated means the associated primal variable has negative reduced cost: &lt;br /&gt;
&lt;br /&gt;
the norm of &amp;lt;math&amp;gt;c_6 = c_6-u^TD_6=1-0.4=0.6&amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
To help us solve the problem, the next step is to let &amp;lt;math&amp;gt;y_{6}&amp;lt;/math&amp;gt; enter the basis. To do so, we modify the problem by inserting the new variable as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}+y_{6}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} +y_{6}\ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5}+y_{6} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5},y_{6} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this problem is solved with the simplex method, the optimal solution is found, but restricted only to patterns &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;. If a new pattern is available, a decision should be made whether this new pattern should be used or not by proceeding as above. However, the problem is how to find a pattern (i.e., a variable; i.e, a column of the matrix) whose reduced cost is negative (i.e., which will mean it is convenient to include it in the formulation). At this point one can notice that number of possible patterns exponentially large,and all the patterns are not even known explicitly. The question then is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Given a basic optimal solution for the problem in which only some variables are included, how can we find (if any exists) a variable with negative reduced cost (i.e., a constraint violated by the current dual solution)?&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This question can be transformed into an optimization problem: in order to see whether a variable with negative reduced cost exists, we can look for the minimum of the reduced costs of all possible variables and check whether this minimum is negative:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{c}=1-u^Tz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because every column of the constraint matrix corresponds to a cutting pattern, and every entry of the column says how many pieces of a certain type are in that pattern. In order for &amp;lt;math&amp;gt;z&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; to be a possible column of the constraint matrix, the following condition must be satisfied:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\begin{matrix}z_k\in \Zeta_+\forall k\in K  \\        \       \sum_kL_kz_k \leq M  \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And by so doing, it enables the conversion of the problem of finding a variable with negative reduced cost into the integer linear programming problem below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min\   \bar{c} = 1 - sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which, in turn, would be equivalent to the below formulation (we just write the objective in maximization form and ignore the additive constant &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix} \max\sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The coefficients &amp;lt;math&amp;gt;z_k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; of a column with negative reduced cost can be found by solving the above integer [[wikipedia:Knapsack_problem|&amp;quot;knapsack&amp;quot;]] problem (which is a traditional type of problem that we find in integer programming).&lt;br /&gt;
&lt;br /&gt;
In our example, if we start from the problem restricted to the five single-item patterns, the above problem reads as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  0.067z_{1}+0.167z_{2}+0.167z_{3}+0.167z_{4}+z_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 6z_{1} +13.5z_{2}+15z_{3}+16.5z_{4}+22.5z_{5}\le 33\\&lt;br /&gt;
\ &amp;amp; ~~ z_{1},z_{2},z_{3},z_{4},z_{5}\ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
which has the following optimal solution:    &amp;lt;math&amp;gt;z^T= [1 \quad 0\quad 0\quad 0\quad 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matches the pattern we called &amp;lt;math&amp;gt;D6&amp;lt;/math&amp;gt;, earlier on in this page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Optimality test&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If :  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then &amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt; is an optimal solution of the full continuous relaxed problem (that is, including all patterns in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
If this condition is not true, we go ahead and update the master problem by including in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S^&#039;&amp;lt;/math&amp;gt;&#039;&#039; the pattern &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; defined by &amp;lt;math&amp;gt;N_{s,\lambda}&amp;lt;/math&amp;gt; (in practical terms this means that the column &#039;&#039;&#039;&amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt;&#039;&#039;&#039; needs to be included in the constraint matrix)&lt;br /&gt;
&lt;br /&gt;
For this example we find that the optimality test is met as &amp;lt;math&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}=0.4 \leq 1&amp;lt;/math&amp;gt; so we have have found an optimal solution of the relaxed continuous problem (if this was not the case we would have had to go back to reformulating and solving the master problem, as discussed in the methodology section of this page) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Algorithm discussion&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The column generation subproblem is the critical part of the method is generating the new columns. It is not reasonable to compute the reduced costs of all variables &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;s=1,...,S&amp;lt;/math&amp;gt;, otherwise this procedure would reduce to the simplex method. In fact, n&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; can be very large (as in the cutting-stock problem) or, for some reason, it might not be possible or convenient to enumerate all decision variables. This is when it would be necessary to study a specific column generation algorithm for each problem; &#039;&#039;only if such an algorithm exists (and is practical)&#039;&#039;, the method can be fully applied. In the one-dimensional cutting stock problem, we transformed the column generation subproblem into an easily solvable integer linear programming problem. In other cases, the computational effort required to solve the subproblem is too high, such that appying this full procedure becomes unefficient.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
As previously mentioned, column generation techniques are most relevant when the problem that we are trying to solve has a high ratio of number of variables with respect to the number of constraints. As such some common applications are:&lt;br /&gt;
&lt;br /&gt;
* Bandwith packing&lt;br /&gt;
* Bus driver scheduling&lt;br /&gt;
* Generally, column generation algorithms are used for large delivery networks, often in combination with other methods, helping to implement real-time solutions for on-demand logistics. We discuss a supply chain scheduling application below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bandwidth packing&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The objective of this problem is to allocate bandwidth in a telecommunications network to maximize total revenue. The routing of a set of traffic demands between different users is to be decided, taking into account the capacity of the network arcs and the fact that the traffic between each pair of users cannot be split The problem can be formulated as an integer programming problem and the linear programming relaxation solved using column generation and the simplex algorithm. A branch and bound procedure which branches upon a particular path is used in this particular paper&amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt;Parker, Mark &amp;amp; Ryan, Jennifer. (1993). A column generation algorithm for bandwidth packing. Telecommunication Systems. 2. 185-195. 10.1007/BF02109857. &amp;lt;/ref&amp;gt; that looks into bandwidth routing, to solve the IP. The column generation algorithm greatly reduces the complexity of this problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bus driver scheduling&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bus driver scheduling aims to find the minimum number of bus drivers to cover a published timetable of a bus company. When scheduling bus drivers, contractual working rules must be enforced, thus complicating the problem. A column generation algorithm can decompose this complicated problem into a master problem and a series of pricing subproblems. The master problem would select optimal duties from a set of known feasible duties, and the pricing subproblem would augment the feasible duty set to improve the solution obtained in the master problem.&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Dung‐Ying Lin, Ching‐Lan Hsu. Journal of Advanced Transportation. Volume50, Issue8, December 2016, Pages 1598-1615. URL: https://onlinelibrary.wiley.com/doi/abs/10.1002/atr.1417&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Supply Chain scheduling problem&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A typical application is where we consider the problem of scheduling a set of shipments between different nodes of a supply chain network. Each shipment has a fixed departure time, as well as an origin and a destination node, which, combined, determine the duration of the associated trip. The aim is to schedule as many shipments as possible, while also minimizing the number of vehicles utilized for this purpose. This problem can be formulated by an integer programming model and an associated branch and price solution algorithm. The optimal solution to the LP relaxation of the problem can be obtained through column generation, solving the linear program a huge number of variables, without explicitly considering all of them. In the context of this application, the master problem schedules the maximum possible number of shipments using only a small set of vehicle-routes, and a column generation (colgen) sub-problem would generate cost-effective vehicle-routes to be fed fed into the master problem. After finding the optimal solution to the LP relaxation of the problem, the algorithm would branch on the fractional decision variables (vehicle-routes), in order to reach the optimal integer solution.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Kozanidis, George. (2014). Column generation for scheduling shipments within a supply chain network with the minimum number of vehicles. OPT-i 2014 - 1st International Conference on Engineering and Applied Sciences Optimization, Proceedings. 888-898&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
Column generation is a way of starting with a small, manageable part of a problem (specifically, with some of the variables), solving that part, analyzing that interim solution to find the next part of the problem (specifically, one or more variables) to add to the model, and then solving the full or extended model. In the column generation method, the algorithm steps are repeated until an optimal solution to the entire problem is achieved.&amp;lt;ref&amp;gt;	ILOG CPLEX 11.0 User&#039;s Manual &amp;gt; Discrete Optimization &amp;gt; Using Column Generation: a Cutting Stock Example &amp;gt; What Is Column Generation? 1997-2007. URL:http://www-eio.upc.es/lceio/manuals/cplex-11/html/usrcplex/usingColumnGen2.html#:~:text=In%20formal%20terms%2C%20column%20generation,method%20of%20solving%20the%20problem.&amp;amp;text=By%201960%2C%20Dantzig%20and%20Wolfe,problems%20with%20a%20decomposable%20structure&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This algorithm provides a way of solving a linear programming problem adding columns (corresponding to constrained variables) during the pricing phase of the problem solving phase, that would otherwise be very tedious to formulate and compute. Generating a column in the primal formulation of a linear programming problem corresponds to adding a constraint in its dual formulation.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2707</id>
		<title>Column generation algorithms</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Column_generation_algorithms&amp;diff=2707"/>
		<updated>2020-12-21T10:45:10Z</updated>

		<summary type="html">&lt;p&gt;Wc593: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Lorena Garcia Fernandez (lgf572)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Column Generation techniques have the scope of solving large linear optimization problems by generating only the variables that will have an influence on the objective function. This is important for big problems with many variables where the formulation with these techniques would simplify the problem formulation, since not all the possibilities need to be explicitly listed.&amp;lt;ref&amp;gt;Desrosiers, Jacques &amp;amp; Lübbecke, Marco. (2006). A Primer in Column Generation.p7-p14 10.1007/0-387-25486-2_1. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Theory, methodology and algorithmic discussions ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Theory&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The way this method work is as follows; first, the original problem that is being solved needs to be split into two problems: the master problem and the sub-problem.&lt;br /&gt;
&lt;br /&gt;
* The master problem is the original column-wise (i.e: one column at a time) formulation of the problem with only a subset of variables being considered.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The sub-problem is a new problem created to identify a new promising variable. The objective function of the sub-problem is the reduced cost of the new variable with respect to the current dual variables, and the constraints require that the variable obeys the naturally occurring constraints. The subproblem is also referred to as the RMP or “restricted master problem”. From this we can infer that this method will be a good fit for problems whose constraint set admit a natural breakdown (i.e: decomposition) into sub-systems representing a well understood combinatorial structure.&amp;lt;ref&amp;gt;&lt;br /&gt;
AlainChabrier, Column Generation techniques, 2019 URL: https://medium.com/@AlainChabrier/column-generation-techniques-6a414d723a64&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To execute that decomposition from the original problem into Master and subproblems there are different techniques. The theory behind this method relies on the Dantzig-Wolfe decomposition.&amp;lt;ref&amp;gt;Dantzig-Wolfe decomposition. Encyclopedia of Mathematics. URL: http://encyclopediaofmath.org/index.php?title=Dantzig-Wolfe_decomposition&amp;amp;oldid=50750&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, when the master problem is solved, we are able to obtain dual prices for each of the constraints in the master problem. This information is then utilized in the objective function of the subproblem. The subproblem is solved. If the objective value of the subproblem is negative, a variable with negative reduced cost has been identified. This variable is then added to the master problem, and the master problem is re-solved. Re-solving the master problem will generate a new set of dual values, and the process is repeated until no negative reduced cost variables are identified. The subproblem returns a solution with non-negative reduced cost, we can conclude that the solution to the master problem is optimal.&amp;lt;ref&amp;gt;Wikipedia, the free encyclopeda. Column Generation. URL: https://en.wikipedia.org/wiki/Column_generation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Methodology&#039;&#039;&#039;&#039;&#039;&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:Column Generation.png|thumb|468x468px|Column generation schematics&amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;GERARD. (2005). Personnel and Vehicle scheduling, Column Generation, slide 12. URL: https://slideplayer.com/slide/6574/&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Consider the problem in the form:&lt;br /&gt;
&lt;br /&gt;
(IP)    &lt;br /&gt;
&amp;lt;math&amp;gt;z=max\left \{\sum_{k=1}^{K}c^{k}x^{k}:\sum_{k=1}^{K}A^{k}x^{k}=b,x^{k}\epsilon X^{k}\; \; \; for\; \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;X^{k}=\left \{x^{k}\epsilon Z_{+}^{n_{k}}: D^{k}x^{k}\leq d^{_{k}}   \right \}&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt;. Assuming that each set &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; contains a large but finite set of points &amp;lt;math&amp;gt;\left \{ x^{k,t} \right \}_{t=1}^{T_{k}}&amp;lt;/math&amp;gt;, we have that &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\left \{ x^{k}\epsilon R^{n_{k}}:x^{k}=\sum_{t=1}^{T_{k}}\lambda _{k,t}x^{k,t},\sum_{t=1}^{T_{k}}\lambda _{k,t}=1,\lambda _{k,t}\epsilon \left \{ 0,1 \right \}for \; \; k=1,...,K  \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that, on the assumption that each of the sets &amp;lt;math&amp;gt;X^{k}=&amp;lt;/math&amp;gt; is bounded for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the approach will involve solving an equivalent problem of the form as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;max\left \{ \sum_{k=1}^{K}\gamma ^{k}\lambda ^{k}: \sum_{k=1}^{K}B^{k}\lambda ^{k}=\beta ,\lambda ^{k}\geq 0\; \; integer\; \; for\; \; k=1,...,K \right \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where each matrix &amp;lt;math&amp;gt;B^{k}&amp;lt;/math&amp;gt; has a very large number of columns, one for each of the feasible points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt;, and each vector &amp;lt;math&amp;gt;\lambda ^{k}&amp;lt;/math&amp;gt; contains the corresponding variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, substituting for &amp;lt;math&amp;gt;x^{k}=&amp;lt;/math&amp;gt; leads to an equivalent &#039;&#039;IP Master Problem (IPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(IPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left(c^{k}x^{k,t}\right )\lambda _{k,t} \\      \sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b\\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \; for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t}\epsilon \left \{ 0,1 \right \}\; \; for\; \; t=1,...,T_{k}\; \; and\; \; k=1,...,K.&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To solve the Master Linear Program, we use a column generation algorithm. This is in order to solve the linear programming relaxation of the Integer Programming Master Problem, called the &#039;&#039;Linear Programming Master Problem (LPM)&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(LPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( c^{k}x^{k,t} \right )\lambda _{k,t}\\&lt;br /&gt;
\sum_{k=1}^{K}\sum_{t=1}^{T_{k}}\left ( A^{k}x^{k,t} \right )\lambda _{k,t}=b \\&lt;br /&gt;
\sum_{t=1}^{T_{k}}\lambda _{k,t}=1\; \;for\; \; k=1,...,K \\&lt;br /&gt;
\lambda _{k,t} \geq 0\; \; for\; \; t=1,...,T_{k},\; k=1,...,K&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where there is a column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; for each &#039;&#039;&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;X^{k}&amp;lt;/math&amp;gt;&#039;&#039;. On the next steps of this method, we will use &amp;lt;math&amp;gt;\left \{ \pi _{i} \right \}_{i=1}^{m}&amp;lt;/math&amp;gt; as the dual variables associated with the joint constraints, and &amp;lt;math&amp;gt;\left \{ \mu_{k} \right \}_{k=1}^{K}&amp;lt;/math&amp;gt; as dual variables for the second set of constraints.The latter are also known as convexity constraints.&lt;br /&gt;
The idea is to solve the linear program by the primal simplex algorithm. However, the pricing step of choosing a column to enter the basis must be modified because of the very big number of columns in play. Instead of pricing the columns one at a time, the question of finding a column with the biggest reduced price is itself a set of &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; optimization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Initialization:&#039;&#039; we suppose that a subset of columns (at least one for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;) is available, providing a feasible &#039;&#039;Restricted Linear Programming Master Problem&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
(RLPM)&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}&lt;br /&gt;
z^{LPM}=max\tilde{c}\tilde{\lambda} \\&lt;br /&gt;
\tilde{A}\tilde{\lambda }=b \\&lt;br /&gt;
\tilde{\lambda }\geq 0 &lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\tilde{b}=\begin{pmatrix}&lt;br /&gt;
b\\ &lt;br /&gt;
1\\ &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tilde{A}&amp;lt;/math&amp;gt; is generated by the available set of columns and &amp;lt;math&amp;gt;\tilde{c}\tilde{\lambda }&amp;lt;/math&amp;gt; are the corresponding costs and variables. Solving the RLPM gives an optimal primal solution &amp;lt;math&amp;gt;\tilde{\lambda ^{*}}&amp;lt;/math&amp;gt; and an optimal dual solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )\epsilon\;  R^{m}\times R^{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Primal feasibility:&#039;&#039; Any feasible solution of &#039;&#039;RLMP&#039;&#039; is feasible for &#039;&#039;LPM&#039;&#039;. More precisely, &amp;lt;math&amp;gt;\tilde{\lambda^{*} }&amp;lt;/math&amp;gt; is a feasible solution of &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;\tilde{z}^{LPM}=\tilde{c}\tilde{\lambda ^{*}}=\sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}\leq z^{LPM}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Optimality check for LPM:&#039;&#039; It is required to check whether &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt;  is dual feasible for &#039;&#039;LPM&#039;&#039;. This means checking for each column, that is for each &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, and for each &amp;lt;math&amp;gt;x\; \epsilon \; X^{k}&amp;lt;/math&amp;gt; if the reduced price &amp;lt;math&amp;gt;c^{k}x-\pi A^{k}x-\mu _{k}\leq 0&amp;lt;/math&amp;gt;. Rather than examining each point separately, we treat all points in &amp;lt;math&amp;gt;X^{k}&amp;lt;/math&amp;gt; implicitly, by solving an optimization subproblem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta _{k}=max\left \{ \left (c^{k}-\pi A^{k}  \right )x-\mu _{k}\; :\; x\; \epsilon \; X^{k}\right \}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Stopping criteria:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;k=1,...,K&amp;lt;/math&amp;gt; the solution &amp;lt;math&amp;gt;\left ( \pi ,\mu  \right )&amp;lt;/math&amp;gt; is dual feasible for &#039;&#039;LPM&#039;&#039;, and hence &amp;lt;math&amp;gt;z^{LPM}\leq \sum_{i=1}^{m}\pi _{i}b_{i}+\sum_{k=1}^{K}\mu _{k}&amp;lt;/math&amp;gt;. As the value of the primal feasible solution &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; equals that of this upper bound, &amp;lt;math&amp;gt;\tilde{\lambda }&amp;lt;/math&amp;gt; is optimal for &#039;&#039;LPM&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Generating a new column:&#039;&#039; If &amp;lt;math&amp;gt;\zeta _{k}&amp;gt; 0&amp;lt;/math&amp;gt; for some &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, the column corresponding to the optimal solution &amp;lt;math&amp;gt;\tilde{x}^{k}&amp;lt;/math&amp;gt; of the subproblem has a positive reduced price. Introducing the column &amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
c^{k}x\\ &lt;br /&gt;
A^{k}x\\ &lt;br /&gt;
e_{k}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; leads then to a Restricted Linear Programming Master Problem that can be easily reoptimized (e.g., by the primal simplex algorithm)&lt;br /&gt;
&lt;br /&gt;
== Numerical example: The Cutting Stock problem&amp;lt;ref&amp;gt;L.A. Wolsey, Integer programming. Wiley,Column Generation Algorithms p185-p189,1998The Cutting Stock problem&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Suppose we want to solve a numerical example of the cutting stock problem, specifically a one-dimensional cutting stock problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Problem Overview&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A company produces steel bars with diameter &amp;lt;math&amp;gt;45&amp;lt;/math&amp;gt; millimeters and length &amp;lt;math&amp;gt;33&amp;lt;/math&amp;gt; meters. The company also takes care of cutting the bars for their different customers, who each require different lengths. At the moment, the following demand forecast is expected and must be satisfied: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|Pieces  needed&lt;br /&gt;
|Piece length(m)&lt;br /&gt;
|Type of item&lt;br /&gt;
|-&lt;br /&gt;
|144&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|105&lt;br /&gt;
|13.5&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|72&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|16.5&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|22.5&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
The objective is to establish what is the minimum number of steel bars that should be used to satisfy the total demand.&lt;br /&gt;
&lt;br /&gt;
A possible model for the problem, proposed by Gilmore and Gomory in the 1960ies is the one below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;K=\left \{ 1,2,3,4,5 \right \}&amp;lt;/math&amp;gt;: set of item types;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;:&#039;&#039; set of patterns (i.e., possible ways) that can be adopted to cut a given bar into portions of the need lengths.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;M&amp;lt;/math&amp;gt;: bar length (before the cutting process);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;L_k&amp;lt;/math&amp;gt;&#039;&#039;:&#039;&#039; length of item &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;R_s&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; required;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; : number of pieces of type  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; in pattern  &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;Y_s&amp;lt;/math&amp;gt; : number of bars that should be portioned using pattern &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;s&amp;lt;/math&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\in&amp;lt;/math&amp;gt; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min(y)\sum_{s=1}^Sy_s  \\        \       s.t. \sum_kN_{ks}y_s\geq J_k    \forall     k\in K \\ y_s\in \Zeta_+\forall s\in S \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;u&amp;gt;Solving the problem&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The model assumes the availability of the set &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;K&amp;lt;/math&amp;gt;&#039;&#039; and the parameters &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;N_{k,s}&amp;lt;/math&amp;gt; . To generate this data, you would have to list all possible cutting patterns. However, the number of possible cutting patterns is a big number. This is why a direct implementation of the model above is not partical in real-world problems. In this case is when it makes sense to solve the continuous relaxation of the above model. This is because, in reality, the demand figures are so high that the number of bars to cut is also a large number, and therefore a good solution can be determined by rounding up to the next integer each variable &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;found by solving the continuous relaxation. In addition to that, the solution of the relaxed problem will become the starting point for the application of an exact solution method (for instance, the Branch-and Bound).&amp;lt;blockquote&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;Key take-away: In the next steps of this example we will analyze how to solve the continuous relaxation of the model.&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;/blockquote&amp;gt;As a starting point, we need any feasible solution. Such a solution can be constructed as follows:&lt;br /&gt;
&lt;br /&gt;
# We consider any single-item cutting patterns, i.e., &amp;lt;math&amp;gt;\|K\|&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; configurations, each containing  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle N_{k,s} } = \llcorner \frac{W}{L_k}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;;&lt;br /&gt;
# Set &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;{\textstyle y_{k}} = \llcorner \frac{R_s}{N_{k,s}}\lrcorner&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; (where pattern &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; is the pattern containing only pieces of type &amp;lt;math&amp;gt;k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
This solution could also be arrived to by applying the simplex method to the model (without integrality constraints), considering only the decision variables that correspond to the above single-item patterns: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} \ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, if we solve this problem (for example, use CPLEX solver in GAMS) the solution is as below:  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Y1&lt;br /&gt;
|28.8&lt;br /&gt;
|-&lt;br /&gt;
|Y2&lt;br /&gt;
|52.5&lt;br /&gt;
|-&lt;br /&gt;
|Y3&lt;br /&gt;
|24&lt;br /&gt;
|-&lt;br /&gt;
|Y4&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Y5&lt;br /&gt;
|24&lt;br /&gt;
|}&lt;br /&gt;
Next, a new possible pattern (number &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;) will be considered. This pattern contains only one piece of item type number &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. So the question is if the new solution would remain optimal if this new pattern was allowed. Duality helps answer ths question. At every iteration of the simplex method, the outcome is a feasible basic solution (corresponding to some basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;) for the primal problem and a dual solution (the multipliers &amp;lt;math&amp;gt;u^{t}=c^{t}BB^{-1}&amp;lt;/math&amp;gt;) that satisfy the complementary slackness conditions. (Note: the dual solution will be feasible only when the last iteration is reached) &lt;br /&gt;
&lt;br /&gt;
The inclusion of new pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; corresponds to including a new variable in the primal problem, with objective cost &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; (as each time pattern &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; is chosen, one bar is cut) and corresponding to the following column in the constraint matrix: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D_6= \begin{bmatrix}&lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 0 \\ &lt;br /&gt;
\ 1 \\ &lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
These variables create a new dual constraint. We then have to check if this new constraint is violated by the current dual solution  (or in other words, &#039;&#039;if the reduced cost of the new variable with respect to basis &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; is negative)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The new dual constraint is:&amp;lt;math&amp;gt;1\times u_{1}+0\times u_{2}+0\times u_{3}+0\times u_{4}+1\times u_{5}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution for the dual problem can be computed in different software packages, or by hand. The example below shows the solution obtained with GAMS for this example:&lt;br /&gt;
&lt;br /&gt;
(Note the solution for the dual problem would be: &amp;lt;math&amp;gt;u=c_{T}^{B}B^{-1}&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dual  variable&lt;br /&gt;
|Variable value&lt;br /&gt;
|-&lt;br /&gt;
|D1&lt;br /&gt;
|0.067&lt;br /&gt;
|-&lt;br /&gt;
|D2&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D3&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D4&lt;br /&gt;
|0.167&lt;br /&gt;
|-&lt;br /&gt;
|D5&lt;br /&gt;
|0.333&lt;br /&gt;
|}&lt;br /&gt;
Since &amp;lt;math&amp;gt;0.2+1=1.2&amp;gt; 1&amp;lt;/math&amp;gt;, the new constraint is violated.&lt;br /&gt;
&lt;br /&gt;
This means that the current primal solution (in which the new variable is &amp;lt;math&amp;gt;y_{6}=0&amp;lt;/math&amp;gt;) may not be optimal anymore (although it is still feasible). The fact that the dual constraint is violated means the associated primal variable has negative reduced cost: &lt;br /&gt;
&lt;br /&gt;
the norm of &amp;lt;math&amp;gt;c_6 = c_6-u^TD_6=1-0.4=0.6&amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
To help us solve the problem, the next step is to let &amp;lt;math&amp;gt;y_{6}&amp;lt;/math&amp;gt; enter the basis. To do so, we modify the problem by inserting the new variable as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  y_{1}+y_{2}+y_{3}+y_{4}+y_{5}+y_{6}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 15y_{1} +y_{6}\ge 144\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{2} \ge 105\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{3} \ge 72\\&lt;br /&gt;
\ &amp;amp; ~~ 6y_{4} \ge 30\\&lt;br /&gt;
\ &amp;amp; ~~ 3y_{5}+y_{6} \ge 24\\&lt;br /&gt;
\ &amp;amp; ~~ y_{1},y_{2},y_{3},y_{4},y_{5},y_{6} \ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this problem is solved with the simplex method, the optimal solution is found, but restricted only to patterns &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt;. If a new pattern is available, a decision should be made whether this new pattern should be used or not by proceeding as above. However, the problem is how to find a pattern (i.e., a variable; i.e, a column of the matrix) whose reduced cost is negative (i.e., which will mean it is convenient to include it in the formulation). At this point one can notice that number of possible patterns exponentially large,and all the patterns are not even known explicitly. The question then is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Given a basic optimal solution for the problem in which only some variables are included, how can we find (if any exists) a variable with negative reduced cost (i.e., a constraint violated by the current dual solution)?&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This question can be transformed into an optimization problem: in order to see whether a variable with negative reduced cost exists, we can look for the minimum of the reduced costs of all possible variables and check whether this minimum is negative:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{c}=1-u^Tz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because every column of the constraint matrix corresponds to a cutting pattern, and every entry of the column says how many pieces of a certain type are in that pattern. In order for &amp;lt;math&amp;gt;z&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; to be a possible column of the constraint matrix, the following condition must be satisfied:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\begin{matrix}z_k\in \Zeta_+\forall k\in K  \\        \       \sum_kL_kz_k \leq M  \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And by so doing, it enables the conversion of the problem of finding a variable with negative reduced cost into the integer linear programming problem below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix}\min\   \bar{c} = 1 - sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which, in turn, would be equivalent to the below formulation (we just write the objective in maximization form and ignore the additive constant &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{matrix} \max\sum_{k=1}^K u_k \times z_k  \\        \       s.t. \sum_kL_kz_k \leq M  \\ z_k\in \Zeta_+\forall k\in K \end{matrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The coefficients &amp;lt;math&amp;gt;z_k&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; of a column with negative reduced cost can be found by solving the above integer [[wikipedia:Knapsack_problem|&amp;quot;knapsack&amp;quot;]] problem (which is a traditional type of problem that we find in integer programming).&lt;br /&gt;
&lt;br /&gt;
In our example, if we start from the problem restricted to the five single-item patterns, the above problem reads as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\text{min} &amp;amp; ~~  0.067z_{1}+0.167z_{2}+0.167z_{3}+0.167z_{4}+z_{5}\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ 6z_{1} +13.5z_{2}+15z_{3}+16.5z_{4}+22.5z_{5}\le 33\\&lt;br /&gt;
\ &amp;amp; ~~ z_{1},z_{2},z_{3},z_{4},z_{5}\ge 0\\&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
which has the following optimal solution:    &amp;lt;math&amp;gt;z^T= [1 \quad 0\quad 0\quad 0\quad 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matches the pattern we called &amp;lt;math&amp;gt;D6&amp;lt;/math&amp;gt;, earlier on in this page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Optimality test&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If :  &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}\leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then &amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt; is an optimal solution of the full continuous relaxed problem (that is, including all patterns in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S&amp;lt;/math&amp;gt;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
If this condition is not true, we go ahead and update the master problem by including in &#039;&#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;S^&#039;&amp;lt;/math&amp;gt;&#039;&#039; the pattern &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; defined by &amp;lt;math&amp;gt;N_{s,\lambda}&amp;lt;/math&amp;gt; (in practical terms this means that the column &#039;&#039;&#039;&amp;lt;math&amp;gt;y^*&amp;lt;/math&amp;gt;&#039;&#039;&#039; needs to be included in the constraint matrix)&lt;br /&gt;
&lt;br /&gt;
For this example we find that the optimality test is met as &amp;lt;math&amp;gt;\sum_{k=1}^{K}z_{k}^{*}u_{k}^{*}=0.4 \leq 1&amp;lt;/math&amp;gt; so we have have found an optimal solution of the relaxed continuous problem (if this was not the case we would have had to go back to reformulating and solving the master problem, as discussed in the methodology section of this page) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Algorithm discussion&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The column generation subproblem is the critical part of the method is generating the new columns. It is not reasonable to compute the reduced costs of all variables &amp;lt;math&amp;gt;y_s&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;s=1,...,S&amp;lt;/math&amp;gt;, otherwise this procedure would reduce to the simplex method. In fact, n&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; can be very large (as in the cutting-stock problem) or, for some reason, it might not be possible or convenient to enumerate all decision variables. This is when it would be necessary to study a specific column generation algorithm for each problem; &#039;&#039;only if such an algorithm exists (and is partical)&#039;&#039;, the method can be fully applied. In the one-dimensional cutting stock problem, we transformed the column generation subproblem into an easily solvable integer linear programming problem. In other cases, the computational effort required to solve the subproblem is too high, such that appying this full procedure becomes unefficient.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
As previously mentioned, column generation techniques are most relevant when the problem that we are trying to solve has a high ratio of number of variables with respect to the number of constraints. As such some common applications are:&lt;br /&gt;
&lt;br /&gt;
* Bandwith packing&lt;br /&gt;
* Bus driver scheduling&lt;br /&gt;
* Generally, column generation algorithms are used for large delivery networks, often in combination with other methods, helping to implement real-time solutions for on-demand logistics. We discuss a supply chain scheduling application below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bandwidth packing&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The objective of this problem is to allocate bandwidth in a telecommunications network to maximize total revenue. The routing of a set of traffic demands between different users is to be decided, taking into account the capacity of the network arcs and the fact that the traffic between each pair of users cannot be split The problem can be formulated as an integer programming problem and the linear programming relaxation solved using column generation and the simplex algorithm. A branch and bound procedure which branches upon a particular path is used in this particular paper&amp;lt;ref name=&amp;quot;:3&amp;quot;&amp;gt;Parker, Mark &amp;amp; Ryan, Jennifer. (1993). A column generation algorithm for bandwidth packing. Telecommunication Systems. 2. 185-195. 10.1007/BF02109857. &amp;lt;/ref&amp;gt; that looks into bandwidth routing, to solve the IP. The column generation algorithm greatly reduces the complexity of this problem. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Bus driver scheduling&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bus driver scheduling aims to find the minimum number of bus drivers to cover a published timetable of a bus company. When scheduling bus drivers, contractual working rules must be enforced, thus complicating the problem. A column generation algorithm can decompose this complicated problem into a master problem and a series of pricing subproblems. The master problem would select optimal duties from a set of known feasible duties, and the pricing subproblem would augment the feasible duty set to improve the solution obtained in the master problem.&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Dung‐Ying Lin, Ching‐Lan Hsu. Journal of Advanced Transportation. Volume50, Issue8, December 2016, Pages 1598-1615. URL: https://onlinelibrary.wiley.com/doi/abs/10.1002/atr.1417&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Supply Chain scheduling problem&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A typical application is where we consider the problem of scheduling a set of shipments between different nodes of a supply chain network. Each shipment has a fixed departure time, as well as an origin and a destination node, which, combined, determine the duration of the associated trip. The aim is to schedule as many shipments as possible, while also minimizing the number of vehicles utilized for this purpose. This problem can be formulated by an integer programming model and an associated branch and price solution algorithm. The optimal solution to the LP relaxation of the problem can be obtained through column generation, solving the linear program a huge number of variables, without explicitly considering all of them. In the context of this application, the master problem schedules the maximum possible number of shipments using only a small set of vehicle-routes, and a column generation (colgen) sub-problem would generate cost-effective vehicle-routes to be fed fed into the master problem. After finding the optimal solution to the LP relaxation of the problem, the algorithm would branch on the fractional decision variables (vehicle-routes), in order to reach the optimal integer solution.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Kozanidis, George. (2014). Column generation for scheduling shipments within a supply chain network with the minimum number of vehicles. OPT-i 2014 - 1st International Conference on Engineering and Applied Sciences Optimization, Proceedings. 888-898&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
Column generation is a way of starting with a small, manageable part of a problem (specifically, with some of the variables), solving that part, analyzing that interim solution to find the next part of the problem (specifically, one or more variables) to add to the model, and then solving the full or extended model. In the column generation method, the algorithm steps are repeated until an optimal solution to the entire problem is achieved.&amp;lt;ref&amp;gt;	ILOG CPLEX 11.0 User&#039;s Manual &amp;gt; Discrete Optimization &amp;gt; Using Column Generation: a Cutting Stock Example &amp;gt; What Is Column Generation? 1997-2007. URL:http://www-eio.upc.es/lceio/manuals/cplex-11/html/usrcplex/usingColumnGen2.html#:~:text=In%20formal%20terms%2C%20column%20generation,method%20of%20solving%20the%20problem.&amp;amp;text=By%201960%2C%20Dantzig%20and%20Wolfe,problems%20with%20a%20decomposable%20structure&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This algorithm provides a way of solving a linear programming problem adding columns (corresponding to constrained variables) during the pricing phase of the problem solving phase, that would otherwise be very tedious to formulate and compute. Generating a column in the primal formulation of a linear programming problem corresponds to adding a constraint in its dual formulation.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2706</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2706"/>
		<updated>2020-12-21T10:39:35Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Set covering problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Column generation algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory, methodology and algorithmic discussions&lt;br /&gt;
*# Some minor typos/article agreement issues exist “is not partical in real-world”.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Please use proper symbol for &amp;quot;greater than or equal to&amp;quot;.&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted. Please fix the same.&lt;br /&gt;
*# Fix typos:  e.g., repeated “for the current”.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2705</id>
		<title>Set covering problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2705"/>
		<updated>2020-12-21T10:38:51Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Approximation via LP relaxation and rounding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Sherry Liang, Khalid Alanazi, Kumail Al Hamoud&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Steward: Allen Yang, Fengqi You&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem is a significant NP-hard problem in combinatorial optimization. Given a collection of elements, the set covering problem aims to find the minimum number of sets that incorporate (cover) all of these elements. &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set covering problem importance has two main aspects: one is pedagogical, and the other is practical. &lt;br /&gt;
&lt;br /&gt;
First, because many greedy approximation methods have been proposed for this combinatorial problem, studying it gives insight into the use of approximation algorithms in solving NP-hard problems. Thus, it is a primal example in teaching computational algorithms. We present a preview of these methods in a later section, and we refer the interested reader to these references for a deeper discussion. &amp;lt;ref name=&amp;quot;one&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;seven&amp;quot;&amp;gt; P. Slavı́k, [https://www.sciencedirect.com/science/article/abs/pii/S0196677497908877 &amp;quot;A Tight Analysis of the Greedy Algorithm for Set Cover],&amp;quot; &#039;&#039;Journal of Algorithms,&#039;&#039;, vol. 25, pp. 237-245, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;What Is the Best Greedy-like Heuristic for the Weighted Set Covering Problem?],&amp;quot; &#039;&#039;Operations Research Letters&#039;&#039;, vol. 44, pp. 366-369, 2016. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, many problems in different industries can be formulated as set covering problems. For example, scheduling machines to perform certain jobs can be thought of as covering the jobs. Picking the optimal location for a cell tower so that it covers the maximum number of customers is another set covering application. Moreover, this problem has many applications in the airline industry, and it was explored on an industrial scale as early as the 1970s. &amp;lt;ref name=&amp;quot;two&amp;quot;&amp;gt; J. Rubin, [https://www.jstor.org/stable/25767684?seq=1 &amp;quot;A Technique for the Solution of Massive Set Covering Problems, with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Transportation Science&#039;&#039;, vol. 7, pp. 34-48, 1973. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem formulation ==&lt;br /&gt;
In the set covering problem, two sets are given: a set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; of elements and a set &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; of subsets of the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. Each subset in &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; is associated with a predetermined cost, and the union of all the subsets covers the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. This combinatorial problem then concerns finding the optimal number of subsets whose union covers the universal set while minimizing the total cost.&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mathematical formulation of the set covering problem is define as follows. We define &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; u_i,..., u_m &amp;lt;/math&amp;gt;} as the universe of elements and &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; s_i,..., s_n &amp;lt;/math&amp;gt;} as a collection of subsets such that &amp;lt;math&amp;gt; s_i \subset U &amp;lt;/math&amp;gt; and the union of &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; covers all elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; (i.e. &amp;lt;math&amp;gt;\cup&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; ). Addionally, each set &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; must cover at least one element of &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and has associated cost &amp;lt;math&amp;gt; c_i&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt; c_i &amp;gt; 0&amp;lt;/math&amp;gt;. The objective is to find the minimum cost sub-collection of sets &amp;lt;math&amp;gt; X &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\subset&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers all the elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Integer linear program formulation ==&lt;br /&gt;
An integer linear program (ILP) model can be formulated for the minimum set covering problem as follows:&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i = \begin{cases} 1, &amp;amp; \text{if subset }i\text{ is selected} \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective function&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Constraints &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{i=1}^n y_i \geq 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i \in \{0, 1\}, \forall i = 1,....,n&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The objective function &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; is defined to minimize the number of subset &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; that cover all elements in the universe by minimizing their total cost. The first constraint implies that every element &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; must be be covered and the second constraint &amp;lt;math&amp;gt; y_i \in \{0, 1\} &amp;lt;/math&amp;gt; indicates that the decision variables are binary which means that every set is either in the set cover or not.&lt;br /&gt;
&lt;br /&gt;
Set covering problems are significant NP-hard optimization problems, which implies that as the size of the problem increases, the computational time to solve it increases exponentially. Therefore, there exist approximation algorithms that can solve large scale problems in polynomial time with optimal or near-optimal solutions. In subsequent sections, we will cover two of the most widely used approximation methods to solve set cover problem in polynomial time which are linear program relaxation methods and classical greedy algorithms. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Approximation via LP relaxation and rounding ==&lt;br /&gt;
Set covering is a classical integer programming problem and solving integer program in general is NP-hard. Therefore, one approach to achieve an &amp;lt;math&amp;gt; O&amp;lt;/math&amp;gt;(log&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;) approximation to set covering problem in polynomial time is solving via linear programming (LP) relaxation algorithms &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;. In LP relaxation, we relax the integrality requirement into a linear constraints. For instance, if we replace the constraints &amp;lt;math&amp;gt; y_i \in \{0, 1\}&amp;lt;/math&amp;gt; with the constraints &amp;lt;math&amp;gt; 0 \leq y_i \leq 1 &amp;lt;/math&amp;gt;, we obtain the following LP problem that can be solved in polynomial time:&lt;br /&gt;
&lt;br /&gt;
minimize  &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
subject to &amp;lt;math&amp;gt; \sum_{i=1}^n y_i \geq 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; 0 \leq y_i\leq 1,   \forall i = 1,....,n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above LP formulation is a relaxation of the original ILP set cover problem. This means that every feasible solution of the integer program is also feasible for this LP program. Additionally, the value of any feasible solution for the integer program is the same value in LP since the objective functions of both integer and linear programs are the same. Solving the LP program will result in an optimal solution that is a lower bound for the original integer program since the minimization of LP finds a feasible solution of lowest possible values. Moreover, we use LP rounding algorithms to directly round the fractional LP solution to an integral combinatorial solution as follows:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deterministic rounding algorithm&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suppose we have an optimal solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; for the linear programming relaxation of the set cover problem.  We round the fractional solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; to an integer solution &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; using LP rounding algorithm. In general, there are two approaches for rounding algorithms, deterministic and randomized rounding algorithm. In this section, we will explain the deterministic algorithms. In this approach, we include subset &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; in our solution if &amp;lt;math&amp;gt; z^* \geq 1/d &amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; is the maximum number of sets in which any element appears. In practice, we set &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; to be as follows:&amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z = \begin{cases} 1, &amp;amp; \text{if } z^*\geq 1/d \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rounding algorithm is an approximation algorithm for the set cover problem. It is clear that the algorithm converge in polynomial time and &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; is a feasible solution to the integer program.&lt;br /&gt;
&lt;br /&gt;
== Greedy approximation algorithm ==&lt;br /&gt;
Greedy algorithms can be used to approximate for optimal or near-optimal solutions for large scale set covering instances in polynomial solvable time. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot; /&amp;gt; The greedy heuristics applies iterative process that, at each stage, select the largest number of uncovered elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;, and delete the uncovered elements, until all elements are covered. &amp;lt;ref name=&amp;quot;ten&amp;quot;&amp;gt; V. Chvatal, [https://pubsonline.informs.org/doi/abs/10.1287/moor.4.3.233 &amp;quot;Greedy Heuristic for the Set-Covering Problem],&amp;quot; &#039;&#039;Mathematics of Operations Research&#039;&#039;, vol. 4, pp. 233-235, 1979. &amp;lt;/ref&amp;gt; Let &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; be the set that contain the covered elements, and &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; be the set that contain the elements of &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt; that still uncovered. At the beginning of the iteration, &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; is empty and all elements  &amp;lt;math&amp;gt; Y \in U &amp;lt;/math&amp;gt;. We iteratively select the set of &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers the largest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and add it to the covered elements in &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;. An example of this algorithm is presented below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Greedy algorithm for minimum  set cover example: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Step 0: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; T \in \Phi &amp;lt;/math&amp;gt;         &amp;lt;math&amp;gt; \quad \quad \quad \quad \quad  &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; stores the covered elements }&lt;br /&gt;
&lt;br /&gt;
Step 1: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;While&#039;&#039;&#039; &amp;lt;math&amp;gt; U \neq \Phi &amp;lt;/math&amp;gt; &#039;&#039;&#039;do:&#039;&#039;&#039;            &amp;lt;math&amp;gt; \quad   &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; stores the uncovered elements &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Step 2:       &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;  select &amp;lt;math&amp;gt; s_i \in S &amp;lt;/math&amp;gt; that covers the highest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 3:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   add &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   remove &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 5: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;End while&#039;&#039;&#039;         &lt;br /&gt;
&lt;br /&gt;
Step 6: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;Return&#039;&#039;&#039; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
Let’s consider a simple example where we assign cameras at different locations. Each location covers some areas of stadiums, and our goal is to put the least amount of cameras such that all areas of stadiums are covered. We have stadium areas from 1 to 15, and possible camera locations from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
We are given that camera location 1 covers stadium areas {1,3,4,6,7}, camera location 2 covers stadium areas {4,7,8,12}, while the remaining camera locations and the stadium areas that the cameras can cover are given in table 1 below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 1 Camera Location vs Stadium Area&lt;br /&gt;
|-&lt;br /&gt;
!camera Location&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|-&lt;br /&gt;
!stadium area&lt;br /&gt;
|1,3,4,6,7&lt;br /&gt;
|4,7,8,12&lt;br /&gt;
|2,5,9,11,13&lt;br /&gt;
|1,2,14,15&lt;br /&gt;
|3,6,10,12,14&lt;br /&gt;
|8,14,15&lt;br /&gt;
|1,2,6,11&lt;br /&gt;
|1,2,4,6,8,12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can then represent the above information using binary values. If the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; can be covered with camera location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, then we have &amp;lt;math&amp;gt;y_{ij} = 1&amp;lt;/math&amp;gt;. If not,&amp;lt;math&amp;gt;y_{ij} = 0&amp;lt;/math&amp;gt;. For instance, stadium area 1 is covered by camera location 1, so &amp;lt;math&amp;gt;y_{11} = 1&amp;lt;/math&amp;gt;, while stadium area 1 is not covered by camera location 2, so &amp;lt;math&amp;gt;y_{12} = 0&amp;lt;/math&amp;gt;. The binary variables &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; values are given in the table below: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 2 Binary Table (All Camera Locations and Stadium Areas)&lt;br /&gt;
!&lt;br /&gt;
!Camera1&lt;br /&gt;
!Camera2&lt;br /&gt;
!Camera3&lt;br /&gt;
!Camera4&lt;br /&gt;
!Camera5&lt;br /&gt;
!Camera6&lt;br /&gt;
!Camera7&lt;br /&gt;
!Camera8&lt;br /&gt;
|-&lt;br /&gt;
!Stadium1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium3&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium4&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium6&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium7&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium8&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium12&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium15&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We introduce another binary variable &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to indicate if a camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;z_j = 1&amp;lt;/math&amp;gt; if camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, while &amp;lt;math&amp;gt;z_j = 0&amp;lt;/math&amp;gt; if not. &lt;br /&gt;
&lt;br /&gt;
Our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;. For each stadium, there’s a constraint that the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; has to be covered by at least one camera location. For instance, for stadium area 1, we have &amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;, while for stadium 2, we have &amp;lt;math&amp;gt;z_3 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;. All the 15 constraints that corresponds to 15 stadium areas are listed below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;s.t. Constraints 1 to 15 are satisfied:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 + z_4 + z_7 + z_8 \geq 1 (2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_5 \geq 1             (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_2 + z_8 \geq 1       (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 \geq 1                 (5)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1  (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1             (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                  (9)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                    (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3 + z_7 \geq 1              (11)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1        (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                   (13)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1        (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1              (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From constraint {5,9,13}, we can obtain &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. Thus we no longer need constraint 2 and 11 as they are satisfied when  &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. With &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt; determined, the constraints left are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 \geq 1            (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 + z_8 \geq 1      (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1 (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                  (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1      (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1      (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now if we take a look at constraint &amp;lt;math&amp;gt;10. z_5 \geqslant 1&amp;lt;/math&amp;gt; so &amp;lt;math&amp;gt;z_5&amp;lt;/math&amp;gt; shall equal to 1. As &amp;lt;math&amp;gt;z_5 = 1&amp;lt;/math&amp;gt;, constraint {3,6,12,14} are satisfied no matter what other &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are taken. If we also take a look at constraint 7 and 4, if constraint 4 will be satisfied as long as constraint 7 is satisfied since &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are nonnegative, so constraint 4 is no longer needed. The remaining constraints are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next step is to focus on constraint 7 and 15. We can have at least 4 combinations of &amp;lt;math&amp;gt;z_1, z_2, z_4, z_6&amp;lt;/math&amp;gt;values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A: z_1 = 1, z_2 = 0, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B: z_1 = 1, z_2 = 0, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C: z_1 = 0, z_2 = 1, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D: z_1 = 0, z_2 = 1, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can then discuss each combination and determine &amp;lt;math&amp;gt;z_7, z_8&amp;lt;/math&amp;gt;values for constraint 1 and 8 to be satisfied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;: constraint 1 already satisfied, we need &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 8.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;: we need &amp;lt;math&amp;gt;z_7 = 1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 1, while constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Our final step is to compare the four combinations. Since our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; and combinations &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; require the least amount of &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to be 1, they are the optimal solutions.&lt;br /&gt;
&lt;br /&gt;
To conclude, our two solutions are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 1: z_1 = 1, z_3 = 1, z_5 = 1, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 2: z_2 = 1, z_3 = 1, z_4 = 1, z_5 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The minimum number of cameras that we need to install is 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Let&#039;s now consider solving the problem using the greedy algorithm.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We have a set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; (stadium areas) that needs to be covered with &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; (camera locations). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U = \{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \{C_1,C_2,C_3,C_4,C_5,C_6,C_7,C_8\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_1 = \{1,3,4,6,7\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_2 = \{4,7,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_3 = \{2,5,9,11,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_4 = \{1,2,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_5 = \{3,6,10,12,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_6 = \{8,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_7 = \{1,2,6,11\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_8 = \{1,2,4,6,8,12\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The cost of each Camera Location is the same in this case, we just hope to minimize the total number of cameras used, so we can assume the cost of each &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; to be 1.&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; represents set of elements included so far. Initialize &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; to be empty.&lt;br /&gt;
&lt;br /&gt;
First Iteration: &lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_8 = 1/6&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Second Iteration: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Third Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fourth Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/0&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; all have meaningful and the same values, we can choose either both &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; or both &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt;, as &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;C_2 &amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;15&amp;lt;/math&amp;gt;  to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The solution we obtained is: &lt;br /&gt;
&lt;br /&gt;
Option 1: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option 2: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The greedy algorithm does not provide the optimal solution in this case.&lt;br /&gt;
&lt;br /&gt;
The usual elimination algorithm would give us the minimum number of cameras that we need to install to be4, but the greedy algorithm gives us the minimum number of cameras that we need to install is 5.&lt;br /&gt;
&lt;br /&gt;
== Applications==&lt;br /&gt;
&lt;br /&gt;
The applications of the set covering problem span a wide range of applications, but its usefulness is evident in industrial and governmental planning. Variations of the set covering problem that are of practical significance include the following.&lt;br /&gt;
;The optimal location problem&lt;br /&gt;
&lt;br /&gt;
This set covering problems is concerned with maximizing the coverage of some public facilities placed at different locations. &amp;lt;ref name=&amp;quot;three&amp;quot;&amp;gt; R. Church and C. ReVelle, [https://link.springer.com/article/10.1007/BF01942293 &amp;quot;The maximal covering location problem],&amp;quot; &#039;&#039;Papers of the Regional Science Association&#039;&#039;, vol. 32, pp. 101-118, 1974. &amp;lt;/ref&amp;gt; Consider the problem of placing fire stations to serve the towns of some city. &amp;lt;ref name=&amp;quot;four&amp;quot;&amp;gt; E. Aktaş, Ö. Özaydın, B. Bozkaya, F. Ülengin, and Ş. Önsel, [https://pubsonline.informs.org/doi/10.1287/inte.1120.0671 &amp;quot;Optimizing Fire Station Locations for the Istanbul Metropolitan Municipality],&amp;quot; &#039;&#039;Interfaces&#039;&#039;, vol. 43, pp. 240-255, 2013. &amp;lt;/ref&amp;gt; If each fire station can serve its town and all adjacent towns, we can formulate a set covering problem where each subset consists of a set of adjacent towns. The problem is then solved to minimize the required number of fire stations to serve the whole city. &lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt; y_i  &amp;lt;/math&amp;gt; be the decision variable corresponding to choosing to build a fire station at town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt; S_i &amp;lt;/math&amp;gt; be a subset of towns including town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; and all its neighbors. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
such that &amp;lt;math&amp;gt; \sum_{i\in S_i} y_i \geq 1, \forall i&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
A real-world case study involving optimizing fire station locations in Istanbul is analyzed in this reference. &amp;lt;ref name=&amp;quot;four&amp;quot; /&amp;gt; The Istanbul municipality serves 790 subdistricts, which should all be covered by a fire station. Each subdistrict is considered covered if it has a neighboring district (a district at most 5 minutes away) that has a fire station. For detailed computational analysis, we refer the reader to the mentioned academic paper.&lt;br /&gt;
; The optimal route selection problem&lt;br /&gt;
&lt;br /&gt;
Consider the problem of selecting the optimal bus routes to place pothole detectors. Due to the scarcity of the physical sensors, the problem does not allow for placing a detector on every road. The task of finding the maximum coverage using a limited number of detectors could be formulated as a set covering problem. &amp;lt;ref name=&amp;quot;five&amp;quot;&amp;gt; J. Ali and V. Dyo, [https://www.scitepress.org/Link.aspx?doi=10.5220/0006469800830088 &amp;quot;Coverage and Mobile Sensor Placement for Vehicles on Predetermined Routes: A Greedy Heuristic Approach],&amp;quot; &#039;&#039;Proceedings of the 14th International Joint Conference on E-Business and Telecommunications&#039;&#039;, pp. 83-88, 2017. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;eleven&amp;quot;&amp;gt; P.H. Cruz Caminha , R. De Souza Couto , L.H. Maciel Kosmalski Costa , A. Fladenmuller , and M. Dias de Amorim, [https://www.mdpi.com/1424-8220/18/6/1976 &amp;quot;On the Coverage of Bus-Based Mobile Sensing],&amp;quot; &#039;&#039;Sensors&#039;&#039;, 2018. &amp;lt;/ref&amp;gt; Specifically, giving a collection of bus routes &#039;&#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039;&#039;, where each route itself is divided into segments. Route &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. The segments of two different routes can overlap, and each segment is associated with a length &amp;lt;math&amp;gt; a_j &amp;lt;/math&amp;gt;. The goal is then to select the routes that maximize the total covered distance.&lt;br /&gt;
&lt;br /&gt;
This is quite different from other applications because it results in a maximization formulation, rather than a minimization formulation. Suppose we want to use at most &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; different routes. We want to find &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; routes that maximize the length of of covered segments. Let &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; be the binary decision variable corresponding to selecting route &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and let &amp;lt;math&amp;gt; y_j &amp;lt;/math&amp;gt; be the decision variable associated with covering segment &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. Let us also denote the set of routes that cover segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt; C_j &amp;lt;/math&amp;gt;. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ \sum_{j} a_jy_j\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ \sum_{i\in C_j} x_i \geq y_j \quad \forall j \\&lt;br /&gt;
&amp;amp; ~~ \sum_{i} x_i = k \\ &lt;br /&gt;
&amp;amp; ~~ x_i,y_{j} \in \{0,1\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The work by Ali and Dyo explores a greedy approximation algorithm to solve an optimal selection problem including 713 bus routes in Greater London. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; Using 14% of the routes only (100 routes), the greedy algorithm returns a solution that covers 25% of the segments in Greater London. For a details of the approximation algorithm and the world case study, we refer the reader to this reference. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; For a significantly larger case study involving 5747 buses covering 5060km, we refer the reader to this academic article. &amp;lt;ref name=&amp;quot;eleven&amp;quot; /&amp;gt;&lt;br /&gt;
;The airline crew scheduling problem&lt;br /&gt;
&lt;br /&gt;
An important application of large-scale set covering is the airline crew scheduling problem, which pertains to assigning airline staff to work shifts. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;six&amp;quot;&amp;gt; E. Marchiori and A. Steenbeek, [https://link.springer.com/chapter/10.1007/3-540-45561-2_36 &amp;quot;An Evolutionary Algorithm for Large Scale Set Covering Problems with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Real-World Applications of Evolutionary Computing. EvoWorkshops 2000. Lecture Notes in Computer Science&#039;&#039;, 2000. &amp;lt;/ref&amp;gt; Thinking of the collection of flights as a universal set to be covered, we can formulate a set covering problem to search for the optimal assignment of employees to flights. Due to the complexity of airline schedules, this problem is usually divided into two subproblems: crew pairing and crew assignment. We refer the interested reader to this survey, which contains several problem instances with the number of flights ranging from 1013 to 7765 flights, for a detailed analysis of the formulation and algorithms that pertain to this significant application. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;eight&amp;quot;&amp;gt; A. Kasirzadeh, M. Saddoune, and F. Soumis [https://www.sciencedirect.com/science/article/pii/S2192437620300820?via%3Dihub &amp;quot;Airline crew scheduling: models, algorithms, and data sets],&amp;quot; &#039;&#039;EURO Journal on Transportation and Logistics&#039;&#039;, vol. 6, pp. 111-137, 2017. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem, which aims to find the least number of subsets that cover some universal set, is a widely known NP-hard combinatorial problem. Due to its applicability to route planning and airline crew scheduling, several methods have been proposed to solve it. Its straightforward formulation allows for the use of off-the-shelf optimizers to solve it. Moreover, heuristic techniques and greedy algorithms can be used to solve large-scale set covering problems for industrial applications. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2704</id>
		<title>Set covering problem</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=Set_covering_problem&amp;diff=2704"/>
		<updated>2020-12-21T10:37:02Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Integer linear program formulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Authors: Sherry Liang, Khalid Alanazi, Kumail Al Hamoud&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Steward: Allen Yang, Fengqi You&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem is a significant NP-hard problem in combinatorial optimization. Given a collection of elements, the set covering problem aims to find the minimum number of sets that incorporate (cover) all of these elements. &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set covering problem importance has two main aspects: one is pedagogical, and the other is practical. &lt;br /&gt;
&lt;br /&gt;
First, because many greedy approximation methods have been proposed for this combinatorial problem, studying it gives insight into the use of approximation algorithms in solving NP-hard problems. Thus, it is a primal example in teaching computational algorithms. We present a preview of these methods in a later section, and we refer the interested reader to these references for a deeper discussion. &amp;lt;ref name=&amp;quot;one&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;seven&amp;quot;&amp;gt; P. Slavı́k, [https://www.sciencedirect.com/science/article/abs/pii/S0196677497908877 &amp;quot;A Tight Analysis of the Greedy Algorithm for Set Cover],&amp;quot; &#039;&#039;Journal of Algorithms,&#039;&#039;, vol. 25, pp. 237-245, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;What Is the Best Greedy-like Heuristic for the Weighted Set Covering Problem?],&amp;quot; &#039;&#039;Operations Research Letters&#039;&#039;, vol. 44, pp. 366-369, 2016. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, many problems in different industries can be formulated as set covering problems. For example, scheduling machines to perform certain jobs can be thought of as covering the jobs. Picking the optimal location for a cell tower so that it covers the maximum number of customers is another set covering application. Moreover, this problem has many applications in the airline industry, and it was explored on an industrial scale as early as the 1970s. &amp;lt;ref name=&amp;quot;two&amp;quot;&amp;gt; J. Rubin, [https://www.jstor.org/stable/25767684?seq=1 &amp;quot;A Technique for the Solution of Massive Set Covering Problems, with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Transportation Science&#039;&#039;, vol. 7, pp. 34-48, 1973. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem formulation ==&lt;br /&gt;
In the set covering problem, two sets are given: a set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; of elements and a set &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; of subsets of the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. Each subset in &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; is associated with a predetermined cost, and the union of all the subsets covers the set &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;. This combinatorial problem then concerns finding the optimal number of subsets whose union covers the universal set while minimizing the total cost.&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mathematical formulation of the set covering problem is define as follows. We define &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; u_i,..., u_m &amp;lt;/math&amp;gt;} as the universe of elements and &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; = { &amp;lt;math&amp;gt; s_i,..., s_n &amp;lt;/math&amp;gt;} as a collection of subsets such that &amp;lt;math&amp;gt; s_i \subset U &amp;lt;/math&amp;gt; and the union of &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; covers all elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; (i.e. &amp;lt;math&amp;gt;\cup&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; ). Addionally, each set &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; must cover at least one element of &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and has associated cost &amp;lt;math&amp;gt; c_i&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt; c_i &amp;gt; 0&amp;lt;/math&amp;gt;. The objective is to find the minimum cost sub-collection of sets &amp;lt;math&amp;gt; X &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\subset&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers all the elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Integer linear program formulation ==&lt;br /&gt;
An integer linear program (ILP) model can be formulated for the minimum set covering problem as follows:&amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decision variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i = \begin{cases} 1, &amp;amp; \text{if subset }i\text{ is selected} \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective function&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Constraints &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{i=1}^n y_i \geq 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; y_i \in \{0, 1\}, \forall i = 1,....,n&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The objective function &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; is defined to minimize the number of subset &amp;lt;math&amp;gt; s_i&amp;lt;/math&amp;gt; that cover all elements in the universe by minimizing their total cost. The first constraint implies that every element &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; must be be covered and the second constraint &amp;lt;math&amp;gt; y_i \in \{0, 1\} &amp;lt;/math&amp;gt; indicates that the decision variables are binary which means that every set is either in the set cover or not.&lt;br /&gt;
&lt;br /&gt;
Set covering problems are significant NP-hard optimization problems, which implies that as the size of the problem increases, the computational time to solve it increases exponentially. Therefore, there exist approximation algorithms that can solve large scale problems in polynomial time with optimal or near-optimal solutions. In subsequent sections, we will cover two of the most widely used approximation methods to solve set cover problem in polynomial time which are linear program relaxation methods and classical greedy algorithms. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Approximation via LP relaxation and rounding ==&lt;br /&gt;
Set covering is a classical integer programming problem and solving integer program in general is NP-hard. Therefore, one approach to achieve an &amp;lt;math&amp;gt; O&amp;lt;/math&amp;gt;(log&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;) approximation to set covering problem in polynomial time is solving via linear programming (LP) relaxation algorithms &amp;lt;ref name=&amp;quot;one&amp;quot;&amp;gt; T. Grossman and A. Wool, [https://www.sciencedirect.com/science/article/abs/pii/S0377221796001610 &amp;quot;Computational experience with approximation algorithms for the set covering problem],&amp;quot; &#039;&#039;European Journal of Operational Research&#039;&#039;, vol. 101, pp. 81-92, 1997. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;. In LP relaxation, we relax the integrality requirement into a linear constraints. For instance, if we replace the constraints &amp;lt;math&amp;gt; y_i \in \{0, 1\}&amp;lt;/math&amp;gt; with the constraints &amp;lt;math&amp;gt; 0 =&amp;lt; y_i &amp;lt;= 1 &amp;lt;/math&amp;gt;, we obtain the following LP problem that can be solved in polynomial time:&lt;br /&gt;
&lt;br /&gt;
minimize  &amp;lt;math&amp;gt;\sum_{i=1}^n c_i y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
subject to &amp;lt;math&amp;gt; \sum_{i=1}^n y_i &amp;gt;= 1, \forall i= 1,....,m&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; 0 =&amp;lt; y_i&amp;lt;= 1,   \forall i = 1,....,n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above LP formulation is a relaxation of the original ILP set cover problem. This means that every feasible solution of the integer program is also feasible for this LP program. Additionally, the value of any feasible solution for the integer program is the same value in LP since the objective functions of both integer and linear programs are the same. Solving the LP program will result in an optimal solution that is a lower bound for the original integer program since the minimization of LP finds a feasible solution of lowest possible values. Moreover, we use LP rounding algorithms to directly round the fractional LP solution to an integral combinatorial solution as follows:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deterministic rounding algorithm&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suppose we have an optimal solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; for the linear programming relaxation of the set cover problem.  We round the fractional solution &amp;lt;math&amp;gt; z^* &amp;lt;/math&amp;gt; to an integer solution &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; using LP rounding algorithm. In general, there are two approaches for rounding algorithms, deterministic and randomized rounding algorithm. In this section, we will explain the deterministic algorithms.In this approach, we include subset &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; in our solution if &amp;lt;math&amp;gt; z^* &amp;gt;= 1/d &amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; is the maximum number of sets in which any element appears. In practice, we set &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; to be as follows:&amp;lt;ref name=&amp;quot;twelve&amp;quot;&amp;gt;  Williamson, David P., and David B. Shmoys. “The Design of Approximation Algorithms” [https://www.designofapproxalgs.com/book.pdf]. “Cambridge University Press”, 2011. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z = \begin{cases} 1, &amp;amp; \text{if } z^*&amp;gt;= 1/d \\ 0, &amp;amp; \text{otherwise } \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rounding algorithm is an approximation algorithm for the set cover problem. It is clear that the algorithm converge in polynomial time and &amp;lt;math&amp;gt; z &amp;lt;/math&amp;gt; is a feasible solution to the integer program.&lt;br /&gt;
&lt;br /&gt;
== Greedy approximation algorithm ==&lt;br /&gt;
Greedy algorithms can be used to approximate for optimal or near-optimal solutions for large scale set covering instances in polynomial solvable time. &amp;lt;ref name=&amp;quot;seven&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;nine&amp;quot; /&amp;gt; The greedy heuristics applies iterative process that, at each stage, select the largest number of uncovered elements in the universe &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;, and delete the uncovered elements, until all elements are covered. &amp;lt;ref name=&amp;quot;ten&amp;quot;&amp;gt; V. Chvatal, [https://pubsonline.informs.org/doi/abs/10.1287/moor.4.3.233 &amp;quot;Greedy Heuristic for the Set-Covering Problem],&amp;quot; &#039;&#039;Mathematics of Operations Research&#039;&#039;, vol. 4, pp. 233-235, 1979. &amp;lt;/ref&amp;gt; Let &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; be the set that contain the covered elements, and &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; be the set that contain the elements of &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt; that still uncovered. At the beginning of the iteration, &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; is empty and all elements  &amp;lt;math&amp;gt; Y \in U &amp;lt;/math&amp;gt;. We iteratively select the set of &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; that covers the largest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; and add it to the covered elements in &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;. An example of this algorithm is presented below. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Greedy algorithm for minimum  set cover example: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Step 0: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; T \in \Phi &amp;lt;/math&amp;gt;         &amp;lt;math&amp;gt; \quad \quad \quad \quad \quad  &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; stores the covered elements }&lt;br /&gt;
&lt;br /&gt;
Step 1: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;While&#039;&#039;&#039; &amp;lt;math&amp;gt; U \neq \Phi &amp;lt;/math&amp;gt; &#039;&#039;&#039;do:&#039;&#039;&#039;            &amp;lt;math&amp;gt; \quad   &amp;lt;/math&amp;gt;    { &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt; stores the uncovered elements &amp;lt;math&amp;gt; Y &amp;lt;/math&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Step 2:       &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;  select &amp;lt;math&amp;gt; s_i \in S &amp;lt;/math&amp;gt; that covers the highest number of elements in &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 3:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   add &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4:      &amp;lt;math&amp;gt; \quad \quad \quad &amp;lt;/math&amp;gt;   remove &amp;lt;math&amp;gt; s_i &amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt; U &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 5: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;End while&#039;&#039;&#039;         &lt;br /&gt;
&lt;br /&gt;
Step 6: &amp;lt;math&amp;gt; \quad  &amp;lt;/math&amp;gt; &#039;&#039;&#039;Return&#039;&#039;&#039; &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Numerical Example==&lt;br /&gt;
Let’s consider a simple example where we assign cameras at different locations. Each location covers some areas of stadiums, and our goal is to put the least amount of cameras such that all areas of stadiums are covered. We have stadium areas from 1 to 15, and possible camera locations from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
We are given that camera location 1 covers stadium areas {1,3,4,6,7}, camera location 2 covers stadium areas {4,7,8,12}, while the remaining camera locations and the stadium areas that the cameras can cover are given in table 1 below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 1 Camera Location vs Stadium Area&lt;br /&gt;
|-&lt;br /&gt;
!camera Location&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|-&lt;br /&gt;
!stadium area&lt;br /&gt;
|1,3,4,6,7&lt;br /&gt;
|4,7,8,12&lt;br /&gt;
|2,5,9,11,13&lt;br /&gt;
|1,2,14,15&lt;br /&gt;
|3,6,10,12,14&lt;br /&gt;
|8,14,15&lt;br /&gt;
|1,2,6,11&lt;br /&gt;
|1,2,4,6,8,12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can then represent the above information using binary values. If the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; can be covered with camera location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, then we have &amp;lt;math&amp;gt;y_{ij} = 1&amp;lt;/math&amp;gt;. If not,&amp;lt;math&amp;gt;y_{ij} = 0&amp;lt;/math&amp;gt;. For instance, stadium area 1 is covered by camera location 1, so &amp;lt;math&amp;gt;y_{11} = 1&amp;lt;/math&amp;gt;, while stadium area 1 is not covered by camera location 2, so &amp;lt;math&amp;gt;y_{12} = 0&amp;lt;/math&amp;gt;. The binary variables &amp;lt;math&amp;gt;y_{ij}&amp;lt;/math&amp;gt; values are given in the table below: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Table 2 Binary Table (All Camera Locations and Stadium Areas)&lt;br /&gt;
!&lt;br /&gt;
!Camera1&lt;br /&gt;
!Camera2&lt;br /&gt;
!Camera3&lt;br /&gt;
!Camera4&lt;br /&gt;
!Camera5&lt;br /&gt;
!Camera6&lt;br /&gt;
!Camera7&lt;br /&gt;
!Camera8&lt;br /&gt;
|-&lt;br /&gt;
!Stadium1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium3&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium4&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium6&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium7&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium8&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium12&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!Stadium13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Stadium15&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We introduce another binary variable &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to indicate if a camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;z_j = 1&amp;lt;/math&amp;gt; if camera is installed at location &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, while &amp;lt;math&amp;gt;z_j = 0&amp;lt;/math&amp;gt; if not. &lt;br /&gt;
&lt;br /&gt;
Our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;. For each stadium, there’s a constraint that the stadium area &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; has to be covered by at least one camera location. For instance, for stadium area 1, we have &amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;, while for stadium 2, we have &amp;lt;math&amp;gt;z_3 + z_4 + z_7 + z_8 \geq 1&amp;lt;/math&amp;gt;. All the 15 constraints that corresponds to 15 stadium areas are listed below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;s.t. Constraints 1 to 15 are satisfied:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 + z_4 + z_7 + z_8 \geq 1 (2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_5 \geq 1             (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_1 + z_2 + z_8 \geq 1       (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_3 \geq 1                 (5)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1  (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1             (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                  (9)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                    (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3 + z_7 \geq 1              (11)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1        (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_3  \geq 1                   (13)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1        (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1              (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From constraint {5,9,13}, we can obtain &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. Thus we no longer need constraint 2 and 11 as they are satisfied when  &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt;. With &amp;lt;math&amp;gt;z_3 = 1&amp;lt;/math&amp;gt; determined, the constraints left are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 \geq 1            (3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 + z_8 \geq 1      (4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_5 + z_7 + z_8 \geq 1 (6)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_5 \geq 1                  (10)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_5 + z_8 \geq 1      (12)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_5 + z_6 \geq 1      (14)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now if we take a look at constraint &amp;lt;math&amp;gt;10. z_5 \geqslant 1&amp;lt;/math&amp;gt; so &amp;lt;math&amp;gt;z_5&amp;lt;/math&amp;gt; shall equal to 1. As &amp;lt;math&amp;gt;z_5 = 1&amp;lt;/math&amp;gt;, constraint {3,6,12,14} are satisfied no matter what other &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are taken. If we also take a look at constraint 7 and 4, if constraint 4 will be satisfied as long as constraint 7 is satisfied since &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; values are nonnegative, so constraint 4 is no longer needed. The remaining constraints are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
s.t.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_4 + z_7 + z_8 \geq 1 (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_1 + z_2 \geq 1            (7)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_2 + z_6 + z_8 \geq 1       (8)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z_4 + z_6 \geq 1           (15)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next step is to focus on constraint 7 and 15. We can have at least 4 combinations of &amp;lt;math&amp;gt;z_1, z_2, z_4, z_6&amp;lt;/math&amp;gt;values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A: z_1 = 1, z_2 = 0, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B: z_1 = 1, z_2 = 0, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C: z_1 = 0, z_2 = 1, z_4 = 1, z_6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D: z_1 = 0, z_2 = 1, z_4 = 0, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can then discuss each combination and determine &amp;lt;math&amp;gt;z_7, z_8&amp;lt;/math&amp;gt;values for constraint 1 and 8 to be satisfied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;: constraint 1 already satisfied, we need &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 8.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;: constraint 1 already satisfied, constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Combination &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;: we need &amp;lt;math&amp;gt;z_7 = 1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;z_8 = 1&amp;lt;/math&amp;gt; to satisfy constraint 1, while constraint 8 already satisfied.&lt;br /&gt;
&lt;br /&gt;
Our final step is to compare the four combinations. Since our objective is to minimize &amp;lt;math&amp;gt;\sum_{j=1}^8 z_j&amp;lt;/math&amp;gt; and combinations &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; require the least amount of &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt; to be 1, they are the optimal solutions.&lt;br /&gt;
&lt;br /&gt;
To conclude, our two solutions are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 1: z_1 = 1, z_3 = 1, z_5 = 1, z_6 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Solution 2: z_2 = 1, z_3 = 1, z_4 = 1, z_5 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The minimum number of cameras that we need to install is 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Let&#039;s now consider solving the problem using the greedy algorithm.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We have a set &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; (stadium areas) that needs to be covered with &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; (camera locations). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U = \{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \{C_1,C_2,C_3,C_4,C_5,C_6,C_7,C_8\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_1 = \{1,3,4,6,7\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_2 = \{4,7,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_3 = \{2,5,9,11,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_4 = \{1,2,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_5 = \{3,6,10,12,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_6 = \{8,14,15\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_7 = \{1,2,6,11\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_8 = \{1,2,4,6,8,12\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The cost of each Camera Location is the same in this case, we just hope to minimize the total number of cameras used, so we can assume the cost of each &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; to be 1.&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; represents set of elements included so far. Initialize &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; to be empty.&lt;br /&gt;
&lt;br /&gt;
First Iteration: &lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/5&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_8 = 1/6&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Second Iteration: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,6,8,12\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_3 = 1/4&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Third Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,4,5,6,8,9,11,12,13\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_5 = 1/3&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/2&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; has minimum value, &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; is added, and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fourth Iteration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\{1,2,3,4,5,6,8,9,10,11,12,13,14\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The per new element cost for &amp;lt;math&amp;gt;C_1 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_2 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_4 = 1/0&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_6 = 1/1&amp;lt;/math&amp;gt;, for &amp;lt;math&amp;gt;C_7 = 1/0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; all have meaningful and the same values, we can choose either both &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; or both &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt;, as &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;C_2 &amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; add &amp;lt;math&amp;gt;15&amp;lt;/math&amp;gt;  to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; becomes &amp;lt;math&amp;gt;\{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The solution we obtained is: &lt;br /&gt;
&lt;br /&gt;
Option 1: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option 2: &amp;lt;math&amp;gt;C_8&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_3&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_5&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_6&amp;lt;/math&amp;gt; + &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The greedy algorithm does not provide the optimal solution in this case.&lt;br /&gt;
&lt;br /&gt;
The usual elimination algorithm would give us the minimum number of cameras that we need to install to be4, but the greedy algorithm gives us the minimum number of cameras that we need to install is 5.&lt;br /&gt;
&lt;br /&gt;
== Applications==&lt;br /&gt;
&lt;br /&gt;
The applications of the set covering problem span a wide range of applications, but its usefulness is evident in industrial and governmental planning. Variations of the set covering problem that are of practical significance include the following.&lt;br /&gt;
;The optimal location problem&lt;br /&gt;
&lt;br /&gt;
This set covering problems is concerned with maximizing the coverage of some public facilities placed at different locations. &amp;lt;ref name=&amp;quot;three&amp;quot;&amp;gt; R. Church and C. ReVelle, [https://link.springer.com/article/10.1007/BF01942293 &amp;quot;The maximal covering location problem],&amp;quot; &#039;&#039;Papers of the Regional Science Association&#039;&#039;, vol. 32, pp. 101-118, 1974. &amp;lt;/ref&amp;gt; Consider the problem of placing fire stations to serve the towns of some city. &amp;lt;ref name=&amp;quot;four&amp;quot;&amp;gt; E. Aktaş, Ö. Özaydın, B. Bozkaya, F. Ülengin, and Ş. Önsel, [https://pubsonline.informs.org/doi/10.1287/inte.1120.0671 &amp;quot;Optimizing Fire Station Locations for the Istanbul Metropolitan Municipality],&amp;quot; &#039;&#039;Interfaces&#039;&#039;, vol. 43, pp. 240-255, 2013. &amp;lt;/ref&amp;gt; If each fire station can serve its town and all adjacent towns, we can formulate a set covering problem where each subset consists of a set of adjacent towns. The problem is then solved to minimize the required number of fire stations to serve the whole city. &lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt; y_i  &amp;lt;/math&amp;gt; be the decision variable corresponding to choosing to build a fire station at town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt; S_i &amp;lt;/math&amp;gt; be a subset of towns including town &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; and all its neighbors. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
minimize &amp;lt;math&amp;gt;\sum_{i=1}^n y_i&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
such that &amp;lt;math&amp;gt; \sum_{i\in S_i} y_i \geq 1, \forall i&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
A real-world case study involving optimizing fire station locations in Istanbul is analyzed in this reference. &amp;lt;ref name=&amp;quot;four&amp;quot; /&amp;gt; The Istanbul municipality serves 790 subdistricts, which should all be covered by a fire station. Each subdistrict is considered covered if it has a neighboring district (a district at most 5 minutes away) that has a fire station. For detailed computational analysis, we refer the reader to the mentioned academic paper.&lt;br /&gt;
; The optimal route selection problem&lt;br /&gt;
&lt;br /&gt;
Consider the problem of selecting the optimal bus routes to place pothole detectors. Due to the scarcity of the physical sensors, the problem does not allow for placing a detector on every road. The task of finding the maximum coverage using a limited number of detectors could be formulated as a set covering problem. &amp;lt;ref name=&amp;quot;five&amp;quot;&amp;gt; J. Ali and V. Dyo, [https://www.scitepress.org/Link.aspx?doi=10.5220/0006469800830088 &amp;quot;Coverage and Mobile Sensor Placement for Vehicles on Predetermined Routes: A Greedy Heuristic Approach],&amp;quot; &#039;&#039;Proceedings of the 14th International Joint Conference on E-Business and Telecommunications&#039;&#039;, pp. 83-88, 2017. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;eleven&amp;quot;&amp;gt; P.H. Cruz Caminha , R. De Souza Couto , L.H. Maciel Kosmalski Costa , A. Fladenmuller , and M. Dias de Amorim, [https://www.mdpi.com/1424-8220/18/6/1976 &amp;quot;On the Coverage of Bus-Based Mobile Sensing],&amp;quot; &#039;&#039;Sensors&#039;&#039;, 2018. &amp;lt;/ref&amp;gt; Specifically, giving a collection of bus routes &#039;&#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039;&#039;, where each route itself is divided into segments. Route &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. The segments of two different routes can overlap, and each segment is associated with a length &amp;lt;math&amp;gt; a_j &amp;lt;/math&amp;gt;. The goal is then to select the routes that maximize the total covered distance.&lt;br /&gt;
&lt;br /&gt;
This is quite different from other applications because it results in a maximization formulation, rather than a minimization formulation. Suppose we want to use at most &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; different routes. We want to find &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; routes that maximize the length of of covered segments. Let &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; be the binary decision variable corresponding to selecting route &amp;lt;math&amp;gt; R_i &amp;lt;/math&amp;gt;, and let &amp;lt;math&amp;gt; y_j &amp;lt;/math&amp;gt; be the decision variable associated with covering segment &amp;lt;math&amp;gt; S_j &amp;lt;/math&amp;gt;. Let us also denote the set of routes that cover segment &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt; C_j &amp;lt;/math&amp;gt;. The problem is then formulated as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\text{max} &amp;amp; ~~ \sum_{j} a_jy_j\\&lt;br /&gt;
\text{s.t} &amp;amp; ~~ \sum_{i\in C_j} x_i \geq y_j \quad \forall j \\&lt;br /&gt;
&amp;amp; ~~ \sum_{i} x_i = k \\ &lt;br /&gt;
&amp;amp; ~~ x_i,y_{j} \in \{0,1\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The work by Ali and Dyo explores a greedy approximation algorithm to solve an optimal selection problem including 713 bus routes in Greater London. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; Using 14% of the routes only (100 routes), the greedy algorithm returns a solution that covers 25% of the segments in Greater London. For a details of the approximation algorithm and the world case study, we refer the reader to this reference. &amp;lt;ref name=&amp;quot;five&amp;quot; /&amp;gt; For a significantly larger case study involving 5747 buses covering 5060km, we refer the reader to this academic article. &amp;lt;ref name=&amp;quot;eleven&amp;quot; /&amp;gt;&lt;br /&gt;
;The airline crew scheduling problem&lt;br /&gt;
&lt;br /&gt;
An important application of large-scale set covering is the airline crew scheduling problem, which pertains to assigning airline staff to work shifts. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;six&amp;quot;&amp;gt; E. Marchiori and A. Steenbeek, [https://link.springer.com/chapter/10.1007/3-540-45561-2_36 &amp;quot;An Evolutionary Algorithm for Large Scale Set Covering Problems with Application to Airline Crew Scheduling],&amp;quot; &#039;&#039;Real-World Applications of Evolutionary Computing. EvoWorkshops 2000. Lecture Notes in Computer Science&#039;&#039;, 2000. &amp;lt;/ref&amp;gt; Thinking of the collection of flights as a universal set to be covered, we can formulate a set covering problem to search for the optimal assignment of employees to flights. Due to the complexity of airline schedules, this problem is usually divided into two subproblems: crew pairing and crew assignment. We refer the interested reader to this survey, which contains several problem instances with the number of flights ranging from 1013 to 7765 flights, for a detailed analysis of the formulation and algorithms that pertain to this significant application. &amp;lt;ref name=&amp;quot;two&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;eight&amp;quot;&amp;gt; A. Kasirzadeh, M. Saddoune, and F. Soumis [https://www.sciencedirect.com/science/article/pii/S2192437620300820?via%3Dihub &amp;quot;Airline crew scheduling: models, algorithms, and data sets],&amp;quot; &#039;&#039;EURO Journal on Transportation and Logistics&#039;&#039;, vol. 6, pp. 111-137, 2017. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The set covering problem, which aims to find the least number of subsets that cover some universal set, is a widely known NP-hard combinatorial problem. Due to its applicability to route planning and airline crew scheduling, several methods have been proposed to solve it. Its straightforward formulation allows for the use of off-the-shelf optimizers to solve it. Moreover, heuristic techniques and greedy algorithms can be used to solve large-scale set covering problems for industrial applications. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
	<entry>
		<id>https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2703</id>
		<title>2020 Cornell Optimization Open Textbook Feedback</title>
		<link rel="alternate" type="text/html" href="https://optimization.cbe.cornell.edu/index.php?title=2020_Cornell_Optimization_Open_Textbook_Feedback&amp;diff=2703"/>
		<updated>2020-12-21T10:33:48Z</updated>

		<summary type="html">&lt;p&gt;Wc593: /* Facility location problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Computational complexity]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Finding subsets of a set is NOT O(2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;).&lt;br /&gt;
* Application&lt;br /&gt;
*# The applications mentioned need to be discussed further.&lt;br /&gt;
&lt;br /&gt;
==[[Network flow problem]]==&lt;br /&gt;
&lt;br /&gt;
* Real Life Applications&lt;br /&gt;
*# There is NO need to include code. Simply mention how the problem was coded along with details on the LP solver used.&lt;br /&gt;
&lt;br /&gt;
==[[Interior-point method for LP]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# Please type “minimize” and “subject to” in formal optimization problem form throughout the whole page.&lt;br /&gt;
* A section to discuss and/or illustrate the applications&lt;br /&gt;
*# Please type optimization problem in the formal form.&lt;br /&gt;
&lt;br /&gt;
==[[Optimization with absolute values]]==&lt;br /&gt;
&lt;br /&gt;
* An introduction of the topic&lt;br /&gt;
*# Add few sentences on how absolute values convert optimization problem into a nonlinear optimization problem&lt;br /&gt;
* Applications&lt;br /&gt;
*# Inline equations at the beginning of this section are not formatted properly. Please fix the notation for expected return throughout the section.&lt;br /&gt;
&lt;br /&gt;
==[[Matrix game (LP for game theory)]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithmic Discussion&lt;br /&gt;
*# aij are not defined in this section.&lt;br /&gt;
&lt;br /&gt;
==[[Quasi-Newton methods]]==&lt;br /&gt;
&lt;br /&gt;
* Theory and Algorithm&lt;br /&gt;
*# Please ensure that few spaces are kept between the equations and equation numbers.&lt;br /&gt;
&lt;br /&gt;
==[[Eight step procedures]]==&lt;br /&gt;
&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Data for the example Knapsack problem (b,w) are missing.&lt;br /&gt;
*# How to arrive at optimal solutions is missing.&lt;br /&gt;
&lt;br /&gt;
==[[Set covering problem]]==&lt;br /&gt;
&lt;br /&gt;
* Integer linear program formulation &amp;amp; Approximation via LP relaxation and rounding&lt;br /&gt;
*# Use proper math notations for “greater than equal to”.&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Please leave some space between equation and equation number.&lt;br /&gt;
&lt;br /&gt;
==[[Quadratic assignment problem]]==&lt;br /&gt;
&lt;br /&gt;
* Theory, methodology, and/or algorithmic discussions&lt;br /&gt;
*# Discuss dynamic programming and cutting plane solution techniques briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Newsvendor problem]]==&lt;br /&gt;
&lt;br /&gt;
* Formulation&lt;br /&gt;
*# A math programming formulation of the optimization problem with objective function and constraints is expected for the formulation. Please add any variant of the newsvendor problem along with some operational constraints.&lt;br /&gt;
*# A mathematical presentation of the solution technique is expected. Please consider any distribution for R  and present a solution technique for that specific problem. &lt;br /&gt;
&lt;br /&gt;
==[[Mixed-integer cuts]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# MILP and their solution techniques involving cuts are extremely versatile. Yet, only two sentences are added to describe their applications. Please discuss their applications, preferably real-world applications, in brief. Example Wikis provided on the website could be used as a reference to do so.&lt;br /&gt;
&lt;br /&gt;
==[[Column generation algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory, methodology and algorithmic discussions&lt;br /&gt;
*# Some minor typos/article agreement issues exist “is not partical in real-world”.&lt;br /&gt;
&lt;br /&gt;
==[[Heuristic algorithms]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology&lt;br /&gt;
*# Please use proper symbol for &amp;quot;greater than or equal to&amp;quot;.&lt;br /&gt;
*# Greedy method to solve minimum spanning tree seems to be missing.&lt;br /&gt;
&lt;br /&gt;
==[[Branch and cut]]==&lt;br /&gt;
&lt;br /&gt;
* Methodology &amp;amp; Algorithm&lt;br /&gt;
*# Equation in most infeasible branching section is not properly formatted.&lt;br /&gt;
*# Step 2 appears abruptly in the algorithm and does not explain much. Please add more information regarding the same.&lt;br /&gt;
*# Step 5 contains latex code terms that are not properly formatted. Please fix the same.&lt;br /&gt;
*# Fix typos:  e.g., repeated “for the current”.&lt;br /&gt;
&lt;br /&gt;
== [[Mixed-integer linear fractional programming (MILFP)]] ==&lt;br /&gt;
&lt;br /&gt;
* Application and Modeling for Numerical Examples&lt;br /&gt;
*# Please check the index notation in Mass Balance Constraint&lt;br /&gt;
&lt;br /&gt;
==[[Fuzzy programming]]==&lt;br /&gt;
&lt;br /&gt;
* Applications&lt;br /&gt;
*# Applications of fuzzy programming are quite versatile. Please discuss few of the mentioned applications briefly. The provided example Wikis can be used as a reference to write this section.&lt;br /&gt;
&lt;br /&gt;
==[[Adaptive robust optimization]]==&lt;br /&gt;
&lt;br /&gt;
* Problem Formulation&lt;br /&gt;
*# Please check typos such as &amp;quot;Let &#039;&#039;u&#039;&#039; bee a vector&amp;quot;.&lt;br /&gt;
*# The abbreviation KKT is not previously defined.&lt;br /&gt;
&lt;br /&gt;
== [[Stochastic gradient descent]] ==&lt;br /&gt;
* Numerical Example&lt;br /&gt;
*# Amount of whitespace can be reduced by changing orientation of example dataset by converting it into a table containing 3 rows and 6 columns.&lt;br /&gt;
&lt;br /&gt;
==[[RMSProp]]==&lt;br /&gt;
&lt;br /&gt;
* Introduction&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;br /&gt;
* Theory and Methodology&lt;br /&gt;
*# Please check grammar in this section.&lt;br /&gt;
* Applications and Discussion&lt;br /&gt;
*# The applications section does not contain any discussion on applications. Please mention a few applications of the widely used RMSprop and discuss them briefly.&lt;br /&gt;
&lt;br /&gt;
==[[Adam]]==&lt;br /&gt;
&lt;br /&gt;
* Background&lt;br /&gt;
*# References at the end of the sentence should be placed after the period.&lt;/div&gt;</summary>
		<author><name>Wc593</name></author>
	</entry>
</feed>