[Authorize] // Запрещены анонимные обращения к данной странице public ActionResult RezultUniversal() { SteelMeltingMixtureDatabase _database = new SteelMeltingMixtureDatabase(); List <Components> components = _database.Components.Where(p => p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true).ToList(); List <Elements> elements = _database.Elements.Where(p => p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true).ToList(); List <ComponentsElements> componentsElements = _database.ComponentsElements.Where(p => p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true).ToList(); SolverUniversalModel sm = new SolverUniversalModel( _users, components, elements, componentsElements ); // максимальное количество методов раскроя заготовок int _maxComponents = _database.Components.Count(o => o.Owner.ID_User == _users.CurrentUser.ID_User && o.IsSolve == true); double[] val = new double[_maxComponents + 1]; var db_variant = _database.Variants.Where(p => p.Owner.ID_User == _users.CurrentUser.ID_User).FirstOrDefault(); val = sm.SolverSteelMeltingMixture(db_variant); // ! Save input data to Session //Session["input_data"] = input_data; List <double> lst = val.OfType <double>().ToList(); ViewBag.Rashet = lst; //return View(input_data); return(View()); }
public ActionResult Index(Object sender) { SteelMeltingMixtureDatabase _database = new SteelMeltingMixtureDatabase(); _database.ComponentsElements.RemoveRange(_database.ComponentsElements.Where(o => o.Owner.ID_User == _users.CurrentUser.ID_User)); _database.SaveChanges(); return(RedirectToAction("Index")); }
public SimpleMembershipInitializer() { Database.SetInitializer <SteelMeltingMixtureDatabase>(null); try { using (var context = new SteelMeltingMixtureDatabase()) { if (!context.Database.Exists()) { // Создание базы данных SimpleMembership без применения миграции Entity Framework ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } // Настройка ASP.NET Simple Membership // 1 параметр - имя строки подключения к базе данных. // 2 параметр - таблица, которая содержит информацию о пользователях // 3 параметр - имя колонки в таблице, которая отвечает за хранение логина // 4 параметр - autoCreateTables автоматическое создание таблиц если они не существуют в базе WebSecurity.InitializeDatabaseConnection("SteelMeltingMixtureConnection", "UserProfile", "ID_User", "UserName", autoCreateTables: true); SimpleRoleProvider roles = (SimpleRoleProvider)Roles.Provider; SimpleMembershipProvider membership = (SimpleMembershipProvider)Membership.Provider; // Проверка наличия роли Admin if (!roles.RoleExists("Admin")) { roles.CreateRole("Admin"); } // Проверка наличия роли Operator if (!roles.RoleExists("Operator")) { roles.CreateRole("Operator"); } // Поиск пользователя с логином admin для роли Admin if (membership.GetUser("admin", false) == null) { membership.CreateUserAndAccount("admin", "qwe123"); // создание пользователя roles.AddUsersToRoles(new[] { "admin" }, new[] { "Admin" }); // установка роли для пользователя } //// Поиск пользователя с логином user1 для роли Operator //if (membership.GetUser("user1", false) == null) //{ // membership.CreateUserAndAccount("user1", "qwe123"); // создание пользователя // roles.AddUsersToRoles(new[] { "user1" }, new[] { "Operator" }); // установка роли для пользователя //} } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } }
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) { string provider = null; string providerUserId = null; if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId)) { return(RedirectToAction("Manage")); } if (ModelState.IsValid) { // Insert a new user into the database using (SteelMeltingMixtureDatabase db = new SteelMeltingMixtureDatabase()) { UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower()); // Check if user already exists if (user == null) { // Insert name into the profile table db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); db.SaveChanges(); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false); return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("UserName", "Пользователь с таким именем уже существует. Пожалуйста, введите другое имя."); } } } ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return(View(model)); }
public double[] SolverSteelMeltingMixture(Variants variants) { _variants = variants; #region --- Решение с использованием Solver Foundation SteelMeltingMixtureDatabase _database = new SteelMeltingMixtureDatabase(); List <SolverRowModel> solverList = new List <SolverRowModel>(); double[] mKoefNerav = new double[_components.Count]; // заполнить списки int countItemComponents = 0; foreach (Components itemComponents in _components) { int countItemElements = 0; foreach (Elements itemElements in _elements) { var db_ValElement = _database.ComponentsElements .Where(p => p.ID_Component == itemComponents.ID_Component && p.ID_Element == itemElements.ID_Element && p.ID_Variant == _variants.ID_Variant && p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true) .FirstOrDefault(); mKoefNerav[countItemElements] = 0.01 * db_ValElement.Val; countItemElements++; } var db_Components = _database.Components .Where(p => p.ID_Component == itemComponents.ID_Component && p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true) .FirstOrDefault(); switch (_maxElements) { case 2: solverList.Add(new SolverRowModel { xId = countItemComponents + 1, Koef = 0.01 * db_Components.Cost, Min = db_Components.MinValComponent, Max = db_Components.MaxValComponent, KoefNerav1 = mKoefNerav[0], KoefNerav2 = mKoefNerav[1] }); break; case 3: solverList.Add(new SolverRowModel { xId = countItemComponents + 1, Koef = 0.01 * db_Components.Cost, Min = db_Components.MinValComponent, Max = db_Components.MaxValComponent, KoefNerav1 = mKoefNerav[0], KoefNerav2 = mKoefNerav[1], KoefNerav3 = mKoefNerav[2], }); break; case 4: solverList.Add(new SolverRowModel { xId = countItemComponents + 1, Koef = 0.01 * db_Components.Cost, Min = db_Components.MinValComponent, Max = db_Components.MaxValComponent, KoefNerav1 = mKoefNerav[0], KoefNerav2 = mKoefNerav[1], KoefNerav3 = mKoefNerav[2], KoefNerav4 = mKoefNerav[3], }); break; default: break; } countItemComponents++; } SolverContext context = SolverContext.GetContext(); Model model = context.CreateModel(); Set users = new Set(Domain.Any, "users"); Parameter k = new Parameter(Domain.Real, "Koef", users); k.SetBinding(solverList, "Koef", "xId"); Parameter min = new Parameter(Domain.Real, "Min", users); min.SetBinding(solverList, "Min", "xId"); Parameter max = new Parameter(Domain.Real, "Max", users); max.SetBinding(solverList, "Max", "xId"); Parameter[] KoefNerav = new Parameter[_maxElements]; for (int i = 0; i < KoefNerav.Length; i++) { KoefNerav[i] = new Parameter(Microsoft.SolverFoundation.Services.Domain.Real, "KoefNerav" + (i + 1).ToString(), users); KoefNerav[i].SetBinding(solverList, "KoefNerav" + (i + 1).ToString(), "xId"); } Parameter[] KoefNeravRows = new Parameter[3 + _maxElements]; KoefNeravRows[0] = k; KoefNeravRows[1] = min; KoefNeravRows[2] = max; for (int i = 3; i < KoefNeravRows.Length; i++) // заполняем, начиная с 3 элемента { KoefNeravRows[i] = KoefNerav[i - 3]; } model.AddParameters(KoefNeravRows); Decision choose = new Decision(Domain.RealNonnegative, "choose", users); model.AddDecision(choose); model.AddGoal("goal", GoalKind.Minimize, Model.Sum(Model.ForEach(users, xId => choose[xId] * k[xId]))); // Добавить ограничения-неравенства по каждому химическому элементу int count = 0; foreach (Elements itemElements in _elements) { var db_MinValElement = _database.Elements .Where(p => p.ID_Element == itemElements.ID_Element && p.Owner.ID_User == _users.CurrentUser.ID_User && p.IsSolve == true) .FirstOrDefault(); model.AddConstraint("Nerav_Max_" + (count + 1).ToString(), Model.Sum(Model.ForEach(users, xId => KoefNeravRows[count + 3][xId] * choose[xId])) <= db_MinValElement.MaxValElement); model.AddConstraint("Nerav_Min_" + (count + 1).ToString(), Model.Sum(Model.ForEach(users, xId => KoefNeravRows[count + 3][xId] * choose[xId])) >= db_MinValElement.MinValElement); count++; } // Добавить прямые ограничения по каждой переменной model.AddConstraint("c_choose", Model.ForEach(users, xId => (min[xId] <= choose[xId] <= max[xId]))); // Добавить ограничение по сумме всех переменных, сумма = 100 % model.AddConstraint("c_sum", Model.Sum(Model.ForEach(users, xId => choose[xId])) == 100); try { Solution solution = context.Solve(); Report report = solution.GetReport(); String reportStr = ""; for (int i = 0; i < solverList.Count; i++) { reportStr += "Значение X" + (i + 1).ToString() + ": " + choose.GetDouble(solverList[i].xId) + "\n"; } reportStr += "\n" + report.ToString(); //MessageBox.Show(reportStr); } catch (Exception ex) { //MessageBox.Show("При решении задачи оптимизации возникла исключительная ситуация"); } #endregion --- Решение с использованием Solver Foundation #region --- Формирование массива с результатами расчета double[] out_values = new double[_maxComponents + 1]; // для каждого Xi + величина целевой функции double SumCost = 0; // целевая функция (суммарная стоимость шихты) for (int i = 0; i < out_values.Length - 1; i++) { out_values[i] = Math.Round(choose.GetDouble(solverList[i].xId), 2); SumCost = SumCost + Math.Round(solverList[i].Koef * choose.GetDouble(solverList[i].xId), 2); } out_values[_maxComponents] = Math.Round(SumCost, 2); // последний элемент массива - это целевая функция (суммарная стоимость шихты) #endregion --- Формирование массива с результатами расчета return(out_values); }