objectiveFunction[x_,y_]:=x*y;
constraintFunction[x_,y_]:= 2x+y;

objFncLevelSetsPlot=ContourPlot[objectiveFunction[x,y],{x,0,1800},{y,0,1800},Contours->30,AspectRatio->1,Frame->False,Axes->True,ImageSize->400];
constraintPlot = ContourPlot[constraintFunction[x,y]==1800,{x,0,900},{y,0,1800},ContourStyle->{Red}];

lp1 = {450,900};
plotpoint[pt_]:= Graphics[{PointSize[Large],Red,Point[pt]}]
movingPlotPoint[t_]:= Graphics[{PointSize[.02],Blue,Point[{t,1800-2t}]}];
oGradient[t_]:= Graphics[{Green,Thick,Arrow[{{t,1800-2t},{1/5*(1800-2t)+t,1/5*t+(1800-2t)}}]}];
cGradient[t_]:=Graphics[{Yellow,Thick,Arrow[{{t,1800-2t},{100*(-2)+t,100*(-1)+(1800-2t)}}]}];

Show[objFncLevelSetsPlot,constraintPlot]
Show[objFncLevelSetsPlot,constraintPlot,plotpoint[lp1]]
Manipulate[{Show[objFncLevelSetsPlot,constraintPlot,movingPlotPoint[t]],":  the objective function value along c"objectiveFunction[t,1800-2t]},{t,0,900}]

Manipulate[{Show[objFncLevelSetsPlot,constraintPlot,movingPlotPoint[t],oGradient[t],cGradient[t]],":  the objective function value along c"objectiveFunction[t,1800-2t]},{t,0,900}]

objectiveFunction[x_,y_]:=5x+2y;
constraintFunction[x_,y_]:=5x^2+2y^2;

objFncLevelSetsPlot=ContourPlot[objectiveFunction[x,y],{x,-4,4},{y,-4,4},Contours->{-12,-10,-8,-6,-4,-2,0,2,4,6,8,10,12},PlotRange->{{-4,4},{-4,4}},AspectRatio->1,Frame->False,Axes->True,ImageSize->400];
constraintPlot = ContourPlot[5x^2+2y^2==14,{x,-4,4},{y,-4,4}];

lp1 = {Sqrt[2],Sqrt[2]};
lp2 = {-Sqrt[2],-Sqrt[2]};
plotpoint[pt_]:= Graphics[{PointSize[Large],Red,Point[pt]}]

Show[objFncLevelSetsPlot,constraintPlot]
Show[objFncLevelSetsPlot,constraintPlot,plotpoint[lp1],plotpoint[lp2]]